当前位置:首页 > 公众号精选 > 嵌入式艺术
[导读]经过Physical Layer的定义,通信所需的物理通道已经okay了,即40个RF Channel(后面统一使用Physical Channel指代)此时Link Layer可以粉墨登场了,它主要的功能,就是在这些Physical Channel上收发数据,与此同时,不可避免的需要控制RF收发相关的参数。



前言
BLE

经过Physical Layer的定义,通信所需的物理通道已经okay了,即40个RF Channel(后面统一使用Physical Channel指代)

此时Link Layer可以粉墨登场了,它主要的功能,就是在这些Physical Channel上收发数据,与此同时,不可避免的需要控制RF收发相关的参数。


除此之外,还要做到:

  • Physical Layer仅仅提供了有限的40个Physical Channel,而BLE中参与通信的实体的数量,肯定不是这个数量级。Link Layer需要解决Physical Channel的共享问题

  • 通信是两个实体之间的事情,对这两个实体来说,它们希望看到一条为自己独享的传输通道(就是我们所熟悉的逻辑链路,Logical Link)。这也是Link Layer需要解决的

  • Physical Channel是不可靠的,任何数据传输都可能由于干扰等问题而损毁、丢失,这对有些应用来说,是接受不了的。因此Link Layer需要提供校验、重传等机制,确保数据传输的可靠性;


状态(state)和角色(role)的定义

BLE协议在Link Layer层抽象出5种状态

  • Standby State:待机状态,不发送数据,也不接收数据。该状态可以由任何状态进入,也可以切换到除Connection状态外的任意一种状态。

  • Advertising State:广播状态,可以发送,监听,响应广播通道包,由Standby状态进入。

  • Scanning State:扫描状态,能够监听广播设备发送的广播包,由Standby状态进入。

  • Initiating State:初始化状态,监听指定设备的广播通道包,并且响应广播包,并发送连接请求,以便和广播设备建立连接。当连接成功后,Initiater和对应的Advertiser都会切换到Connection状态。该状态由Standby状态进入。

  • Connection State:和某个实体建立了单独通道的状态,在通道建立之后,由Initiating State或Advertising State进入。通道断开后,会重新回到Standby状态。

进入Connect State后,又定义了两种角色:

  • Master Role:由Initiating State进入的Connect State,连接成功后,变成了Master Role。

  • Slave Role:由Advertising State进入的Connect State,连接成功后,变成了Slave Role。



空中接口数据包

该章节官方文档定位:Core5.0 P2562

状态和角色定义完成后,剩下的事情就简单了,主要包括两类:

  • 提供某一状态下,和其它实体对应状态之间的数据交换机制;

  • 根据上层实体的指令,以及当前的实际情况,负责状态之间的切换。

BLE协议中,这些事情是由一个叫做空中接口数据包(Air Interface Packets)的家伙负责。


Air Interface Packets定义了一种包的格式,主要用于描述LE Uncoded PHY、advertising channel和data channel的通信格式


包的格式如下

3.1Preamble字段

Preamble前导码:是0和1的交替序列,当物理通道为LE 1M PHY时,前导码为1Byte;当前导码为LE 2M PHY时,前导码为2Byte。

格式如下


3.2Access Address字段

Access Address:对于所有在广播通道发送的数据包,其值都为0x8E89BED6。一旦链路层处于Initiating State状态时,会生成一个新的Access Address用于连接。该Access Address为一个4Byte的值。

蓝牙使用Access Address来标识不同的设备,Access Address可以是一个公共的地址,也可以是一个随机的地址,无论是哪一种类型的地址,均为48bits长度。

  • 公共地址:官方定义的一些规范,通用的地址,这里不做解释。

  • 随机地址:可能是静态地址,或者是私有地址


3.2.1静态地址

静态地址一般都是随机生成的,但是需要满足下面的几点规则:

  • 地址的两个最高有效位应该等于1

  • 随机地址部分,至少有一位为0

  • 随机地址部分,至少有一位为1

大多数的设备(手机)都是在上电之后,初始化一次静态地址,一旦初始化后,静态地址就不变了;重新上电后,会生成新的静态地址。


3.2.2私有地址

私有地址又分为:不可解析私有地址和可解析的私有地址。

① 不可解析的私有地址

不可解析私有地址,遵守以下生成规则:

  • 地址的两个最高有效位应该等于0

  • 随机地址部分,至少有一位为0

  • 随机地址部分,至少有一位为1

  • 不能与公共地址有冲突


② 可解析的私有地址

解析的私有地址,说直白点就是带加密算法所生成的。设备需要有Local Identity Resolving Key (IRK)或者the Peer Identity Resolving Key (IRK)这两个密钥,生成24bit的号码,

可解析的私有地址,遵守以下规则:

  • 地址的两个最高有效位为0和1

  • 随机地址部分,至少有一位为0

  • 随机地址部分,至少有一位为1

总结:最高有效位的前两位,代表了设备地址的类型


3.3PDU字段

Air Interface Packets整体的包结构我们已经熟知,下面主要分析以下PDU字段。

PDU:分为两种,广播通道上传输Advertising Channel PDU;数据通道上传输Data Channel PDU,长度为2-257字节


3.3.1Advertising Channel PDU

广播通道PDU,包括Advertising PDUScanning PDUInitiating PDU三种类型。

广播通道的PDU,由16bit的数据头和1-255Byte的可变大小数据组成。

