【LoRa】SetLoRaSymbNumTimeout寄存器

1 前言

本章节介绍LoRa芯片的寄存器SetLoRaSymbNumTimeout,此寄存器的作用在datasheet中的解释是可降低误检测率,但经过了解及实验,使用SetRx的timeout功能也可以实现同样的效果,而且也更容易理解。相反,如果在代码中同时使用寄存器SetLoRaSymbNumTimeout和SetRx的timeout,其效果反而不好,本章将详细解释。
在此,我先将datasheet中对这个寄存器的描述放到这里,下图为SX126x的,其他系列芯片类似。
SetLoRaSymbNumTimeout

2 实验验证疑问

2.1 SetRx的timeout模式和SetLoRaSymbNumTimeout

Q:在使用SetRx的timeout模式时,会设定一个timeout值,在使用寄存器SetLoRaSymbNumTimeout时也会设定一个timeout值,是以哪个时间为准去产生timeout中断的?

2.1.1 实验1

程序中使用参数SF7,BW125,则单个symbol时间为1.02ms。将SymbNum设为200,则换算成时间为200 * 1.02ms = 204ms,程序如下:

sx126x_set_lora_symb_nb_timeout(context, 200 ); // 204ms

而将SetRx的timeout值设置为300ms,程序如下:

  sx126x_set_rx( context, 300 );	// 300ms

运行程序,然后通过逻辑分析仪抓取中断引脚DIO上的波形,此时为RX timeout中断,每隔205ms,产生一次,如下图:
实验1-DIO波形

2.1.2 实验2

修改SetRx的timeout值,其他条件与实验1相同,然后再次测试。程序如下:

sx126x_set_lora_symb_nb_timeout(context, 200 ); // 204ms
sx126x_set_rx( context, 100 );	// 100ms

通过逻辑分析仪抓取中断引脚DIO上的波形,每隔100ms产生一次RX timeout中断,如下图:
实验2-DIO波形

2.1.3 结论

SetRx和SetLoRaSymbNumTimeout分别设定了一个timeout值,哪个值,就以哪个值来产生timeout中断。
另外有一个小结论,就是SetLoRaSymbNumTimeout寄存器只需要在初始化的时候设置一遍即可,不用每产生一次timeout中断就设置一次。

2.2 SetRx的single与continuous模式和SetLoRaSymbNumTimeout

Q:如果使用SetRx的single或者continuous模式,并设置寄存器SetLoRaSymbNumTimeout,那么还会产生RX timeout中断吗?

2.2.1 实验1

使用RX的single模式,同时设置寄存器SetLoRaSymbNumTimeout。参数不变,使用SF7,BW125,单个symbol时间为1.02ms。将SymbNum设为200,换算成时间为200 * 1.02ms = 204ms。

sx126x_set_lora_symb_nb_timeout(context, 200 ); // 204ms
sx126x_set_rx( context, 0 );	// single mode

通过逻辑分析仪抓取中断引脚DIO上的波形,如下图,是每隔205ms产生一次timeout中断的。
DIO波形

2.2.2 实验2

使用RX的continuous模式,同时设置寄存器SetLoRaSymbNumTimeout。

sx126x_set_lora_symb_nb_timeout(context, 200 ); // 204ms
// continuous mode,但只在初始化时设置一次,正常来讲radio会一直处于RX状态
sx126x_set_rx_with_timeout_in_rtc_step(context, 0xFFFFFF);	

实验现象是产生了一次timeout中断后,就停止运行了,猜测原因是radio此时已经由RX转到standby模式了,所以需要再进行一次实验。

2.2.3 实验3

将continuous模式当作timeout模式看待,在RX Timeout中断回调函数中重新设置RX,程序如下:

// continuous mode,在每次timeout中断函数中重设RX
sx126x_set_rx_with_timeout_in_rtc_step(context, 0xFFFFFF);	

实验现象与实验1一致,每隔205ms产生一次timeout中断。

3 小结

  1. 简单理解,只要设置了寄存器SetLoRaSymbNumTimeout,RX由三种模式single、timeout和continuous变成了一种,即timeout模式。
  2. 当同时设置了寄存器SetLoRaSymbNumTimeout和SetRx的timeout模式,哪个设置的时间小,就以哪个时间产生timeout中断。
  3. datasheet中描述寄存器SetLoRaSymbNumTimeout的作用时,有这么一句话 … will wait for a total of SymbNum LoRa symbol to validate…。我分两种情况解析这句话,第一种假设当LoRa芯片检测到LoRa信号时,并且小于设定的SymbNum个数,那radio也会立马从检测模式进入信号解调模式。第二种是假设当LoRa芯片检测时间达到了设定的SymbNum个数时,还是没有检测到LoRa信号,就会产生timeout中断,那这与RX的timeout模式又没什么区别。所以综上而得出的结论是不建议使用寄存器SetLoRaSymbNumTimeout
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Victor随笔集

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值