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

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

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

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

下图是中断脚的映射关系,一般来说,DIO0就可以搞定了。

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功能。

433MHZ SPI模块使用心得的更多相关文章

  1. python模块学习心得

    初始模块 1.什么是模块 模块是用来实现某项功能的一大堆代码,为什么会有模块呢?过程式编程的时候为了减少程序员编程代码的重复性,就利用函数的调用减少了代码的重复性,但是某些时候程序会过于的庞大,我们会 ...

  2. Django form模块使用心得

    最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在f ...

  3. C#使用CH341 SPI模块读写SD卡

    SD卡相关CMD命令 ;//卡复位 ; ;//命令9 ,读CSD数据 ;//命令10,读CID数据 ;//命令12,停止数据传输 ;//命令16,设置SectorSize 应返回0x00 ;//命令1 ...

  4. Python pymysql模块学习心得

    PyMySQL包含了一个纯Python的MySQL客户端的库,它的目的是用来替换MySQLdb,并且工作在CPython,PyPy和IronPython. PyMySQL官方地址:https://py ...

  5. 如何让FPGA中的SPI与其他模块互动起来

    在上一篇文章<FPGA的SPI从机模块实现>中,已经实现了SPI的从机模块,如何通过SPI总线与FPGA内部其他模块进行通信,是本文的主要讨论内容. 一. 新建FPGA内部DAC控制模块 ...

  6. FPGA的SPI从机模块实现

    一. SPI总线协议         SPI(Serial Peripheral Interface)接口,中文为串行外设接口.它只需要3根线或4根线即可完成通信工作(这里讨论4根线的情况).     ...

  7. SPI介绍

    此文摘自百度百科:http://baike.baidu.com/view/245026.htm SPI概述SPI:高速同步串行口.3-4线接口,收发独立.可同步进行. SPI, 是英语Serial P ...

  8. 说说SPI协议

    SPI,是英语Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管 ...

  9. iic uart spi

    第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口);     I2C(INTER IC BUS)     UART(Universal Asynch ...

随机推荐

  1. springboot项目出现Whitelabel Error Page的问题

    springboot项目出现Whitelabel Error Page的问题 大概就是这种情况,然而昨天还是没问题的,通过对比就发现,是自己手欠了 简单来说解决办法就是将springboot的启动项目 ...

  2. Python - typing 模块 —— 类型别名

    前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...

  3. STM32—SPI读写FLASH

    目录 FLASH简介 W25Q64 W25Q64简介 FLASH控制指令 FLASH内部存储结构 代码讲解 读取芯片ID 发送写使能信号 等待FLASH不忙 擦除扇区 写入数据 读取数据 注 FLAS ...

  4. Ceph 管理和使用

    ceph 管理 上次介绍了Ceph集群架构并且搭建了ceph集群,本节介绍ceph用户认证流程和挂载.cephFS.ceph RBD以及ceph mds高可用 1. ceph 授权流程和用户权限管理 ...

  5. NOIP 模拟 $30\; \rm 毛三琛$

    题解 \(by\;zj\varphi\) 二分答案,考虑二分背包中的最大值是多少. 枚举 \(p\) 的值,在当前最优答案不优时,直接跳掉. 随机化一下 \(p\),这样复杂度会有保证. Code # ...

  6. NOIP 模拟 $30\; \rm 毛二琛$

    题解 \(by\;zj\varphi\) 原题问的就是对于一个序列,其中有的数之间有大小关系限制,问有多少种方案. 设 \(dp_{i,j}\) 表示在前 \(i\) 个数中,第 \(i\) 个的排名 ...

  7. java操作excel 工具类

    java操作excel 可参考https://blog.csdn.net/xunwei0303/article/details/53213130 直接上代码: 一.java生成excel文件: pac ...

  8. 徒手撸一个简单的RPC框架

    来源:https://juejin.im/post/5c4481a4f265da613438aec3 之前在牛逼哄哄的 RPC 框架,底层到底什么原理得知了RPC(远程过程调用)简单来说就是调用远程的 ...

  9. MySQL-存储引擎-1

    一.MySQL存储引擎 mysql> create table country( -> country_id smallint unsigned not null auto_increme ...

  10. JDK1.8源码(五)——java.util.Vector类

    JDK1.8源码(五)--java.lang. https://www.cnblogs.com/IT-CPC/p/10897559.html