CH571F蓝牙主机怎么实现通过读取从机广播内MAC地址进行连接,能不能实现绑定记忆

CH573例程内没有关于解读分析从机广播数据的方式,如果在从机的广播数据内加入其MAC地址,主机怎么可以进行分析读取并保存其MAC地址为后续自动连接

主机可以获取到从机的广播包和扫描应答包信息,这个结构体中包含该成员

image.png

建议连接是需要通过MAC地址发起的,在此之前已经获取到从机的广播包信息,包含MAC地址。因此可以对这个MAC地址发起连接。

蓝牙BLE主机Central讲解一(建立连接) - SweetTea_lllpc - 博客园 (cnblogs.com)



例程从机的广播数据内是没有包含其自身的MAC的吧,应该用哪个类型进行区别


1726635914721.png这个应该就是广播包吧,有个类型啥的这些,应该怎么改呢


主机可以获取到从机的MAC地址和广播信息,这两者可以对应上,也就是在上面结构体截图的地方加上这两部分的打印。

将MAC放在广播包也可以实现,先使用接口函数获取芯片本身MAC(如果自定义则自行填入):GetMACAddress。然后填入广播包。广播包内容修改:

CH573 CH582 CH579蓝牙从机(peripheral)例程讲解二(广播内容修改) - WCH蓝牙应用分享 - 博客园 (cnblogs.com)


意思是从机广播的MAC地址是指在初始化函数已经进行设置?1726653206038.png


广播内容本身不带有MAC地址,可以自行将MAC地址填入到广播包中。

MAC地址获取,可以获取芯片本身的MAC地址,这是全球唯一的MAC,通过FLASH例程的接口函数获取。或者自定义的MAC地址,既然是自定义的MAC地址,则自己是知道MAC地址的,直接填入就可以了。


还是没懂具体是怎么实现的,能详细讲一下么
首先广播数据包内写入从机MAC地址后,从机这边的数据类型也是自己定义还是有标准的 ?image.png
然后主机扫描到数据后 ,按你之前发的那个对应结构体查到最后面的结构体里有一个addr[_addr_len],这个内的数据是自动识别进去的吗,还是怎么样的1726725715628.png1726725678021.png


通过读取从机广播内MAC地址进行连接”是只要在连接前,BLE主机可以获取到MAC地址就可以了吗?如果“是”,可以直接在图中的addr[B_ADDR_LEN]数组中获取。这与通过读取从机广播内MAC地址进行连接”设想中不同的是,addr[B_ADDR_LEN]是BLE协议规定的包头中规定存在的,而非由广播包/扫描应答包内容携带。

如果您一定要在从机端MCU的广播包(advertData数组)/扫描应答包(scanRspData数组)内容中携带MAC地址,可以在上述两数组之一中添加数据类型为0xFF(GAP_ADTYPE_MANUFACTURER_SPECIFIC)的自定义字段,而后主机端可以在图中的*pEvtData数组中解析出0xFF字段中的内容。如果用于存放BLE的MAC地址,在我看来是重复工作了,addr[B_ADDR_LEN]中已存在。1726725678021.png


没理解第一段话的具体意思。你的意思是不是:addr[B_ADDR_LEN]是BLE协议规定的,是对应从机例程初始化中定义的MAC地址,如下图这部分。1726653206038.png
然后主机收到广播数据中,就可以通过下图deviceinfo结构体中对应到的地址addr[B_ADDR_LEN]image.png
是不是以上这样的一个过程呢?


如上的MAC地址对应关系没问题。此处的MAC地址就可以直接用起来,不用修改(advertData数组)或是(scanRspData数组)。


只有登录才能回复,可以选择微信账号登录