ble协议栈从零开始二(physical layer 详细探讨)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/XG_2013/article/details/80715370

1.引言

本章节主要探讨蓝牙的物理层,物理层的协议栈的分析,以及实际芯片设计时候的原理。物理层作为协议栈的最底层,它的作业至关重要。

2.spec章节参考

上图表红圈是core_4.2关于物理层的介绍的地方,我们现在只看le的部分,不去看BR\EDR,AMP。le是低功耗的蓝牙,BR\EDR是传统的蓝牙,AMP是采用wifi的MAC和moderm的蓝牙。具体介绍可以参考上一篇博客的介绍。


3.physical layer

3.1.physical layer 概况

physical layer分为physical channelphysical link

3.1.1.physical channel ,在le蓝牙设备,2个设备如果想通信,就必须在同一时间切到相同的物理通道,当然一个设备作为发送端一个设备作为接收端,比如一个设备在发送adv,另一个设备在scan。


如上图物理通道分为40个通道,当K=0的时候 fmin  = 2402 当k = 39的时候 fmax = 2480。

问题1:物理层如何区分白噪声和蓝牙的报文呢?

问题2:物理层如何区分广播报文和数据报文呢?

问题3:物理层如何区分数据报文是不是自己的正在连接的数据报文呢?

要解释上面的问题,需要了解空中报文的格式:


先解释一下,数据报文指的是2个设备建立连接过后,采用 调频序列的方式进行通信,广播报文就是一个设备在发送广播。大家可以理解成一个是tcp一个是udp。大家看上图蓝牙空中报文的格式,preamble是一个序列,广播报文是10101010,数据报文是10101010或者是01010101(如果access的最低位是1,preamble就是01010101,反之就是10101010)。access address是接入地址,PDU是数据正文。现在我们可以回答上面的问题了。

问题1:物理层如何区分白噪声和蓝牙的报文呢?

通过preamble,白噪声出现这么有规律的序列的概率很低。即使碰到相同的白噪声,还可以通过access code 来把关。

问题2:物理层如何区分广播报文和数据报文呢?

其实这个不用通过报文的内容进行区分,如果报文出现在广播的物理通道就是广播报文,出现在数据通道就是数据报文


广播的物理的RF_channel 是0 12 39(这3个通道避开的wifi的物理频率的干扰),对应的adv的索引是37,38,39。一般我们都是说adv的通道是37,38,39,其实对应的物理频率是均匀的展开在整个le的频谱上。剩下的37个通道就是数据通道了。

问题3:物理层如何区分数据报文是不是自己的正在连接的数据报文呢?

鉴于蓝牙的物理通道的有限,如果在同一空间有多对设备在进行通信,是有可能在同一时刻同一通道出现碰撞的。(虽然数据通道是采用调频序列的)。这时候access address就起作用了,广播的报文access address是固定值0x8E89BED6 ,数据报文是个随机值(当然这个随机值是有限制的),同一对连接的设备这个值在连接的时候就约定成一样的了,所以可以通过这个值区分,当前的数据报文是不是自己要通信的数据报文。

3.1.2.physical channel 分为 piconet channel 和 Advertisement broadcast channel

Advertisement broadcast channel :

一句话就是发送广播报文得的通道。

piconet channel:

一句话就是建立连接后的,双方设备通信所有的通道。建立连接的过程在后续的文章细致分析。简单的描述一下,建立连接过后的跳频的策略。假如2个设备是A和B,A和B都有一个相同的channel map(是可以用于通信的数据通道默认是37个),在发起连接的时候选择其中一个通道作为第一个起始点,然后使用相同的伪随机的序列进行跳频。抓包工具如果不知道第一个通道的起始点,就没办法进行抓包,因为抓包工具一般都不支持全频道扫描。具体的跳频的,会在后面的文章细致分析。


3.2.1.physical link
其实这个physical link就是个虚拟的概论,在协议栈并没用什么实际的含义。按照SPEC的说法,physical link
分为 Active physical link  和  Advertising physical link 。Active physical link 就是连接点对点连接过后,在通信交互的时候呈现。Advertising physical link 就是 advertising 在 broadcast event的时候。因为physical link在整个协议栈不参与解析包文和组合包文,大家就不用纠结他了。


4.对应实际的芯片的接口

MAC + modem + RF

RF是模拟的部分,这个部分直接决定一个蓝牙芯片的功耗还有信号的质量。一般蓝牙发送报文的时候功耗在4ma到15ma,这个做的好,真的很厉害。一般评价一款芯片的RF的性能,从TX RX的功耗,灵敏度,RSSI等方面评估。

modem 是数字的部分,负责解析RF的数据,一般都是算法把数据进行漂白(这个设计到把基带数据搬移)。同时还进行一些过滤,比如对白噪声的过滤,对其他设备的数据过滤等,并且把数据同步给MAC。

MAC是数字的部分它是媒体访问控制层。MAC其实就是我们软件协议栈和物理层之间的中间层。它可以理解成蓝牙的灵魂,比如我们发送3个通道的ADV,start adv enable 从host - hci - link一层层传到 mac。如何发出下图的时序呢


这个37与38通道之前时间小与10ms,这个就是MAC做的。还是白名单,resolving address。等等








猜你喜欢

转载自blog.csdn.net/XG_2013/article/details/80715370