蓝牙专题(3)——BLE协议栈(链路层Link Layer)*
• Advertising State 广播态
• Scanning State 扫描态
• Initiating State 发起态
• Connection State 连接态
连接态有两个子角色,Master Role和Slave Role,主连接角色和从连接角色,发起连接的,由发起态进入的叫做主连接态,被动接受连接,由广播态进入的叫做从连接态,断开连接则进入就绪态。进入连接态之后,链路层可以进行连接管理和数据传输,主连接中的链路层将与从连接中的设备通信,并定义传输时间。
处于Master Role的设备可以和多个Slave Role分时通信;处于Slave Role的设备只能和处于Master Role的设备通信。
LL(Link Layer)的比特序采用LSB(Least Significant Bit:最低有效位)最先发送的方式,小端模式。比如一个数据参数X=3,有三个bit,其bit0=1,bit1=1,bit2=0,在空中传输时,先传输bit0,然后传输bit1最后传输bit2.
但是在core_v4.2中有以下描述:
Multi-octet fields, with the exception of the Cyclic Redundancy Check (CRC) and the Message Integrity Check (MIC), shall be transmitted with the least significant octet first.
等之后遇到CRC和MIC时,再来看它们有什么不一样。
DEVICE ADDRESS(设备地址)
LL层使用设备地址识别设备,BLE的设备地址分为公共地址和随机地址。
Public Device Address (公共设备地址)
Static Device Address的最高两个bit都为“1”,Random part of static address为46bits的随机数,但是这46位不能都为1或者0。同时,在一个上电周期内,Static Device Address不允许改变,但是在下一次上电时可以选择是否改变。
高位24bits是随机数部分,其中最高两个bits为“10”;
低位24bits是随机数和IRK经过hash运算得到的hash值,运算的公式为hash = ah(IRK, prand),具体算法我们现在可以先不关心。
当对端BLE设备扫描到该类型的蓝牙地址后,会使用保存在本机的IRK,和该地址中的prand,进行同样的hash运算,并将运算结果和地址中的hash字段比较,相同的时候,才进行后续的操作。
NOTE:
一个BLE设备,可以使用两种类型的地址(一个BLE设备可同时具备两种地址):Public Device Address和Random Device Address。
以上是core_4.2的Vol 6,Part B的第一小节,还有2-6小节:
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂
作者:Crystal软件学堂 bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |