蓝牙mac地址的批量写入问题

公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
JeHa_3912621
Level 3
Level 3
25 replies posted 10 replies posted 10 questions asked

cypress,您好! 我现在有一个关于蓝牙的问题想请教一下。

在批量生产中,我需要每一个产品都有唯一的MAC地址。 我在调试的时候配置蓝牙组件的时候MAC地址都是一样的。

1.请问关于蓝牙的名称,MAC地址等信息,在批量生产的时候如何更改?  是不是都写在了特定的flash区域?  能否通过外部命令更新flash来改变对应的数值。

我想改的地方1个是蓝牙的mac地址,另一个是Manufacturer Specific Data.

pastedImage_0.png

0 点赞
1 解答
ShipingW_81
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 replies posted

Manufacturer Specific Data实际上是存储在BLE_config.c文件cy_ble_discoveryData[]或者cy_ble_scanRspData[],没有专门用来修改他们的API,需要直接修改具体的数组。

修改mac地址,可以通过Cy_BLE_GAP_SetBdAddress()完成。

在原帖中查看解决方案

0 点赞
7 回复数
ShipingW_81
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 replies posted

量产过程中改变mac地址,可以通过Sflash Update Tool完成 - Setting Bluetooth Device Address – KBA211407

Manufacturer Specific Data目前还没有好的办法去修改。

0 点赞

您好。 我们想要批量更改Manufacturer Specific Data主要是因为手机端的需求。针对微信小程序在苹果的IOS系统上把MAC地址加密了。 所以无法绑定。工程师那边说IOS把mac地址加密了,每次微信小程序读出来的地址都是不固定的。 我们是希望能够实现IOS和安卓的绑定功能。 我们的蓝牙名称会设置成相同,这个不想每个都不一样。 所以针对这个需求,能否给出一个好的处理建议,感谢!

0 点赞
ShipingW_81
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 replies posted

因为微信小程序端会把mac地址加密,所以想把具体的设备地址存储在Manufacturer Specific Data中对端来读取,是这个意思?

这个区域除非通过固件内进行修改,量产中没有专门的工具做这个。

就微信小程序端来说,我感觉即使进行了mac地址加密,也不应该同一个设备绑定后再次连接时识别为新的设备吧,这个手机端OS应该会做的。

0 点赞

这个问题是写微信小程序的工程师提出来的。 他的意思就是IOS系统提供给微信小程序的MAC地址,每次都不是固定的,导致小程序无法通过MAC地址来确认连接的设备是同一台。所以想在广播包中能够找到别的字段进行识别绑定。 他提出的可以利用Manufacturer Specific Data这个字段来识别同一设备。

如果能够通过串口协议进行修改Manufacturer Specific Data也可以。 如果程序里面有函数可以调用去更改这个区域也可以。 包括蓝牙地址,名称,还有Manufacturer Specific Data,如果能够在程序运行起来以后可以通过函数来更新。 也可以。 我可以用串口写个命令进去。 重新配置。

0 点赞
ShipingW_81
Moderator
Moderator
Moderator
500 replies posted 250 solutions authored 250 replies posted

Manufacturer Specific Data实际上是存储在BLE_config.c文件cy_ble_discoveryData[]或者cy_ble_scanRspData[],没有专门用来修改他们的API,需要直接修改具体的数组。

修改mac地址,可以通过Cy_BLE_GAP_SetBdAddress()完成。

0 点赞

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里面把这个值写进去,上电更新一下就可以了。 非常感谢!

0 点赞

IOS封装了底层MAC,你有没有让BLE通过广播的形式,把MAC广播出来,这样安卓和IOS都可以共用一个MAC地址做设备绑定。因为安卓可以读取硬件的MAC

0 点赞