在低功耗网络中,无线收发器的开启和关闭必修尽可能做到节能。在Contiki操作系统中,这些工作由RDC层完成的,他提供了一些协议来完成这个工作,默认为ContikiMAC.
MAC(媒体访问控制)层位于RDC层的顶部。 MAC层负责避免在无线电介质上发生冲突并在发生冲突时重新发送数据包。 Contiki提供两个MAC层:一个CSMA(载波侦听多路访问)机制和一个NullMAC机制,它不执行任何MAC级处理。
关于MAC驱动
Contiki提供两个MAC驱动程序,CSMA和NullMAC。 默认机制是CSMA。 MAC层接收来自RDC层的传入数据包并使用RDC层传输数据包。 如果RDC层或无线电层检测到无线电冲突,则MAC层延后一个随机时间重新发送该分组。 检测到冲突时,只有MAC层的CMSA具有重传功能。
关于RDC驱动
Contiki有几个RDC驱动程序。最常用的是ContikiMAC,X-MAC,CX-MAC,LPP和NullRDC。 ContikiMAC是默认的机制,可以提供非常好的电源效率,但是它是为802.15.4无线电和CC2420无线电收发器量身定制的。 X-MAC是一种比较老的机制,不能提供与ContikiMAC相同的功率效率,但对时序要求较低。 CX-MAC(Compatibility X-MAC)是一种X-MAC的实现,比默认的X-MAC具有更宽松的时序,因此可广泛用于各种的无线电设备。 LPP(Low-Power Probing)是一种接收器发起的RDC协议。 NullRDC是一个“空”RDC层,它永远不会关闭无线电,因此可用于测试或与其他RDC驱动程序进行比较。
RDC驱动尽可能地让节点休眠,并以一定速率侦听信道。但检测到需要接收时,唤醒节点接收数据包。信道监听速率以Hz为单位,指定每秒监听次数,默认信道监听速率为8 Hz。信道监听速率以2的幂次给出,典型设置为2,4,8和16 Hz。
传输的数据包通常必须重复或“选通”,直到接收机打开才能检测到它。这增加了发送节点的功率,同时也使得无线电的传输量增加,这将干扰和其他节点的通信。一些RDC允许“相位优化”延迟选通tx分组,直到接收器预期唤醒之前。这需要两个节点之间的良好时间同步;如果时钟相差1%,则rx唤醒时间将每隔100个周期发生一次漂移(例如, 8赫兹12秒)。当数据包之间存在多于几秒的时间时,这将使相位优化失去作用,因此发射机必须在预测的接收机唤醒之前开始发送。时钟漂移校正可能会解决这个问题。
在contiki中的RDC驱动定义为:
contikimac_driver
cxmac_driver
nullrdc_driver
step1:在文件夹Makefile中新建project-conf.h文件
Contiki每个项目有一个可选的配置文件,名为'project-conf.h'。但是,该文件在默认情况下未启用。为了启用它,我们需要将以下行添加到项目的Makefile中:
CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"
添加后完整的Makefile文件为:
CONTIKI = /home/user/contiki
CFLAGS += -DPROJECT_CONF_H=\"project-conf.h\"
include $(CONTIKI)/Makefile.include
step2:创建project-conf.h文件
step3a:指定一个新的RDC通道检查率
#define NETSTACK_CONF_RDC_CHANNEL_CHECK_RATE 16
step3b:指定一个新的RDC驱动
#define NETSTACK_CONF_RDC nullrdc_driver
step3c:指定一个新的MAC驱动
#define NETSTACK_CONF_MAC nullmac_driver
make TARGET=sky clean
首次进行启用该文件时需要清除依赖项,之后的只需要正常编译。
make TARGET=sky