BLE连接过程
⼴播(advertising)
香肠炒什么好吃设备A要跟设备B建⽴连接之前,设备B需要先进⾏⼴播,即设备B不断发送⼴播信号,t为⼴播间隔。没发送⼀次⼴播包,称为⼀次⼴播事件,因此t也称为⼴播事件间隔。按照蓝⽛spec,实际上每⼀个⼴播事件包含三个⼴播包,即分别在37/38/39三个射频通道上同时⼴播相同的
信息。
设备B不断⼴播信号,同时设备A也要开启扫描窗⼝,当设备A的接⼝窗⼝跟⼴播发送窗⼝匹配成功,⽽且⼴播频道与扫描频道是同⼀个频道时,才能接收到设备B的⼴播信号
建⽴连接(connection establishment)
advertir发送完⼀个⼴播包之后150us(T_IFS),advertir必须开启⼀段时间的射频Rx窗⼝,以接收来⾃obrver的数据包。Obrver 就可以在这段时间⾥给advertir发送连接请求。如下图所⽰,⼿机在第三个⼴播事件的时候扫到了设备B,并发出了连接请求
CONN_REQ(CONN_REQ⼜称为CONNECT_IND)。
详细连接过程:
⼿机在收到A1⼴播包ADV_IND后,以此为初始锚点(这个锚点不是连接的锚点),T_IFS时间后给Advertir发送⼀个connection request 命令,即A2数据包,告诉advertir我将要过来连你,请做好准备。Advertir根据connect_req命令信息做好接收准备,connect_req包含如下关键信息:
Transmit window offt,定义如图5所⽰
Transmit window size,定义如图5所⽰
connect_req数据包完整定义如下所⽰
皓月星空
connect_req其实是在告诉advertir,⼿机将在Transmit Window期间发送第⼀个同步包(P1)给你,请在这段时间⾥把你的射频接收窗⼝打开。设备B收到P1后,T_IFS时间后将给⼿机回复数据包P2(ACK包)。⼀旦⼿机收到数据包P2,连接即可认为建⽴成功。当然,实际情况会⽐较复杂,⼿机有可能收不到P2,这个时候⼿机将持续发送同步包直到超时时间(supervision timeout)到,在此期间只要设备B回过⼀次ACK包,连接即算成功。所以⼀旦P1包发出,主机(⼿机)即认为连接成功,⽽不管有没有收到设备的ACK包。
后续⼿机将以P1为锚点(原点),Connection Interval为周期,周期性地给设备B发送数据包(Packet),Packet除了充当数据传送功能,它还有如下两个⾮常重要的功能:
1. 同步⼿机和设备的时钟,也就是说,设备每收到⼿机发来的⼀个包,都会把⾃⼰的时序原点重新设置,以跟⼿机同步。
2. 告诉设备你现在可以传数据给我了。连接成功后,BLE通信将变成主从模式,因此把连接发起者(⼿机)称为Master或者Central,把
被连接者(之前的Advertir)称为Slave或者Peripheral。BLE通信之所以为主从模式,是因为Slave不能“随性”给Master发信息,它只有等到Master给它发了⼀个packet后,然后才能在规定的时间把⾃⼰的数据回传给Master。
连接失败:
有⼏种经典情况:
1.如果slave在transmit window期间没有收到master发过来的P1,那么连接将会失败
2.如果master在transmit window期间把P1发出来了,也就是说master按照connect_req约定的时序把P1发出来了,但slave没有把P2回过去或者没有在超时时间内把P2回过去,那么连接也会失败。
3.如果master把P1发出来了,slave也把P2回过去了,此时主机或者从机还是报连接失败,这种情况有可能是软件有问题。
4.空中射频⼲扰太⼤。此时应该找⼀个⼲净的环境,⽐如屏蔽室,排除⼲扰后再去测试连接是否正常。
Connection events:
连接成功后,master和slave在每⼀个connection interval开始的时候,都必须交互⼀次,即master给slave发⼀个包,slave再给master发⼀个包,整个交互过程称为⼀个connection event或者gap event。蓝⽛芯⽚只有在connection event期间才把射频模块打开,此时功耗⽐较⾼,其余时间蓝⽛芯
药膳火锅⽚都是处于idle状态的,因此蓝⽛芯⽚平均功耗就⾮常低。Master不可能时时刻刻都有数据发给slave,所以master⼤部分时候都是发的空包(empty packet)给slave。同样slave也不是时时刻刻都有数据给master,因此slave回复给master的包⼤部分时候也是空包。另外在⼀个connection event期间,master也可以发多个包给slave,以提⾼吞吐率。
玛格利特Slave latency:
如上图所⽰出现slave latency(slave latency = 1),在每⼀个connection interval开始的时候,Master和Slave必须交互⼀次,哪怕两者之间交互的是empty packet(空包),但如果slave定义了slave latency,⽐如slave latency = 9,此时slave可以每9个connection interval才回复
无机非金属材料工程
⼀次master,也就是说slave可以在前⾯8个connection interval期间⼀直睡眠,直到第9个connection interval到来之后,才回复⼀个packet给master,这样将⼤⼤节省slave的功耗,提⾼电池续航时间。当然如果slave有数据需要上报给master,它也可以不等到第9个connection interval才上报,直接像正常情况进⾏传输即可,这样既节省了功耗,⼜提⾼了数据传输的实时性。
核桃分心木的作用GAP层⾓⾊总结:
在BLE通信过程中,随着时间的推移,他们的状态在发⽣变化,两者的关系也在发⽣变化,为此蓝⽛spec根据不同的时间段或者状态给⼿机和设备B取不同的名字,即GAP层定义了如下⾓⾊:
advertir。发出⼴播的设备
obrver或者scanner。可以扫描⼴播的设备
initiator。能发起连接的设备
master或者central。连接成功后的主设备,即主动发起packet的设备
PCKslave或者peripheral。连接成功后的从设备,即被动回传packet的设备
什么是职业生涯
如上图所⽰通过时间把obrver,initiator和central串起来了,其实这三个⾓⾊是相互独⽴的,也就是说⼀个设备可以只⽀持obrver⾓⾊,⽽不⽀持initiator和central⾓⾊。同样也把advertir和peripheral串起来了,其实advertir和peripheral也是相互独⽴的,即⼀个设备可以只作为advertir⾓⾊,⽽不⽀持peripheral⾓⾊。