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都会在收到数据之前对该前导码进行检测及跟踪,然后继续等待检测下一前导码。。。
如果前导码长度超过RegPreambleMsb和RegPreambleLsb设定的预计值(按照符号周期测量),则前导码会被丢弃,并重新开始前导码搜索。。但这种场景不会产生中断标志,与单一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
您的留言或需求: