以往经验
在短距无线电(SR-Radio/WPAN)或传感器网络(WSN)中我的主要工程经验是电子货架标签,基于CC2500/CC430F5137之上的SimpliciTI协议栈。回顾原先的工程经验,有不少问题存在。
理论与实际
虽然教科书上存在着大量的理论知识,我也对于竞争型、TDMA/FDMA/CDMA、单通道、多通道等相关的MAC设计有一定的了解。也知道一些著名的WSN堆栈,比如6LowPAN、OpenRF、RadioHead等。但是很难将开源堆栈与理论知识相结合。而TI/Chipcom为自己芯片的提供的堆栈SimpliciTI也很一般。
WSN/SR-Radio就是一个需要定制的领域,尤其体现在MAC层和DLL层面。所以,很难采用一种堆栈覆盖所有需求。
LP-SR-Radio MAC
最近有朋友在询问一个封闭区域内的WSN项目,商业原因,具体的无法披露。但是听下来和电子货架标签非常类似:
- 高密度,系统规模弹性大,单一Hub需要支持上千节点设备。
- 低功耗,要求电池供电,以月或年计算。
- 低占空比,对于系统延时要求不高,10秒内反应即可。
- 简单拓扑,星型即可,即节点围绕Hub即可,无需多跳转发。
- 覆盖面积小,覆盖半径30~50米以内。
TI SimpliciTI堆栈其他都还好,就是高密度无法满足,只能够同时支持8个节点。当然,不通讯的节电设备可以断开连接,但是这样可能就会产生一个无法反向寻呼的问题。所以,这个堆栈必须有所裁剪才能够使用。
在ARM mbed社区代码中有一个CC1101的参考实现,简单有效。在现有的CSMA/CD算法之上的Aloha数据帧、RTS/CTS控制帧可以构成完整的MAC层设计。参考RadioHead的设计,可以提供数据报和数据流服务。
初步决定使用:Aloha/CSMA-CD,以及S-MAC作为开发基础。DLL层再参考SimpliciTI的某些设计,而且命名规则需要重新修改。
硬件资源
考虑到2.4GHz太容易受到干扰,就不使用nRF24/CC2500了,购入了三个CC1101/SI4463模块作为测试,至于节点的MCU颇费思量,因为目前STM32的货源和价格都不理想,所以考虑采用LPC824(32KB ROM + 8KB RAM + 低功耗 Cortex-M0+)作为设备控制器,而Hub控制器采用需要较大的RAM和USB,STM32F401RE/405RG即可,当然STM32F103C8也凑合用。甚至在工程中直接使用对应的NUCLEO开发板。
设备入网认证
简单的设备可以不认证,但是如果涉及到网络安全,则需要一个完整的加密、认证、授权流程设计。这里,加密采用AES,认证在AES通道中可以实现,授权配合网关和云端应用可以实现,比较麻烦的是设备和网关之间采用何种方法实现AES密钥生成。ECDHE依然需要配合ECDSA实现,或许会参考Mifare这种私有
Hub/网关
之前因陋就简,直接使用CC430F5137的调试器中的USB CDC连接到Windows主机,和现有的设计思路无法相比。现在可以参考panStamp工程实现一个可以完整后台运行的Hub和网关。
应用相关
Hub网关将网络和设备抽象成REST API,提供给后台应用。