433MHZ SPI模块使用心得

互联网与你我的世界 2018-02-15

最近使用了433MHZ的模块进行了一个通讯项目,选用的是SX1208模块,对接了RTOS和Linux两个操作系统,使用心得如下:

1. 首先要拿来datasheet看一遍,通揽一下它的功能。可以得到一些信息,比如

  • 它支持硬件AES加密,甚至可以作为硬件AES引擎使用,注意限制64Byte长度,够用了。
  • 它支持温度的测量,在高低温箱里面我测试了一天,发现它线性度很好。一般来说数据相差1就是相差一度。初始化要校准。
  • 因为它是SPI通讯,所以用GPIO模拟就可以了,反正速率不高。跨芯片平台起来很方便。
  • 他有RSSI测量的功能,在中断里面读取就可以了,这功能辅助距离测量,打点log是可以的

2.因为它这个datasheet东西很多,物理层的很多参数也可以调整。所以拿现成的代码拿来修改比较快,可以大大加快开发进度。在网上找到了类似的代码,把它看懂一遍然后重写。发现它里面有一个逻辑有问题,死循环读取TX中断脚的电平来判断数据有没有发送完,我在RTOS上面还是可以正常跑的,但是linux下面就挂死了,因为中断里面不能卡太久的(while死循环), 会把linux内核搞疯掉的。所以还是要进行中断和TX线程做分离的。对于RST脚是一定要用到的, 不然会不稳定。底层的缓存队列也要搞好。

下图是中断脚的映射关系,一般来说,DIO0就可以搞定了。433MHZ SPI模块使用心得

3.当底层TRX代码弄好,性能测试完毕之后,就开始自己写一个MAC协议了。当然这个MAC协议参考下WiFi的帧格式,把WiFi协议精简做一下就好了。自己实现完这个MAC的时候做一下压力测试,TRX同时打,跑了几天还算稳定的,跑的时候要用不同的datarate跑,收集下原始数据,这个阶段是比较重要的,因为协议设计的不好会把速率拖慢的。。要注意的MAC层是一定要做random backoff,不然根据实测结果是会陷入死区,数据永远发送不成功。实测四五个SX1208在环境里面跑数据完全是没问题的。当然不要给它太大的数据吞吐量,本来就不是为了性能而准备的。额外提一下,AES加密和物理头过滤一定要做,不然别人收到你的数据就不好了。做一下也不难的,因为是硬件实现,所以没有负担。和WiFi配网类似,这里也要做一个私有的配网。加入按钮和LED之后也可以很简单地做起来,实测OK。

4.当MAC层实现好之后就可以做应用层了。这个就是各自发挥的步骤了,不再赘述。对于linux下面需要做成驱动,对于buildroot来说可以放在一个软件包里面搞成ko的形式,比较方便,这样就不要去编译内核了。对于应用来说,这个模块占用了RST,中断和SPI 四个脚之后脚可能不够用,拿一个芯片做一下GPIO扩展,老板说买74HC595,那就买个直插的74HC595(便宜),自己焊个电路,修改下外设代码,一天内也很快可以搞定了。加了这个芯片还可以多出几个脚,等以后产品形态变了再使用也不迟。

5.硬件上来说,拿到的模块没有屏蔽壳,验证,焊接,吹电路容易搞坏还是要小心一点,这个东西需要天线匹配。让硬件PCB弄好,最后拿矢网搞定一下。

6.展望:这东西有好几个信道可以用,后面考虑在Master端做下跳频,也就是auto channel selection功能。

相关推荐