跳转至

MAC2AC算法更新指南


更新说明

Telink团队优化 Access Code 生成算法,可以避免因生成的Access Code不符合规范,导致影响产品无线通讯的成功率。

更新后的算法,确保了每个MAC生成的Access Code符合BLE spec规范,并且增多了Access Code的总量,降低了冲撞的概率。

以下是2.4GHz low latency相关SDK和项目中更新Access Code的生成算法的用户指南。

更新步骤

添加新Access Code代码到工程

如下图所示,将mac2ac.c拷贝到vendor/common目录下:

mac2ac.c路径

替代旧算法

旧MAC生成Access Code算法函数为:tsync_get_ac_chn_from_mac,位于application/tws目录下,其作用是将mac地址通过算法生成通讯用的Access Code和回连时的channel。

此函数原型为:

int tsync_get_ac_chn_from_mac (unsigned char *mac, unsigned char *ac, unsigned char *chn)
{
   int c = tsync_crc16 (0xffff, mac, 6)
   c = tsync_access_code_16to32 (c);
   tmemcpy (ac, &c, 4);
   *chn = tsync_crc16 (0x0, mac, 6) % 37;
   if (*chn == 2)
   {
        (*chn)++;
    }
    return 1;
}

修改为:

int tsync_get_ac_chn_from_mac (unsigned char *mac, unsigned char *ac, unsigned char *chn)
{
#if MAC2AC_NEW_ALGORITHM
    extern u32 mac2ac(u8* mac);
    u32 c = mac2ac(mac);
#else
    int c = tsync_crc16 (0xffff, mac, 6);
    c = tsync_access_code_16to32 (c);
#endif
    tmemcpy (ac, &c, 4);
    *chn = tsync_crc16 (0x0, mac, 6) % 37;
    if (*chn == 2)
    {
        (*chn)++;
    }
    return 1;
}

然后在app_config.h里加上如下宏定义:

#define         MAC2AC_NEW_ALGORITHM                    1

验证新MAC生成Access Code算法(方法1)

Step 1 烧录MAC地址:0xA4C138000000,通过BDT工具烧录如下图所示:

烧录MAC地址

Step 2 在async_init函数里添加如下两行打印:

    my_dump_str_data(1, "MAC", mac, 6);
    my_dump_str_data(1, "AC", &ac, 4);

Step 3 编译&烧录&运行,正确移植后,能看到打印的MAC和AC结果为:

MAC: a4 c1 38 00 00 00 
AC:  b1 4d 6c a2 

验证新MAC生成Access Code算法(方法2)

Step 1 在代码中加上如下函数,并在初始化函数(user_init)中调用:

void verify_mac2ac_algorithm()
{
    u8 mac[6] = {0xA4, 0xC1, 0x38, 0x00, 0x00, 0x00};
    u32 ac = 0;
    u8 chn = 0;
    tsync_get_ac_chn_from_mac(mac, (u8 *)&ac, &chn);
    my_dump_str_data(1, "MAC", mac, 6);
    my_dump_str_data(1, "AC", &ac, 4);
}

Step 2 编译&烧录&运行,正确移植后,能看到打印的MAC和AC结果为:

MAC: a4 c1 38 00 00 00 
AC:  b1 4d 6c a2