Firefly开源社区

打印 上一主题 下一主题

广播数据的MAC地址

46

积分

0

威望

0

贡献

游客

积分
46

广播数据的MAC地址

发表于 2015-6-3 12:34:58      浏览:12731 | 回复:8        打印      只看该作者   [复制链接] 楼主
在BLE发送广播时,手机可以扫描到BLE发出的广播数据,其中有设备名和MAC地址;但是我看app_set_adv_data()的时候没有发现把MAC地址广播出去吖。只是从NVDS中读取设备名并广播出去,但是手机却可以扫描到MAC地址。其中在初始化时调用的app_gap_read_bdaddr_req()以及响应app_gap_read_bdaddr_req_cmp_evt_handler()函数,只是得到的MAC地址并把它定入struct gap_read_bdaddr_req_cmp_evt里去吖,广播时是怎么广播地址出去的呢?这是为什么呢?求大神解决。
回复

使用道具 举报

151

积分

0

威望

0

贡献

技术小白

积分
151
发表于 2015-6-3 14:42:12        只看该作者  沙发
空中传播的广播包都包含了 设备的mac 地址,这个地址在蓝牙初始化的时候就已经通过hci 命令写入写入模块,写入的过程在闭源的代码里。
回复

使用道具 举报

46

积分

0

威望

0

贡献

游客

积分
46
发表于 2015-6-3 15:30:25        只看该作者  板凳
FireBLE_blue 发表于 2015-6-3 14:42
空中传播的广播包都包含了 设备的mac 地址,这个地址在蓝牙初始化的时候就已经通过hci 命令写入写入模块, ...

写入模块?MAC地址不是写在NVDS上了吗?你说的是在蓝牙初始化时,已经通过HCI命令写入模块是啥意思?
回复

使用道具 举报

151

积分

0

威望

0

贡献

技术小白

积分
151
发表于 2015-6-3 16:13:51        只看该作者  地板
xiaolong_ba 发表于 2015-6-3 15:30
写入模块?MAC地址不是写在NVDS上了吗?你说的是在蓝牙初始化时,已经通过HCI命令写入模块是啥意思?

MAC 地址是保存在NVDS ,蓝牙协议栈初始化蓝牙部分的时候,读取nvds 的MAC,写入了蓝牙模块(也就是蓝牙部分,对于整个芯片而言,蓝牙算是一部分,和 mcu通信 应该是通过uart 类似的接口)。HCI 可以看蓝牙的规格书,是其中专门的一层。

每个蓝牙设备都有个mac ,这个mac地址不是固化的,是每次初始化的时候初始化进去的。
回复

使用道具 举报

46

积分

0

威望

0

贡献

游客

积分
46
发表于 2015-6-3 20:25:18        只看该作者  5#
FireBLE_blue 发表于 2015-6-3 16:13
MAC 地址是保存在NVDS ,蓝牙协议栈初始化蓝牙部分的时候,读取nvds 的MAC,写入了蓝牙模块(也就是蓝牙 ...

那我的理解是:
1、MAC地址是一出厂时,就已经写在了NVDS上了。在初始化过程中,会读取nvds的MAC地址,并写入到存放MAC地址信息的结构体gap_read_bdaddr_req_cmp_evt中去,对吗?
2、初始化完毕之后,当我要发送广播时,在app_set_adv_data里只是设置了设备名,BLE模块是在哪里把mac地址通过广播包发送出去的?我看adv_data[]数组里只有设备名,并没有mac地址在里面吖?我的意思是想知道mac地址是在哪里加到广播包并发送出去的?
回复

使用道具 举报

151

积分

0

威望

0

贡献

技术小白

积分
151
发表于 2015-6-4 10:10:37        只看该作者  6#
xiaolong_ba 发表于 2015-6-3 20:25
那我的理解是:
1、MAC地址是一出厂时,就已经写在了NVDS上了。在初始化过程中,会读取nvds的MAC地址, ...

1.MAC 在出厂时默认有一个保存在NVDS上,NVDS是可以修改的哦,也就是MAC也是可以改的;在初始化的时候会读nvds的MAC,写入蓝牙的core,之后从蓝牙core读出来保存在你说的结构体struct gap_read_bdaddr_req_cmp_evt里,并不是直接读nvds,一写一读,设备以为自己的广播地址是以最后从core读出来的为准。

2.ble 的广播由蓝牙core 控制,uint8_t app_set_adv_data(uint16_t disc_mode)函数设置了广播的数据,这个数据最大31个字节,你看一下蓝牙core4.0 规格书P2203,有描述广播包的结构,Payload 一共有37 个字节,前6个字节就是广播设备的mac,后面31个字节才是你通过app_set_adv_data函数设置的数据,前面初始化的时候已经把mac写入core,core在发送广播包的时候会做一个拼接。由此,广播包上已近携带了广播设备的mac。
回复

使用道具 举报

46

积分

0

威望

0

贡献

游客

积分
46
发表于 2015-6-4 12:04:52        只看该作者  7#
FireBLE_blue 发表于 2015-6-4 10:10
1.MAC 在出厂时默认有一个保存在NVDS上,NVDS是可以修改的哦,也就是MAC也是可以改的;在初始化的时候会 ...

大感谢,现在清楚了,谢谢:lol
回复

使用道具 举报

151

积分

0

威望

0

贡献

技术小白

积分
151
发表于 2015-6-4 14:43:16        只看该作者  8#
xiaolong_ba 发表于 2015-6-4 12:04
大感谢,现在清楚了,谢谢

不客气
回复

使用道具 举报

179

积分

0

威望

0

贡献

技术小白

积分
179
发表于 2015-6-5 15:25:15        只看该作者  9#
学习了,好贴!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

友情链接 : 爱板网 电子发烧友论坛 云汉电子社区 粤ICP备14022046号-2
快速回复 返回顶部 返回列表