BLE中LL层的空口包格式
空口包基本格式
Preamble-前导码
前导码用于射频收发同步。通过发送0101或1010这样类似于方波的信号,方便接收机对数据包接收进行同步。如上图,具体发0101还是1010则根据Access address的LSB来决定。另外要注意,1M PHY的Preamble为8bit,2M PHY的Preamble为16bit
Access Address-访问地址
Access Address (简称AA)是接入地址,注意不是MAC地址,该地址用于标识数据包身份。
根据物理信道的不同,取值分为两种情况:
- 广播信道(即37、38、39信道)的AA,取值固定为0x8E89BED6。
- 其他非广播信道的AA为一个32bit的随机值,由Initiator生成。
对于非广播信道的AA值,其随机性有一定要求,例如不能全为0或全为1,每8bit不能重复等,具体参考spec的说明
PDU-协议数据单元
通信协议要传递的数据。LL层的作用便是让这些数据能顺利的传输到对端设备,
PDU以外的字段都是为了通信本身而服务,他不包含用户要传递的信息。
PDU内部除了更核心的有效载荷外,还会包含上层GAP、L2CAP、ATT等其他协议的信息,就想洋葱一样层层包起来,而洋葱的最外层就是LL层的PDU。
例如上图是一个常见的LL层数据包的结构,在PDU内部包含了L2CAP协议的头,包含了ATT协议的头,再细化可能还包含了其他协议的控制数据。
根据内部包含不同协议层的控制信息,PDU类型多种多样。在后面的内容中会进一步做说明
CRC-循环冗余校验
即常见的校验手段,用于确认数据传输过程的完整性。
CTE-恒音扩展
CTE为5.1版本专门为AOA和AOD应用新增字段,该字段为一段长度不小于16us,不大于160us的连续“1”值。在通信时的特征为一个持续的单音信号(正弦波),目的是使得接收机方便测量信号的相位。具体说明请参考spec。
总结
蓝牙的LL层定义和作用和经典的OSI 7层模型中的数据链路层作用一致。起到将比特组合成字节在组合成帧的作用,并包含硬件地址寻址,差错校验等功能。
而更上层协议的实现,则通过PDU内部各种类型的数据来构建。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现