433MHZ SPI模块使用心得
最近使用了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模块使用心得的更多相关文章
- python模块学习心得
初始模块 1.什么是模块 模块是用来实现某项功能的一大堆代码,为什么会有模块呢?过程式编程的时候为了减少程序员编程代码的重复性,就利用函数的调用减少了代码的重复性,但是某些时候程序会过于的庞大,我们会 ...
- Django form模块使用心得
最近用Django 写了一个网站,现在来分享一下对Django form 的一些心得. 一,创建一个表单 创建一个Form表单有两种方式: 第一种方式是继承于forms.Form,的一个子类,通过在f ...
- C#使用CH341 SPI模块读写SD卡
SD卡相关CMD命令 ;//卡复位 ; ;//命令9 ,读CSD数据 ;//命令10,读CID数据 ;//命令12,停止数据传输 ;//命令16,设置SectorSize 应返回0x00 ;//命令1 ...
- Python pymysql模块学习心得
PyMySQL包含了一个纯Python的MySQL客户端的库,它的目的是用来替换MySQLdb,并且工作在CPython,PyPy和IronPython. PyMySQL官方地址:https://py ...
- 如何让FPGA中的SPI与其他模块互动起来
在上一篇文章<FPGA的SPI从机模块实现>中,已经实现了SPI的从机模块,如何通过SPI总线与FPGA内部其他模块进行通信,是本文的主要讨论内容. 一. 新建FPGA内部DAC控制模块 ...
- FPGA的SPI从机模块实现
一. SPI总线协议 SPI(Serial Peripheral Interface)接口,中文为串行外设接口.它只需要3根线或4根线即可完成通信工作(这里讨论4根线的情况). ...
- SPI介绍
此文摘自百度百科:http://baike.baidu.com/view/245026.htm SPI概述SPI:高速同步串行口.3-4线接口,收发独立.可同步进行. SPI, 是英语Serial P ...
- 说说SPI协议
SPI,是英语Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口.SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管 ...
- iic uart spi
第一个区别当然是名字: SPI(Serial Peripheral Interface:串行外设接口); I2C(INTER IC BUS) UART(Universal Asynch ...
随机推荐
- @Valid和@Validated 区别
Spring Validation验证框架对参数的验证机制提供了@Validated(Spring's JSR-303规范,是标准JSR-303的一个变种),javax提供了@Valid(标准JSR- ...
- Azure Bicep 开发利器
Bicep 是一种用于声明式部署Azure资源的领域特定语言.它的目标是通过更清晰的语法.改进的类型安全性.以及对模块化和代码重用的更好支持,彻底简化编写体验. Bicep 其实是对 ARM 模板的透 ...
- Python - typing 模块 —— TypeVar 泛型
前言 typing 是在 python 3.5 才有的模块 前置学习 Python 类型提示:https://www.cnblogs.com/poloyy/p/15145380.html 常用类型提示 ...
- GitHub自动化部署(CD) asp.net core 5.0 项目(免费空间)
这里我简单介绍一下使用Github自动化部署自己项目到Heroku云服务器上,Heroku竟然是一个很非常老牌的云平台服务商,竟然还没听说过,网上一查2010被Salesforce收购,网上有很多关于 ...
- 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 ...
- 微信小程序自定义顶部
wxml <view style="height:{{titleHeight}}px;background:{{background}}" class="user- ...
- Kafka 与 RabbitMQ 如何选择使用哪个?
目录 前言 如何选择? 开发语言 延迟队列 消息顺序性 优先级队列 消息留存 消息过滤 可伸缩行 小结 推荐阅读 前言 我们在工作中经常会用到异步消息,主要使用两种消息模式: 消息队列 发布/订阅 消 ...
- mzy git学习,禁用Fast forward的普通合并(六)
git merge --no-ff -m "msg" x-branch:禁用Fast forward的普通合并 通常,合并分支时,如果可能,Git会用Fast forward模式, ...
- js函数和封装
$就是jquery对象,$()就是jQuery(),在里面可以传参数,作用就是获取元素 js对象与jQuery对象的区别:jQuery对象是一个数组,jQuery对象转为js对象:[0] 取第一个即可 ...
- go语言内存对齐
内存对齐 为保证程序顺利高效的运行,编译器会把各种类型的数据安排到合适的地址并占用合适的长度,这就是内存对齐 每种类型的对齐值就是他的内存边界 64位 类型 对齐边界 (对齐值) int8 1byte ...