7 Replies Latest reply on Mar 28, 2020 1:32 AM by JeHa_3912621

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

    JeHa_3912621

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

       

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

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

       

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

        • 1. Re: 蓝牙mac地址的批量写入问题
          ShipingW_81

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

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

          • 2. Re: 蓝牙mac地址的批量写入问题
            JeHa_3912621

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

            • 3. Re: 蓝牙mac地址的批量写入问题
              ShipingW_81

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

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

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

              • 4. Re: 蓝牙mac地址的批量写入问题
                JeHa_3912621

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

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

                • 5. Re: 蓝牙mac地址的批量写入问题
                  ShipingW_81

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

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

                  • 6. Re: 蓝牙mac地址的批量写入问题
                    zhch_4550981

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

                    • 7. Re: 蓝牙mac地址的批量写入问题
                      JeHa_3912621

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