LoRa学习:LoRa数据接受发送流程(FIFO)

更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦:
在这里插入图片描述



LoRa学习:LoRa数据接受发送流程(FIFO)


1、数据发送流程

在发送模式下,仅在需要发送数据包数据的时候才会启动射频、PLL和PA模块,可以减少功耗。。
如下图为数据发送流程:
这里写图片描述

从上图可以看出,LoRa发送前一直处于待机状态,在初始化Tx模块后,将待发送数据(Payload)写入FIFO,然后切换到发送状态将数据通过LoRa调制成信号发送出去,等到发送完成后,会产生TxDone中断,同时再次切换为待机状态,完成一个发送流程。。

需要注意:

  • 静态配置寄存器只有在睡眠、待机模式才可写
  • LoRa的FIFO只有在待机模式下才可写
  • 通过发送Tx模式请求,开始数据的发送
  • 发送操作完成后,可手动将设备设为睡眠模式,或者重新向FIFO写入数据,以便稍后再次进行Tx操作

LoRa将数据写入FIFO时必须:

(1)将FifoPtrAddr 设置为 FifoTxPtrBase
(2)将PayloadLength写入FIFO(RegFifo)


2、数据接收流程

LoRa接收有两种模式:

  • 单一接收
  • 连续接收

整体流程如下图:
这里写图片描述

2.1 单一接收模式

单一模式下,LoRa在给定的时间窗内搜索前导码,如果该时间窗结束时还未收到,则芯片会产生RxTimeout中断信号,同时切换回待机模式。。时间窗长度在RegSymbTimeout定义,必须为4~1023个符号,缺省值为5。。

在Payload接收完成后,如果CRC无效,则会产生RxDone以及PayloadCrcError中断信号。。然而即使CRC无效,仍然可以在FIFO中写入数据,以便后续进行处理。。RxDone中断产生后芯片会切换回待机模式。。

当RxDone或RxTimeout中断信号产生时,LoRa都会自动切换到待机模式,因此,只有在数据包到达时间窗已知的情况下才使用Rx单一接收模式,而在其他情况下,应使用Rx连续模式。

单一接收模式下数据包处理流程如下:
这里写图片描述

2.2 连续接收模式

连续模式下,LoRa调制解调器会持续的扫描信道来搜索前导码,如果检测到后,LoRa都会在收到数据之前对该前导码进行检测及跟踪,然后继续等待检测下一前导码。。。
如果前导码长度超过RegPreambleMsbRegPreambleLsb设定的预计值(按照符号周期测量),则前导码会被丢弃,并重新开始前导码搜索。。但这种场景不会产生中断标志,与单一Rx模式相反,在连续Rx模式下,当产生RxTimeout中断时,设备不会进入待机模式,这时,用户必须在设备继续等待有效前导码的同时直接清除中断信号。。

注意:被解调的字节是按照接受序列写入数据缓存区的。换言之,新数据包的第一个字节会在上一个数据包的最后一个字节之后立即写入。。在这种模式下,接受地址指针将不会重置。因此,MCU必须对地址指针进行处理,以保证FIFO数据缓存不会溢出。。

在连续模式下,被接受数据包的处理流程如下:

(1)在睡眠或待机模式下,选择RxCOUNT模式
(2)收到有效报头Header后,紧接着会产生RxDone中断。芯片一直处于RXCONT模式,等待下一个LoRa数据包。
(3)检查PayloadCrcError标志,以验证数据包的完整性
(4)如果数据包被正确接受,则可以读取FIFO
(5)接收过程(2-4)可重复

在连续操作模式下,仅可查看最后一个接受数据包对应的状态信息。。换言之,应在接受到下一个RxDone信号之前读取对应寄存器。

从FIFO提取Payload

为从FIFO中读取接受的Payload数据,用户必须保证状态寄存器RegIrqFlags中的ValidHeader、PayloadCrcError、RxDone以及RxTimeout中断信号未触发,以确保数据包接受成功终止。(既不应设置任何标志)

如果发送错误,应跳过一下步骤,同时丢弃数据包。为从FIFO中提取有效数据,要根据一下寄存器:

  • RegRxNbBytes:表示到现在为止,已接受到的字节数
  • RegFifoAddrPtr:标志LoRa接收数据写入FIFO位置的动态指针
  • 将RegFifoAddrPtr设置为RegFifoRxCurrentAddr,表示将FIFO指针指向FIFO中最后接收的数据包存储位置。可以通过RegRxNbBytes读取RegFifo中的数据,以提取数据包的Payload
  • 或者,可以手动将RegFifoAddrPtr设置为RegFifoRxByteAddr减去RegRxNbBytes的值,使该指针从当前数据包开始,一直指向最后接受的数据包的存储位置。。。

基于前导码其实的数据包过滤

LoRa调制解调器会根据寻址自动过滤接受到的数据包。。Sx127x支持基于Payload的前几个字节对数据包进行软件过滤。。下面以4字节地址为例,该地址长度可变

数据包过滤的目的是:确定数据包是否是发往该设备的Payload,如果不是,则芯片之后切换回睡眠模式。

软件数据包过滤的步骤如下:

软件数据包过滤的步骤

接收机超时操作

LoRa在单一/连续接收模式下,可以启用接收机超时功能,以便接收机在预先定义好的时间内监听是否收到有效数据包。。定时器会在接受模式开启实启动,并在RegIrqFlags中查询RxTimeout中断信号。。
在Rx单一模式下,RxTimeout中断后芯片会待机,并且之后如果再次进入Rx前,必须清除该中断信号。。而在Rx连续模式下,虽然产生中断信号,但芯片却会一直处于Rx连续模式。因此需要在Rx连续模式下,MCU定期清除该中断信号。。
设定的超时时间值为符号周期的整数倍,计算公式如下:

TimeOut = LoRaRxTimeout * Ts


LoRa学习系列链接汇总:

LoRa学习:信道占用检测原理(CAD)
http://blog.csdn.net/howiexue/article/details/78052608

LoRa学习:LoRa关键参数(扩频因子,编码率,带宽)的设定及解释
https://blog.csdn.net/howiexue/article/details/78028881

LoRa学习:LoRa数据接受发送流程(FIFO)
http://blog.csdn.net/howiexue/article/details/78049603

LoRa学习:SX127x寄存器以及FIFO数据缓存使用配置
http://blog.csdn.net/howiexue/article/details/78045635

LoRa学习:LoRa进行跳频扩频通信(FHSS)的原理
http://blog.csdn.net/howiexue/article/details/78043987

LoRa数据包结构分析及数据传输时间的计算
http://blog.csdn.net/howiexue/article/details/78043466

433MHz LoRa/FSK 无线频谱波形分析(频谱分析仪测试LoRa/FSK带宽、功率、频率误差等)
http://blog.csdn.net/howiexue/article/details/79199712

LoRa 30个常见问题解答 FAQs汇总
http://blog.csdn.net/howiexue/article/details/78038883

LoRa学习:LoRa通信调制解调的实现原理与性能
http://blog.csdn.net/howiexue/article/details/78017320

LoRA学习: SX1276/SX1277/SX1278对比
http://blog.csdn.net/howiexue/article/details/77978174

LoRa学习:SX127x芯片数字IO引脚映射
http://blog.csdn.net/howiexue/article/details/78052758

LoRa芯片的八种工作模式解析
http://blog.csdn.net/howiexue/article/details/78045754

##欢迎转载,Howie原创作品,本文地址:
http://blog.csdn.net/HowieXue/article/details/78049603

##谢谢

  • 26
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HowieXue

求打赏~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值