SI4463模块使用心得(无线协议)
来源:互联网 发布:重庆移动网络加速器 编辑:程序博客网 时间:2024/06/05 06:25
SI4463小结
今天push project的过程中遇到了丢包现象,带有回复信标的包丢失导致主机堵塞(没来得及写Timeout),分析了下原因,记录下来明天解决。文章权当抛砖引玉,若有不对请指出。叨扰。
由于SI4463是无线模块(废话),所以必然会有使用无线网络的通病——协议问题。SI4463由于物理特性,使用完整带多跳的协议必然会导致效率的降低,并且本次项目的要求仅仅是点对点,所以选择(……自己写的)精简的无线协议为不二之选。
(通过SI446X_READ_PACKET()得到的数据第一个统一为0XFF,所以可以用这个来作为简单的判别是否收到,而真正有意义的数据从第二个开始。但奇怪的是我使用店家的透明串口就没有0xff输出,虽然我猜测可能模块内部自行处理掉了0xff但实际的代码并没有,时间仓促有空继续研究。———>错误,收到FF是因为一个小错误,数据第一位就是发送的第一位)
另外模块即使进入RX状态也不一定能够捕捉到发过来的无线信息,在状态快速切换的情况下,能否接收到信息只是个概率问题。如每0.5s切换一次状态,则有0.5s时间内接收不到信息。所以使用包的编号(或者控制帧)来确定是否握手这个并不太现实,倒是每次通信都进行握手是很可靠的,特别是两方运算速度不对等的情况下,一方计算速度快,可能多次send,而4463的FIFO只能存很少量的数据(经过测试100byte还是差不多可以储存的),很容易就错过关键的包而无法回应,造成堵塞(这个就不得不提,SI4463空传速度433MHZ情况下用200kbps经测试可行(毕竟理论值250k),速度提高后堵塞现象减少了很多,FIFO功不可没)。
增大传输的速度可以减少数据滞留的总空中的时间,但可靠性与传输距离会下降(本次项目需要高可靠性与长距离,所以选择了最低速率)。高传输速度可以显著减少冲突与延迟问题,但对于速度不同步,计算负载不同的两方则会加重丢包的情况(理论虽然这样但经过测试SI4463的FIFO容量还算可以,一般只要切换到RX状态(TX到RX差不多20ms,但RX到TX就很快,记得1ms内就可以。文档上有提及。)就不会丢包)。
通过时钟同步可以从根本上解决问题,但对于计时器紧张的某些应用则不太实用(……如我)。计时器紧张可以选择每次都进行握手协议(如TCP),而若没有双向通信要求则直接(可以多次重复发送同一包保证一定接收)发包就可以(UDP)。
ADD:这个模块我在调试过程中发现很容易便会死机,对干扰跟电源扰动比较敏感,过段时间试试加个电容减少下波纹。SI4463具有RSSI功能,与WIFI一样可以通过这个来估计距离,不太清楚其信道评测功能,将继续研究以便实现自动跳频。
学生一个,胡言乱语一通,叨扰了。
- SI4463模块使用心得(无线协议)
- SI4463模块技术研究(结束)
- 无线模块24l01使用心得(转)
- sx1276, sx1278, Si4463, Si4432, Si4438, sx1212小无线模块对比数据
- 无线MODEM使用心得
- promises/A+协议的实现模块【q】使用心得
- WIFI模块使用心得
- Drupal 模块使用心得
- WIFI模块使用心得
- 使用ESP8266WIFI模块心得
- STM32W108无线射频模块协议栈接口
- 无线收发模块的使用
- 使用AT命令和GPRS无线模块开发(软件)
- 使用AT命令和GPRS无线模块开发(软件)
- 915M无线通讯模块 数传 SI4463 SX1278
- BENQ M22模块使用心得
- Django form模块使用心得
- Django form模块使用心得
- C++作业6
- OGG-00850解决
- POJ3280-Cheapest Palindrome
- Android SQLite 数据库存储
- OGG-00455问题解决
- SI4463模块使用心得(无线协议)
- 为什么运行delphi时菜单栏没有显示,但是设计时菜单栏出现?
- ORA-12514问题解决
- Hibernate与 MyBatis的比较
- GG 单实例10g 到 11g RAC 搭建配置
- RecycleView下拉刷新控件的封装(包括下拉刷新和加载更多 )
- C#利用 Face++sdk 实现wpf小程序【2】 5/11/22
- Openwrt编译:root.squashfs-64k is too big (Max=6488064 , Current=xxxx)
- sky_Move Zeroes