有线通信,是用电缆直接连接,然后分距离的长短,有些会需要加载波,信号也可能会经过不同的调制方式调制。无线通信也是一样,只是信号的传输是通过射频了,通过在某一频段,对无线信道进行调制,将数据发送出去。
BLE物理信道
在Physical Layer部分提到过BLE的物理信道,一共40个,在2.4GHz的ISM频段。其实BLE的这40个物理信道是分成了两组的,一组是Advertising信道(3个),一组是Data信道(37个),具体情况如下:
在连接成功建立之前,设备之间是通过Advertising信道交互数据的,而在连接成功建立之后,就使用Data信道进行数据交互了。
两个无线设备之间要进行通信,除了要遵循同一协议外,两者必须要调到同一信道,才会有正常的数据可以交换,不然一个在2404MHz,另一个在2430MHz,两者根本就不能接收到对方的数据的(就是常说的不在同一个频道……)。
因此在连接建立之前,只用三个Advertising信道是有道理的,那样使得对方来扫描时,撞到同一频道的可能性就大大增加了,不然扫描扫半天,都没在同一频道过,那还怎么通信。BLE还使用了跳频,这是出于无线干扰以及安全性的考虑了。
关于Access Address
这里需要说明下Access Address,因为在考虑了无线通信时,需要两个设备调到同一个频道,才能进行通信,但是有时候可能有很多个设备在使用,那么多个设备调到同一个频道的可能性也还是蛮大的,为了避免这种多个设备某时刻工作在同一频率会造成的干扰,于是就设计了Access Address,该Address是一个无线发射器需要加在包中的,例如一个设备在发Advertising,它的Access Address是0x8E89BED8,那么有Scanner听到这个包后,也会用这个0x8E89BED8的Access Address与Advertiser通信,而Scanner要是听到的是别的Advertiser的包,就会使用另外一个Access Address去发Scan Request包。关于Access Address做如下三点说明:
1. Access Address放在封包中,用于识别该physical channel下向哪一个设备发packet,这样某时刻工作在同一physical channel的设备就不至于packet混乱;
2. 从封包的Link Layer info可以看到每个封包的确都有一个Access Address,Adv_pkt有一个固定Access Address,而intiator发con_req时会包含一个con_Access_Addr,连接之后的data pkt都是用的这个新的Access Addr了;
3. 每次重新断开建立连接,Access Address会不一样。
其实关于Access Address是还有一些要求的,如不能有连续的6个1 bit位或6个连续的0 bit位,因此这样算下来,满足作为Access Address的4byte的组合中有231个是可用的。
--------------------- 本文来自 suxiang198 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/suxiang198/article/details/47786103?utm_source=copy