在contiki中,mac层源码位于core\net\mac目录下。
在低功耗网络中,无线收发设备必须时常休眠以节省电量。在Contiki中,负责这个工作的是RDC(Radio Duty Cycling)层。Contiki提供了一系列RDC机制。默认的就是ContikiMAC。
MAC(Medium Access Control)层处于RDC的上层。MAC层负责避免数据在传输过程中的冲突以及重传数据包。Contiki提供了两种MAC层,一种是CSMA(Carrier Sense Multiple Access 载波侦听多路访问)机制以及NullMAC机制(只负责对数据的转接而不对数据进行任何的操作)。
1、关于MAC驱动
Contiki提供了两种MAC驱动,CSMA(载波监听多路访问)NullMAC。默认为CSMA。MAC层接收来自RDC层的数据并通过RDC层来转发数据包。假如RDC层或者是radio层检测到数据碰撞,MAC层就要重发这个数据包。如有数据碰撞只有CSMA支持重发。
2、关于RDC驱动
Contiki有多种RDC驱动。最常用的就是ContikiMAC,X-MAC,CX-MAC,LPP以及NullRDC。默认的而是ContikiMAC,它具有很好的功率效率,但有些更偏向于802.15.4无线设备以及CC2420无线收发设备。X-MAC是一个较旧的机制,它不像ContikiMAC那样有高功率效率,但是有较严格的时序要求。CX-MAC(兼容的X-MAC)比X-MAC有更宽松的时序要求,因此能在更多的无线设备上工作。LPP(Low-Power Probing)是一个随接收器启动的RDC协议。NullRDC是一个空的RDC层,它从来不会关闭无线设备,因此可以用来测试或者与其它的RDC驱动比较使用。
RDC驱动尽量保持无线设备休眠并且定期检查无线传输介质。当进行检测时,无线设备接收数据包。信道检查频率以HZ为单位,指定每秒信道检查的次数,默认为8HZ。典型的信道检查频率为2、4、8、16HZ。
通常传输的数据包必须重复发送直到接收器打开检测。这就增加了耗电量以及无线通信流量(traffic)进而影响与其它节点的通信。一些RDC驱动允许阶段优化即推迟选通(strobe)发送的数据包直到接收器将要唤醒。这需要两个节点之间良好的时间同步,如果以1%的时钟差那么唤醒时间将贯穿整个发送阶段窗口每100个周期,比如在信道检查频率为8HZ的时候是12秒。当传送包的时间间隔为几秒的时候这将让阶段优化失去作用,因为发送者必须在接收器唤醒之前提前准备好发送的数据。时钟漂移校正(clock drift correction)可能解决这个问题。
这些Contiki RDC驱动被称作:
contikimac_driver
xmac_driver
cxmac_driver
lpp_driver
nullrdc_driver
原英文文章:
另:SICSLoWMAC专门作为6LowPAN的mac层而设计的。有关SICSLowMAC层参 见:
转自:
阅读(3011) | 评论(0) | 转发(0) |