最近使用了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. @Valid和@Validated 区别

    Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...

  2. Azure Bicep 开发利器

    Bicep 是一种用于声明式部署Azure资源的领域特定语言.它的目标是通过更清晰的语法.改进的类型安全性.以及对模块化和代码重用的更好支持,彻底简化编写体验. Bicep 其实是对 ARM 模板的透 ...

  3. Python - typing 模块 —— TypeVar 泛型

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

  4. GitHub自动化部署(CD) asp.net core 5.0 项目(免费空间)

    这里我简单介绍一下使用Github自动化部署自己项目到Heroku云服务器上,Heroku竟然是一个很非常老牌的云平台服务商,竟然还没听说过,网上一查2010被Salesforce收购,网上有很多关于 ...

  5. centos7上安装redis6-0-5

    下载tar包 wget http://download.redis.io/releases/redis-6.0.5.tar.gz 解压tar包 tar -zxvf redis-6.0.5.tar.gz ...

  6. 微信小程序自定义顶部

    wxml <view style="height:{{titleHeight}}px;background:{{background}}" class="user- ...

  7. Kafka 与 RabbitMQ 如何选择使用哪个?

    目录 前言 如何选择? 开发语言 延迟队列 消息顺序性 优先级队列 消息留存 消息过滤 可伸缩行 小结 推荐阅读 前言 我们在工作中经常会用到异步消息,主要使用两种消息模式: 消息队列 发布/订阅 消 ...

  8. mzy git学习,禁用Fast forward的普通合并(六)

    git merge --no-ff -m "msg" x-branch:禁用Fast forward的普通合并 通常,合并分支时,如果可能,Git会用Fast forward模式, ...

  9. js函数和封装

    $就是jquery对象,$()就是jQuery(),在里面可以传参数,作用就是获取元素 js对象与jQuery对象的区别:jQuery对象是一个数组,jQuery对象转为js对象:[0] 取第一个即可 ...

  10. go语言内存对齐

    内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址并占用合适的长度,这就是内存对齐 每种类型的对齐值就是他的内存边界 64位 类型 对齐边界 (对齐值) int8 1byte ...