cypress,您好! 我现在有一个关于蓝牙的问题想请教一下。
在批量生产中,我需要每一个产品都有唯一的MAC地址。 我在调试的时候配置蓝牙组件的时候MAC地址都是一样的。
1.请问关于蓝牙的名称,MAC地址等信息,在批量生产的时候如何更改? 是不是都写在了特定的flash区域? 能否通过外部命令更新flash来改变对应的数值。
我想改的地方1个是蓝牙的mac地址,另一个是Manufacturer Specific Data.
已解决! 转到解答。
Manufacturer Specific Data实际上是存储在BLE_config.c文件cy_ble_discoveryData[]或者cy_ble_scanRspData[],没有专门用来修改他们的API,需要直接修改具体的数组。
修改mac地址,可以通过Cy_BLE_GAP_SetBdAddress()完成。
量产过程中改变mac地址,可以通过Sflash Update Tool完成 - Setting Bluetooth Device Address – KBA211407
Manufacturer Specific Data目前还没有好的办法去修改。
您好。 我们想要批量更改Manufacturer Specific Data主要是因为手机端的需求。针对微信小程序在苹果的IOS系统上把MAC地址加密了。 所以无法绑定。工程师那边说IOS把mac地址加密了,每次微信小程序读出来的地址都是不固定的。 我们是希望能够实现IOS和安卓的绑定功能。 我们的蓝牙名称会设置成相同,这个不想每个都不一样。 所以针对这个需求,能否给出一个好的处理建议,感谢!
因为微信小程序端会把mac地址加密,所以想把具体的设备地址存储在Manufacturer Specific Data中对端来读取,是这个意思?
这个区域除非通过固件内进行修改,量产中没有专门的工具做这个。
就微信小程序端来说,我感觉即使进行了mac地址加密,也不应该同一个设备绑定后再次连接时识别为新的设备吧,这个手机端OS应该会做的。
这个问题是写微信小程序的工程师提出来的。 他的意思就是IOS系统提供给微信小程序的MAC地址,每次都不是固定的,导致小程序无法通过MAC地址来确认连接的设备是同一台。所以想在广播包中能够找到别的字段进行识别绑定。 他提出的可以利用Manufacturer Specific Data这个字段来识别同一设备。
如果能够通过串口协议进行修改Manufacturer Specific Data也可以。 如果程序里面有函数可以调用去更改这个区域也可以。 包括蓝牙地址,名称,还有Manufacturer Specific Data,如果能够在程序运行起来以后可以通过函数来更新。 也可以。 我可以用串口写个命令进去。 重新配置。
Manufacturer Specific Data实际上是存储在BLE_config.c文件cy_ble_discoveryData[]或者cy_ble_scanRspData[],没有专门用来修改他们的API,需要直接修改具体的数组。
修改mac地址,可以通过Cy_BLE_GAP_SetBdAddress()完成。
void RspData_Rebuild( void )
{
cy_stc_ble_gapp_scan_rsp_data_t *p;
p = &cy_ble_scanRspData[0];
p->scanRspData[18] = 0x01;
p->scanRspData[19] = 0x02;
p->scanRspData[20] = 0x03;
p->scanRspData[21] = 0x04;
p->scanRspData[22] = 0x05;
}
我在ble初始化之前把这个数值改写一下。 测试了一下,ok了。 我后面在flash里面把这个值写进去,上电更新一下就可以了。 非常感谢!
IOS封装了底层MAC,你有没有让BLE通过广播的形式,把MAC广播出来,这样安卓和IOS都可以共用一个MAC地址做设备绑定。因为安卓可以读取硬件的MAC