最近使用了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. 深入理解SPI机制

    一.什么是SPI SPI ,全称为 Service Provider Interface,是一种服务发现机制.它通过在ClassPath路径下的META-INF/services文件夹查找文件,自动加 ...

  2. 有关SQL注入的一些小知识点

    1.判断注入点: 本质原理是找一个需要后台处理后,提交给数据库的点,我理解为用户可以控制并输入后台数据库的变量,比如我们DVWA SQL injection 的ID  ,我们可以通过闭合单引号,#注释 ...

  3. Windows注册表内容详解(转载)

    (关于windows注册表的整理,来源网络) 前提 一.什么是注册表 ​ 注册表是windows操作系统.硬件设备以及客户应用程序得以正常运行和保存设置的核心"数据库",也可以说是 ...

  4. 51单片机—LCD1602显示模块

    文章目录 - 什么是LCD1602 - 如何操作LCD1602 - 上代码 - 什么是LCD1602 LCD:Liquid Crystal Display-液晶显示器,简称LCD,其主要显示原理是以电 ...

  5. centos7.5 安装jdk环境

    最新下载地址 历史下载地址 [root@manage ~]# mkdir /application/ [root@manage ~]# tar -xf jdk-8u112-linux-x64.gz - ...

  6. Fancytree实例

    一.实例 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> ...

  7. 设置一个元素的HTML内容

    问题 你需要一个元素中的HTML内容 方法 可以使用Element中的HTML设置方法具体如下: Element div = doc.select("div").first(); ...

  8. WPF---控件模板(一)

    一.控件模板概述 控件的外观通过一个ControlTemplate类型的对象确定,该对象指定了组成一个控件的显示的各种视觉元素. 当WPF创建一个控件时,会创建一个控件类(模板父)的实例,然后实例化通 ...

  9. 深入浅出Mybatis系列(九)---缓存

    MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存. 1.默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启. 2.二级缓存需要手动开启和配置,他是基于namesp ...

  10. Java HdAcm1069

    import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { Lis ...