我对于WSN和IP堆栈开发缺乏足够的自主开发经验,往往都是依托于某些开源代码实现二次移植、验证和测试。
LoRaMAC/LoRaWAN
LoRa目前主流是LoRaWAN,其设备端(Class A)的代码在官网上都有,而网关一侧官网其实也给出了参考代码,再不济MultiTech也有比较现成的设计。还有基于树莓派的HAT(Hardware Attached on Top)扩展板可供使用。
ALOHA
竞争型的MAC主要是ALOHA,由于LoRa无法实现发射中检测,所以只实现CSMA/CA,而非CSMA/CD。应该说ALOHA是非常古老的协议,但是现成的ALOHA协议栈只有在mbed上有,而且存在错误。包括编译错误以及不完整的主程序。该代码由ELEN团队,并维护一个Air9(不使用DIO0中断驱动,而是不断读取寄存器的做法)的LoRa PHY堆栈。
- 该代码不再维护或对外支持,ELEN团队主页甚至设置了私有权限,无法公开访问。自己动手,丰衣足食
- 代码中使用的Ringbuffer驱动与mbed现有的驱动冲突。底层(如UART/SPI/USB/I2C)尽量采用mbed CircularBuffer模板,高层环形缓冲器(如帧缓冲)采用RingBuffer模板
- 使用AlohaTransceiver主循环,但是缺少main()函数。阅读该模块的方法,对比并参考其他代码的使用方式,毕竟我们关注的就是应用层,main()就算不提供,我们也可以摸索出来
其他
据说除了DASH7之外,还有一些新的MAC基于LoRa PHY。但是目前我的主要工作就是:
- 完成LoRaWAN的简单网关,将SX1278 HAT移植到SX1278 USB之上;
- 完成LoRa Aloha的完整测试。