CSMA协议在无线传感器网络中的实现
CSMA协议是网络中运用得较为广泛的竞争协议,因此无线传感器网络的MAC层大多使用CSMA机制来提供竞争信道的功能。随着IEEE802.15.4标准的制定,各射频芯片厂家也纷纷推出了性能更好、功能更强的射频芯片。TI公司(原Chipcon)推出CC2420来替代原来无线传感器网络使用较多的射频芯片CC1000。由于各射频芯片特性功能各不相同,为了使CSMA协议达到更好的性能,根据射频芯片的具体特性来重新优化设计CSMA机制也就变得很有必要。
本文使用TI公司的MSP4301611超低功耗MCU,以及CC2420射频芯片作为硬件实验平台,充分利用CC2420部分IEEE802.15.4协议MAC封装的特性,设计并实现了一个全新的、灵活的CSMA协议。
1 信道监测的设计
实现CSMA协议的较基本的条件就是物理层必须提供可靠、实用的信道监测手段,因此首先要了解射频芯片的一些特性。
1.1 CC2420的相关特性
CC2420是TI公司推出的2.4GHz射频芯片,其硬件封装支持部分IEEE802.15.4的MAC层协议规定。
CC2420的功能结构如图1所示,CC2420的数字接口具有自动CRC校验、自动加密的功能,并维护两个缓冲区(一个接收FIFO,一个发送FIFO)。数字接口通过SPI通信接口与微处理器相连。CC2420是以数据包为单位的射频芯片,即必须从微处理器收满一个数据包,才会发送该数据包。
数字接口收满一整包后,自动添加CRC校验,并送入调制模块进行数据调制和整形,较后发送出去。当监测到信道有数据时,将数据经过模/数转换后送入数字解调器中进行帧同步;如果同步就将数据填入接收缓冲区中,较后填充当前信道内的RSSI(ReceiveSignalStrengthIn2dicator,接收信号强度指示器)信息。
CC2420提供一个读取RSSI值的命令,开发者可以调用该命令来得到当前信道的信号强度值,并通过对该值的解析来判定当前信道是空闲还是繁忙。另外,CC2420在接收到数据包时,可以自动在数据包的倒数第二个字节里填充当前接收数据包时的RSSI值。这种特性对于信号强度阈值的更新维护十分有用。
1.2 信道监测的设计
CC2420提供了一项CSMA2CA的功能,称为CCA(ClearChannelAssessment,空闲信道评估),它使用一个寄存器来设置阈值。当CC2420收到CCA命令后,就开始采样RSSI值,只有采样到的RSSI值小于寄存器中的阈值时才允许发送数据。CCA虽然实现了信道监测的基本功能,但是也有其自身的缺点:不够灵活且开放程度不够,只能进行一次完整的通道监测,并不能设置采样次数。
这就限制了它在其他协议中的使用,例如在LPL(LowPowerListening,低功耗侦听)协议中,只需要进行一次采样作为侦听。另外,它的判定机制并不够完善,只有一个阈值,因而开发者难以找到合适的阈值。
本文参照CCA的阈值机制,设置上下阈值并利用CC2420读取RSSI采样值的命令,用软件来完成信道监测工作。本文使用的信道监测及判定的基本原理就是:先设置两个适当的信号强度阈值,一个是较小信号强度minSignal,其含义是信道中有数据发送时的较小信号强度值;另一个是噪声强度noiseStrength,其含义是信道空闲时的信号强度值。然后物理层在一段时间内不断地进行RSSI采样,并把采样结果按照某种规则(在实现中有具体说明)与阈值进行比较,从而得到信道的活动状态。而且为了更准确地反映信道状态,在不能判断信道活动状态时,还应有扩展采样机制。
另外,这两个信号强度阈值并不是一直不变的,它们必须根据信道一段时期的信号强度情况来动态更新,因此本文还实现了一种阈值更新机制,它能根据当前的信道信号强度和一些强度统计信息来动态地更新阈值。
从接口上看,物理层的信道监测只是提供给MAC层的CSMA协议一个探测信道的接口。为了设计一个灵活的信道探测接口给上层,就必须给上层一些调整的接口,例如可以让上层来设定具体某次监测的采样次数,这样上层就可以根据不同的实际情况来设定采样数。
图2为物理层信道监测提供的接口与MAC层CSMA的关系简图。
2 信道监测的实现
2.1 信道活动状态判断的基本规则
采样得到的RSSI值是一个有符号的振幅值,它只有一个字节。这样的值并不利于分析,所以统一将其值上升128,即对读出的RSSI值统一加上128,因此转换后的值都是为正的,后面提到的RSSI值指的都是转换后的值。
假设上层设定信道采样窗口数为N。为了完成连续的N次采样,需要使用一个采样定时器。CC2420的RSSI采样时间约为128μs,再加上硬件延迟以及软件处理延迟时间,采样定时器设置为1ms循环触发(这1ms的采样在CSMA中称为“采样窗口”)。每次定时器触发后,就向CC2420发送命令读取当前信道的RSSI值,然后采用如下规则进行信道活动状态判断:
①如果采样到的RSSI值大于等于阈值minSignal,那么就判定信道正被其他节点使用,即使采样未满N次也不再采样,并立即通知上层协议信道正被使用。反之如果该次采样监测岀的值小于或等于minSignal,那么本次采样不做任何判断,继续下次的采样。
②如果一直采样到较后,且较后一次的RSSI值小于noiseLevel(噪声强度),那么就判定信道为空闲,并给出修改阈值标志,通知上层可以发送数据。注意,只要判定为信道空闲,就要给出更新阈值标志,原因将在后面的阈值维护中说明。
如上所述,只要采样值大于等于minSignal,就判定信道是繁忙的,而判定信道空闲时却要求所有的采样都小于minSignal,且较后一次的采样值要小于noiseLevel。然而上面两个规则并不完善,并不能处理任何情况,以下两种情况就不能得出结论:较后一次采样岀错没有得到RSSI值,或者较后一次采样的RSSI值介于noiseLevel和min2Signal之间。此时就必须使用扩展规则。
2.2 信道活动状态判断的扩展规则
扩展规则是为了处理基本规则不能解决的问题。扩展规则其实就是扩展m次采样,在这m次的扩展采样中使用对应的扩展规则来判定信道状态。扩展规则涉及一些统计的方法,需要维护一个extCSVal的统计变量。扩展规则如下:
①扩展采样中,判定信道繁忙的规则与基本规则一样。只要检查到采样RSSI值大于等于minSignal,就判定为信道忙,然后结束扩展采样。
②信道空闲的判定与基本规则不同,因为已经处于扩展采样,所以只要检查到采样RSSI值小于noiseLevel,就可判定信道为空闲,同时给出更新阈值的标志。
③如果在扩展采样中并没有出现以上两种情况,那么就必须要计算extCSVal来做判断。先说明赋给extCS2Val的初值,如果较后一次基本采样的RSSI值介于两阈值之间,那么直接将这个RSSI值赋给extCSVal;如果较后一次基本采样读取RSSI失败,那么将第一次扩展采样得到的介于两阈值之间的RSSI值赋给extCSVal。如果extCSVal已经赋值,而扩展采样中又得到了介于两阈值之间的RSSI值,那么更新extCSVal值:extCSVal=(ex2tCSVal+RSSI)m1(即取平均值)。
④如果m次扩展采样,依靠前两个规则仍然不能判断信道状态,且较后一次扩展采样的结果仍然介于两者之间,那就使用统计值extCSVal来辅助判断。规则如下:如果extCSVal>=((minSignal+noiseLevel)m1),那么就判定信道忙;反之,则判定信道空闲。
⑤较后是较坏的一种情况:当扩展采样的较后一次采样发生错误,读取RSSI值失败时,并不知道信道的实际状况,但也不能一直扩展下去,所以判断为信道繁忙以避免出错。
通过基本规则和扩展规则已经可以得出一个准确性较高的信道活动状态判定,扩展规则弥补了基本规则可能会出现的错误。在实际的测试中,如果两个阈值的初值选择得很合适,那么一般并不会进入扩展采样。若阈值初值选择得不贴切,如mingSignal初值过大,则noiseLevel初值过小时都会导致进入扩展采样。
这里还需要说明的是m的取值。本文中采样定时器设置为1ms,即1ms采样一次。扩展采样次数m取值越大,准确性自然就越高,但是整个网络性能有所下降(花去的额外时间过多)。m的值也不能过小,不然extCSVal统计值就不能发挥其作用。由于本文使用的初始阈值是经过大量测试确定的精确值(参照信号强度阈值初值的选择),因此使用该初始阈值进行的测试结果显示:只有极少情况进入扩展采样(约5000次监测进入一次扩展采样)。鉴于这种实际情况,m的取值不需要很大,本文取其值为3。如果初始阈值不能精确设定,那么可将m值放大。
3 信号强度阈值的选择和更新维护
从信道监测的基本规则和扩展规则可以看出,信号强度的两个阈值对信道状态的判定十分重要,因此这两个阈值的初始值选择必须十分慎重;而且必须要根据当前信道状态动态更新阈值的机制。
3.1 信号强度阈值的更新机制
阈值的动态更新必须使用大量的实时RSSI值作为统计值,且需要把RSSI值分为两类:一类是信道繁忙时的RSSI,本文称为busyRSSI;另一类是信道空闲时的RS2SI值,本文称为noiseRSSI。这两个值可以在物理层每接收到一个数据包时获取,因为CC2420接收到一个数据包时将在数据包的倒数第二个字节(FCS域)自动填充接收时的RSSI值,因此busyRSSI值就无条件地得到了;而在刚接收完数据包后信道一般都是空闲的,所以这时立即读取当前的RSSI值,就可以得到noiseRSSI值。为避免例外,可将得到的noiseRSSI值与minSignal进行比较,如果大于等于minSignal就丢弃。
在获得busyRSSI和noiseRSSI后就对其进行统计操作,为实现这个目的需要维护一个统计变量avgSignal,用来统计所有的busyRSSI值。avgSignal的
相关阅读:
- ...· Efinix® 全力驱动AI边缘计算,成功推出Trion™ T20 FPGA样品, 同时将产品扩展到二十万逻辑单元的T200 FPGA
- ...· 英飞凌亮相进博会,引领智慧新生活
- ...· 三电产品开发及测试研讨会北汽新能源专场成功举行
- ...· Manz亚智科技跨入半导体领域 为面板级扇出型封装提供化学湿制程、涂布及激光应用等生产设备解决方案
- ...· 中电瑞华BITRODE动力电池测试系统顺利交付北汽新能源
- ...· 中电瑞华FTF系列电池测试系统中标北京新能源汽车股份有限公司
- ...· 中电瑞华大功率高压能源反馈式负载系统成功交付中电熊猫
- ...· 中电瑞华国际在电动汽车及关键部件测评研讨会上演绎先进测评技术