16bit数据头组成如下

  • PDU Type字段的类型有多种,如下

PDU Type有多种,文章定位:core 5.0 P2567,可自行查阅。

  • ChSel:该位为1,支持LE Channel Selection Algorithm,即LE通道选择算法,反之,不支持。

  • TxAdd:该位为0,表明Payload的AdvA字段为公共的;该位为1,表明Payload的AdvA字段为随机的。

  • Length:该字段表明了Payload的长度

官方文档定位:core 5.0 P2569


常见的Advertising PDU

  • ADV_IND:该PDU用于连接和扫描无定向的广播事件。

  • ADV_DIRECT_IND:该PDU用于连接和扫描定向的广播事件。

  • ADV_NONCONN_IND:该PDU用于不可连接和不可扫描的非定向广播事件


常见的Scaning PDU

  • SCAN_REQ:该PDU为发送扫描请求

  • SCAN_RSP:该PDU包括了广播者的地址和返回的扫描响应数据。


常见的Initiating PDU

  • CONNECT_IND:该PDU用于建立连接

LLData域有对应了一些链路层参数的设置,可以详细看Core 5.0 P2578

每一种PDU Type,都会定义自己的Payload组成。


3.3.2Data Channel PDU


数据通道PDU的格式,包括16bit的Header,可变大小的Payload,以及消息完整性检查MIC.

包的格式如下

Header包括

LLID:该字段标识了这个包为LL Data PDU或者LL Control PDU

NESN:下次期望的序列号

根据LLID字段,Data Channel PDU又分为LL Data PDU和LL Control PDU两种类型。


  • LL Data PDU:该PDU用于发送链路层的数据。

当LLID为01b时,并且Length=0时,表示一个Empty PDU。

当LLID为10b时,则Length不能设置为0。


  • LL Control PDU:该PDU用于控制链路层的连接。

Opcode操作码也有多种:

每一种操作码对应不同的数据长度。详细可见core5.0 P2589


3.4CRC字段


CRC字段:在链路层包的最后,校验所有的PDU数据,大小长度为3Byte。

如果PDU数据加密,则CRC将会计算加密后的PDU数据。

CRC算法采用多项式求和的形式进行,感兴趣的可以了解。Core 5.0 P2601



总结

本篇主要讲了BLE的Link Layer,包括链路层定义的角色和状态,空中接口数据包的通信格式以及各个字段的含义,方便我们去分析LOG和定位问题。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

近日,特斯拉发布了Optimus最新进展视频,展现了其分拣电池、行走、执行工厂任务的能力,并配文“最近正在努力变得有用!”。

关键字: 特斯拉 机器人 Optimus

2024年5月9日晚,中国大陆晶圆代工龙头厂中芯国际发布2024年第一季度财报,销售收入为17.5亿美元,环比增长4.3%,同比增长19.7%;毛利率为13.7%,均好于指引。值得一提的是,这也是中芯国际的季度营收首次超...

关键字: 中芯国际

据韩联社报道,近日 SK 海力士子公司 SK 海力士系统集成电路拟以3.493亿美元的价格向无锡产业发展集团有限公司转让所持有的 SK 海力士系统集成电路(无锡)有限公司(下文简称无锡晶圆厂) 49.9% 股权。

关键字: SK 海力士 晶圆厂

近日,美国空军在加州爱德华兹空军基地进行了首次正式的AI控制战斗机试飞,美联社等少数媒体代表受邀观摩,美国空军方面明确表示,AI战机将是未来美国空中力量的重要组成部分。

关键字: 美国 AI

从近期媒体的一份爆料来看,苹果近年来其实已经下了不少力气深耕AI领域——在过去六年间从谷歌挖走了数十名人工智能专家,并在苏黎世创建了一个神秘的欧洲实验室。

关键字: 苹果 谷歌 实验室 AI

据外媒最新报道,微软近日披露了一个名为“ Dirty Stream ”的严重安全漏洞,该漏洞可能影响到数十亿下载量的 Android 应用。这种攻击可能使得攻击者完全控制应用,未经授权访问敏感用户数据,或拦截私密登录信息...

关键字: 安卓 漏洞 小米

近日,能源巨头壳牌宣布退出中国市场的电力业务,引发市场广泛关注。4月29日,壳牌(中国)新闻发言人对外确认了这一消息。此前,江苏和广东电力交易中心已分别发布公告,称已受理壳牌能源(中国)有限公司自愿退出市场的申请。

关键字: 壳牌 电力

业内消息,今年一季度中国智能手机出货量为6330万台,同比增长1%。这结束了连续11个季度的年度下滑。在厂商方面,四大厂商——OPPO/一加、荣耀、华为和vivo的市场份额不相上下;OPPO/一加以17.1%的市场份额领...

关键字: iPhone Others 苹果 库克

业内媒体报道,近日美国进一步收紧了对华为的出口限制,吊销了英特尔、高通等公司向华为出口芯片的许可证。华为迅速反击,海思半导体董事长何庭波,终端 BG 董事长余承东对内发布《致战友们的一封信》,提出针对 PC 端芯片的备胎...

关键字: 华为 高通 英特尔

电平逆变器的应用推荐低压MOS系列,产品稳定,性能可靠,满足恶劣环境工况下使用

关键字: 功率器件 多电平逆变器 逆变器 低压MOS
关闭