Texas Instruments CC2540/41
Bluetooth® Low Energy
Software Developer’s Guide
v1.3.2
Document Number:SWRU271F
《低功耗蓝牙开发权威指南》
Robin Heydon著,陈灿峰、刘嘉 译
机械工业出版社
2014.6
TI_BLE软件开发笔记4-链路层
标签: 读书笔记 BLE
链路层定义了两个设备如何利用无线电传输信息。它包含了报文、广播、数据通道的详细定义,也规定了发现其他设备的流程、广播的数据、连接的建立、连接的管理以及连接中的数据传输。ISM频段的干扰、噪声、深度衰落等无线传输系统的挑战加剧了链路层的复杂度。
1.链路层状态机
就绪态
广播态
扫描态:主动扫描,被动扫描
发起态
连接态:主,从
1.1就绪态
上电后,链路层进入并保持就绪态,直到接到主机命令。
就绪态是链路层状态机的中心状态,尽管是非活动状态,但是最为重要。
1.2广播态
处于广播态的链路层可以发送广播报文,也可以发送扫描响应,用以回应主动扫描的设备。
可被发现或可被连接的设备需要处于广播态。想向一定区域内其他设备广播数据的设备也要处于广播态。
为了成为广播者,必须要有发射机。
广播态的设备停止广播后可进入就绪态。在收到发起者的连接请求后,广播态的设备进入连接态。
1.3扫描态
处于扫描态的设备能够接收广播信道的报文。扫描态可以简单的侦听哪些设备正在广播。扫描态有两个子状态:被动扫描和主动扫描。
扫描态的设备只能进入就绪态,转换的条件是停止扫描。
被动扫描
设备只能被动的扫描,不能发送任何报文。被动扫描可以在只有接收机的设备中实现。
主动扫描
LL一旦发现了新的广播态设备,都会发送扫描请求,并等待该请求的响应。扫描请求和响应报文都在广播信道中传输。为了使主动扫描更为有效,扫描响应应尽量为静态数据。
1.4 发起态
为了发起连接,处于发起态的发起者,其接收机用于侦听自己试图连接的设备。如果收到了来自该设备的广播报文,LL会向其发送连接请求并进入连接态,并假设广播者也进入连接态。
如果发起者不再试图,也可以进入就绪态。
1.5 连接态
从发起态或广播态均可进入连接态。两种情况均源于发起者向广播者发送连接请求报文。
连接态中,两个设备相互传送数据信道报文,这也是唯一一个用到数据信道的状态,其他各个状态均使用广播信道。
连接态的设备只能通过断开链接转换为就绪态,而不能进入其他状态。
主连接态
主连接态只能从发起态进入。
为了成为主设备,必须向对端设备发起连接。
主设备必须定期向从设备发送报文,从设备只有回复这些报文才能发送自己的数据。
从连接态
从连接态只能从广播态进入。
为了成为从设备,必须向对端设备进行广播。
从设备只有在正确接收主设备的报文之后才能发送。收到主设备的一个报文后,从设备可以发送一个自己的报文。如果从设备想要发送更多的数据,则必须等待主设备发送另外的报文再回复。从设备也可以随时忽略主设备以达到节能的目的。这样一来,从设备可以通过“休眠”节省大量的能量。
1.6 多状态机
一个链路层的具体实现可以拥有多个独立的状态机。例如一个设备可以同时成为从设备、广播者和主动扫描者。其中的限制:
不能同时成为主从设备。
如果成为了主设备,便不能同时成为从设备。反之亦然。这意味着主设备不能发送可用于连接的广播报文(否则就可能变成从设备)。不过主设备还是可以发送不可连接的广播报文或是可发现的广播报文。同理,从设备也不能发起连接。通过这个限制,设备在任何时间点上应该做什么具有确定性。
一个设备也不可以同时成为两个主设备的从设备
从设备不能广播可连接的广播报文(如果和设备A连接的从设备B又广播了产生连接,那么这个从设备B又会变成另一个设备的从设备,违背了不能同时成为两个主设备的从设备这一原则)。事实上,同时作为两个主设备的从设备,在经典蓝牙中称为分散式网络(scatternet),是允许的。但在BLE中不支持。
一个不太恰当的类比:主设备就像是封建社会里的丈夫,从设备就像是封建社会里的妻子。一个人不可能同时既是丈夫也是妻子,一个人不可能同时兼具男女两种身份(这里暂时不考虑双性恋人群)。因此一个设备不可能同时成为主从设备。同理,一个妻子不可能拥有多个丈夫,就像一个设备不可以同时成为多个主设备的从设备。但一个主设备可以有多个从设备,类比旧社会的一夫多妻制。
2. 报文
报文是带有标签的数据,由一个设备发送,另一个设备接收。标签指明了数据由谁发送,由谁接收。
报文的基本结构如下:
报文的开始是一小段训练序列,称为前导。之后是接入地址,接收机用它将报文和背景噪声区分开。之后是报头和长度字节。再之后是报文的净荷,以及用于确保净荷正确性的循环冗余校验码。
2.1 广播报文和数据报文
BLE中,有两类报文:广播报文和数据报文。设备利用广播报文发现、连接其他设备。一旦连接建立之后,则开始使用数据报文。数据报文只能被连接中的两个设备(主、从设备)所理解,而广播报文则可以广播给多个侦听设备或者只发送给某个特定设备。
是广播报文还是数据报文由其传输所在的信道决定。BLE规定了3个广播信道和37个数据信道。如果报文在某个广播信道中传输,则为广播报文,反之则为数据报文。
2.2 白化
FSK接收连续相同比特的能力很差。当发送一串如“000000000000”的比特序列,接收机会以为发射机的中心频率向左偏移,进而导致频率失锁,之后的比特“1”会被错过,报文接收失败。为了避免这种情况,BLE使用了“白化器”来随机化发送的数据。
白化器是一个很短的输出“0”、“1”序列的随机数发生器。接收机可以使用相同的随机数发生器来恢复原始的比特。为了在输出序列中保留原始信息,需要对原始数据和白化序列逐位异或。
3. 报文结构
3.1比特序与字节
当数据的各个字节传输时,总是从最低位开始。因此如果发送0x010203会按照3、0、2、0、1、0的字节顺序发送,对应的比特顺序为:
1100 0000 0100 0000 1000 0000
3.2 前导
报文最开始的8bits前导是01010101或者10101010序列。接收机用它来了解输入信号的强度范围,从而配置自动增益控制,使得信号刚好处于接收机能够轻松工作的范围之中。同时,接收机还利用前导来确定信号的频率。
3.3 接入地址
接入地址的第一个bit如果是0,则前导使用的是01010101序列;如果接入地址的第一个bit是1,则前导使用的是10101010序列。这保证了任意报文的前9个比特都是交替的。
接入地址有两种类型:广播接入地址、数据接入地址。
广播接入地址在广播数据,或是广播、扫描、发起连接时使用。数据接入地址在连接建立之后的两个设备间使用。
前导序列只有8bits,背景噪声也可能产生类似前导序列的比特流,因此需要检查前导和接入地址,来减少收到伪报文。这个过程称为与接入地址求相关。
对于广播信道,接入地址是固定值:0x8E89BED6,发送顺序为6,D,E,B,9,8,E,8,对应的发送比特流为0110 1011 0111 1101 1001 0001 0111 0001。这意味着前导一定是01010101
对于数据信道,接入地址是一个随机值,不同的连接拥有不同的值。这一随机值也要符合一些规定,主要是为了保证接入地址具有足够好的白化特性。
3.4 报头
报头的内容取决于报文是广播报文还是数据报文。
对于广播报文:
报头包含了广播报文的类型和一些标记位,标记位指出了报文使用的是公共地址还是随机地址。广播报文类型共有7种,每种类型都具有不同的净荷格式以及行为:
ADV_IND:通用广播指示
ADV_DIRECT_IND:定向连接指示
ADV_NONCONN_IND:不可连接指示
ADV_SCAN_IND:可扫描指示
SCAN_REQ:主动扫描请求
SCAN_RSP:主动扫描响应
CONNECT_REQ:连接请求
对于数据报文:
包含如下标记位:报文可靠传输使能、低功耗管理、净荷路由(发送给控制器或者是主机)。
3.5 长度
对于广播报文,长度域包含6个比特,有效值范围6~37。对于数据报文,长度域包含5个比特,有效值范围0~31。长度域指出的字节数指的是报文中数据的长度。
广播报文除了最多31个字节的数据之外,还要包含6个字节的广播设备地址,所以有效值为6~37,需要6个比特位。
如果数据报文被加密,需要包含4个字节的消息完整性检查域,实际的净荷数据将被减少到最多27个字节。为了简化链路层,未加密的报文净荷也不允许超过27个字节。
3.6净荷
净荷是所传输的真实有用的数据,可以是关于设备的广播数据,或者发给一定区域内所有设备的服务数据;可以是主动扫描响应的附加数据,如设备名称、实现服务;可以是建立或保持连接所需要的信息;可以是从一个设备到另一个设备的应用层数据。
3.7 CRC
最后三个字节的CRC负责对报头、长度域和净荷域进行校验计算。
4 信道##
BLE有40个信道,由于调制指数放宽,BLE信道宽度为2MHz,而不是经典蓝牙的1MHz。这些信道本分为两种:广播信道和数据信道,对应着传输广播报文和数据报文。
广播信道频点的选择原则上为了远离Wi-Fi接入点的严重干扰。
广播信道编号37~39,对应频点2402,2426,2480
数据信道编号0~36
4.1 跳频
跳频算法用于数据连接中,数据信道一共37个,是一个质数,因此跳频算法: