802.15.4 WPAN协议-CSMA/CA工作原理和流程
一、CSMA/CA时隙版和非时隙版
依赖于网络配置,IEEE 802.15.4 LR-WPAN 存在两种信道访问机制。
- 非信标模式的 PAN 使用非时隙的 CSMA/CA 访问信道。
当设备每次想传输数据帧或者命令帧时,它会等待一个随机时间,然后再判断信道是否是空闲的。如果发现信道是空闲的,设备就可以传输它的数据。如果发现忙,信道会再次等待另一个随机时间,然后再尝试访问信道。发送确认帧时不使用 CSMA/CA 机制。 - 信标模式的 PAN 使用时隙 CSMA/CA 机制访问信道,且其退避时隙与信标是对齐的。
一个 PAN 网络内的所有设备的退避时隙与 PAN 协调器是对齐的。当设备每次想在竞争接入阶段传递数据帧时,它将定位在下一个退避时隙时刻,然后等待随机个退避时隙再进行信道忙闲检测。如果信道依然忙,设备将再次等待随机个退避时隙,然后再次尝试访问信道。如果信道是空闲的,设备就在下一个退避时隙内传输数据。确认帧和信标帧不适用 CSMA/CA 机制。
其中:
- 采用时序版 CSMA/CA 算法:使用周期性的信标帧;
- 采用非时隙版的 CSMA/CA算法:没有使用周期性的信标帧,或者即使使用了周期性的信标但不能被定位。
二、退避机制
这两种算法都使用一个叫做退避时间的时间单位实现。一个退避时间等于aUnitBackoffPeriod。
在时隙版 CSMA/CA 中,退避时间的边界应该与 PAN 协调器的超帧时隙边界对齐,即退避时间的开始时间与信标帧的开始时间对齐。在时隙版 CSMA/CA 中,MAC 子层必须确保物理层在退避时间的起始边界开始传输数据。
在非时隙版 CSMA/CA 中,设备的退避时间与该 PAN 网络中的其它设备的退避时间不相关。
设备在进行传输时会维护三个变
量:NB(NumberofBackoff),CW(Content Window)和BE(BAckoff Exponent)。
其中:
- NB:表示的是当前退避的次数,首次调用 CSMA/CA 机制发送报文时,该值会初始化为0,随着信道接入的失败,该值会递增1后重试接入信道发送报文。在超过系统预定义的门限 macMaxCSMABackoffs 时,CSMA/CA 机制宣告报文发送失败并丢弃此报文。
- CW :定义的是竞争窗口大小,表示 CSMA/CA 机制要求接入信道发送报文前需要信道连续空闲的检测次数。CW 初始化为 2,当信道忙闲检测为忙时,CW 将被重新初始化为2,当信道忙闲检测为闲时,该值自减 1,直至为 0时,开始报文发送。CW 只用于时隙版 CSMA/CA 算法。
- BE :定义的是退避指数,表征着节点竞争信道时随机退避范围的上限值。在非时隙系统、或者 BLE 字段被置为0的时隙系统中,该值被初始化为 2 和 macMinBE 中的最小值。如果 macMinBE 被设为 0,CSMA/CA 算法在进行第一次迭代时就不使用冲突避免。
三、CSMA/CA算法流程
下图描述了 CSMA/CA 算法的流程
CSMA/CA 算法的流程如上图所示,具体流程描述如下。
3.1 时隙CSMA/CA流程
【步骤1】:
当使用时隙 CSMA/CA 时,MAC 子层先初始化退避次数NB,竞争窗口大小CW和退避指数BE,然后确定下一个退避时间的边界,然后直接进入步骤2。
【步骤2】:
MAC 子层将在[0,2^{BE}-1]范围内产生一个随机数,并退避该随机数个退避时隙。
【步骤3】:
等到退避时隙的边界开始时,请求物理层进行信道忙闲检测,如果信道空闲进去步骤5,信道忙则进入步骤4。
【步骤4】:
如果检测到信道忙,则 NB 和 BE 都自增 1(确保 BE 不会超过 macMaxBE).在时隙CSMA/CA 系统, MAC 子层还将 CW 重置为 2。如果 NB 小于等于 macMaxCSMABackoffs,CSMA/CA 算法将返回到步骤2。如果 NB 大于 macMaxCSMABackoffs,CSMA/CA 算法将终止,并返回信道访问失败的状态。
【步骤5】:
如果检测到信道空闲,MAC 子层先检查竞争窗口,再决定是否开始传输。 MAC 子层先将 CW 自减 1,然后在判断其值是否为 0。如果不为0,CSMA/CA 算法将回到步骤3。如果为 0, MAC 子层将在下一个退避周期的边界开始传输帧。
3.2 非时隙CSMA/CA流程:
【步骤1】:
当使用非时隙 CSMA/CA 时,MAC 子层先初始化 NB和 BE,然后直接进入步骤2。
【步骤2】:
MAC 子层将在[0,2^{BE}-1]范围内产生一个随机数,并退避该随机数个退避时隙。
【步骤3】:
等到退避时隙的边界开始时,请求物理层进行信道忙闲检测,如果信道空闲进去步骤5,信道忙则进入步骤4。
【步骤4】:
如果检测到信道忙,则 NB 和 BE 都自增 1(确保 BE 不会超过 macMaxBE)。如果 NB 小于等于 macMaxCSMABackoffs,CSMA/CA 算法将返回到步骤2。如果 NB 大于 macMaxCSMABackoffs,CSMA/CA 算法将终止,并返回信道访问失败的状态。
【步骤5】:
如果检测到信道空闲,在非时隙 CSMA/CA系统中, MAC 子层会立即传输帧。
四、状态机
非时隙版CSMA/CA状态机:
首先,当一个节点处于IDLE状态时,如果它有数据包需要发送,会进入BACKOFF状态。
在此阶段,节点会根据CSMA/CA算法决定等待的时间长度,然后尝试发送非广播包。
发送成功后,节点会设置等待ACK的最大时间定时器,进入WAITACK状态。
这个状态用于监听确认信号,如果在设定的时间内接收到正确的ACK,表示包已成功接收,此时节点会回到IDLE状态,完成当前传输过程。
如果在WAITACK状态等待超时,但重传次数未达到标准规定的最大值,节点会重新发送原包并回到BACKOFF状态。
然而,如果重传次数超出限制,意味着可能由于信道干扰等原因导致发送失败,此时节点会终止当前包的发送,返回到IDLE状态,准备下一次通信。