LoRa笔记03 LoRa sx1276 sx1278空中唤醒研究
一、前言
前面在无线节点的空中唤醒技术解析中由浅入深地对空中唤醒技术做了讲解,讲地非常好,建议大家多看几遍(卧槽,谁又砸砖头!)。这篇笔记将讲LoRa节点的空中唤醒具体应用。
我正在学习LoRa和LoRaWAN,基本按照 官方资料+梳理解析+相关源码 的方式来记录笔记,相信对不少同行者有所帮助,可点此查看帖子LoRa学习笔记_汇总。
本文作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/
二、官方资料
1. CAD 模式介绍
When in CAD mode, the device will check a given channel to detect LoRa preamble signal
CAD的功能的主要介绍是在4.1.6. LoRaTM Modem State Machine Sequences 中的 Channel Activity Detection 小节。在前文的空中唤醒的原理中,已经提到CAD功能是LoRa调制的一个特色,比普通RSSI检测方式要强大得多。
随着扩频调制技术的应用,人们在确定可能低于接收机底噪声的信号是否已经使用信道时,面临重重挑战。这种情况下,使用RSSI无疑是行不通的。为了解决这个问题,可使用信道活动检测器(CAD)来检测其他LoRaTM信号。图11显示了CAD的流程:
2. 操作原理介绍
信道活动检测模式旨在以尽可能高的功耗效率检测无线信道上的LoRa前导码。在CAD模式下, SX1276/77/78快速扫描频段,以检测LoRa数据包前导码。
在CAD过程中,将会执行以下操作: - PLL被锁定。
- 无线接收机从信道获取数据的LoRa前导码符号。在此期间的电流消耗对应指定的Rx模式电流。
- 无线接收机及PLL被关闭,调制解调器数字处理开始执行。
- 调制解调器搜索芯片所获取样本与理想前导码波形之间的关联关系。建立这样的关联关系所需的时间仅略小于一个符号周期。在此期间,电流消耗大幅度减少。
- 完成计算后,调制解调器产生CadDone中断信号。如果关联成功,则会同时产生CadDetected信号。
- 芯片恢复到待机模式。
- 如果发现前导码,清除中断,然后将芯片设置为Rx单一或连续模式,从而开始接收数据。信道活动检测时长取决于使用的LoRa调制设置。下图针对特定配置显示了典型CAD检测时长,该时长为LoRa符号周期的倍数。 CAD检测时间内, 芯片在(2SF+32)/BW秒中处于接收模式,其余时间则处于低功耗状态。
3. DIO 映射
CAD事件等可以利用DIO来通知给其他MCU,手册上给了映射方式。
Table 18 DIO Mapping LoRaTM Mode,其中有 CadDone 事件。
Operating Mode | DIOx Mapping | DIO5 | DIO4 | DIO3 | DIO2 | DIO1 | DIO0 |
ALL | 00 | ModeReady | CadDetected | CadDone | FhssChangeChannel | RxTimeout | RxDone |
01 | ClkOut | PllLock | ValidHeader | FhssChangeChannel | FhssChangeChannel | TxDone | |
10 | ClkOut | PllLock | PayloadCrcError | FhssChangeChannel | CadDetected | CadDone | |
11 | - | - | - | - | - | - |
4. 其他注意事项
注意:7.3章节的前导码检测等示例是FSK方式下才有的,因此这里不再讨论。
三、源码解析
1. DIO映射管脚及中断初始化
DioIrqHandler *DioIrq[] = { SX1276OnDio0Irq, SX1276OnDio1Irq,SX1276OnDio2Irq, SX1276OnDio3Irq,SX1276OnDio4Irq, NULL };SX1276IoIrqInit( DioIrq );
2. 启动CAD
调用SX1276StartCad来启动CAD,配置DIO映射。
void SX1276StartCad( void )
{switch( SX1276.Settings.Modem ){case MODEM_FSK:{}break;case MODEM_LORA:{SX1276Write( REG_LR_IRQFLAGSMASK, RFLR_IRQFLAGS_RXTIMEOUT |RFLR_IRQFLAGS_RXDONE |RFLR_IRQFLAGS_PAYLOADCRCERROR |RFLR_IRQFLAGS_VALIDHEADER |RFLR_IRQFLAGS_TXDONE |//RFLR_IRQFLAGS_CADDONE |RFLR_IRQFLAGS_FHSSCHANGEDCHANNEL // |//RFLR_IRQFLAGS_CADDETECTED);// DIO3=CADDoneSX1276Write( REG_DIOMAPPING1, ( SX1276Read( REG_DIOMAPPING1 ) & RFLR_DIOMAPPING1_DIO0_MASK ) | RFLR_DIOMAPPING1_DIO0_00 );SX1276.Settings.State = RF_CAD;SX1276SetOpMode( RFLR_OPMODE_CAD );}break;default:break;}
}
3. CAD事件处理
void SX1276OnDio3Irq( void )
{switch( SX1276.Settings.Modem ){case MODEM_FSK:break;case MODEM_LORA:if( ( SX1276Read( REG_LR_IRQFLAGS ) & RFLR_IRQFLAGS_CADDETECTED ) == RFLR_IRQFLAGS_CADDETECTED ){// Clear IrqSX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDETECTED | RFLR_IRQFLAGS_CADDONE );if( ( RadioEvents != NULL ) && ( RadioEvents->CadDone != NULL ) ){RadioEvents->CadDone( true );}}else{// Clear IrqSX1276Write( REG_LR_IRQFLAGS, RFLR_IRQFLAGS_CADDONE );if( ( RadioEvents != NULL ) && ( RadioEvents->CadDone != NULL ) ){RadioEvents->CadDone( false );}}break;default:break;}
}
4. 周期性休眠唤醒
应用上,程序要实现周期性的休眠唤醒。目前LoRaWAN协议栈默认的一个流程是每5秒周期性发数据,尚未使用CAD。因此需要大家再摸索下。不过大体流程是这样:在唤醒初期进行CAD,之后进行相应的唤醒或者休眠等待下一次唤醒。
End
LoRa笔记03 LoRa sx1276 sx1278空中唤醒研究相关推荐
- LoRa笔记02 LoRa sx1276 sx1278的发射功率研究
1 前言 发射功率也是射频基础指标,目前SX1278可以支持最大20dBm. 我正在学习LoRa和LoRaWAN,基本按照 官方资料+梳理解析+相关源码 的方式来记录笔记,相信对不少同行者有所帮助,可 ...
- LoRa笔记01 sx1276 sx1278信号强度RSSI研究
1 前言 RSSI信号强度是无线网络中特别被人关注的一个点,尤其是工程部署中.今天在了解LoRa SX1276的RSSI展示,搜寻了一些资料,做如下笔记留念.(留念...真没词用了吗...) 本文作者 ...
- LoRa学习:LoRa通信调制解调的实现原理与性能
更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: LoRa学习:LoRa调制解调原理与性能 目录 LoRa学习:LoRa调制解 ...
- 无线节点的空中唤醒技术解析
无线网络应用中,通常要求节点尽可能休眠,最大限度降低功耗,但又希望节点能尽可能及时地收发无线数据,这似乎是个不可调和的矛盾. 但是有个神奇的功能,空中唤醒.节点即使处于休眠,当需要节点工作时可以直接通 ...
- 【LoRa网关以及LoRa自组网】以“有人物联网”为例
[LoRa网关以及LoRa自组网]以"有人物联网"为例 0.参考资料 1. LoRa 自组网协议的理解 1.1[LoRa模块WH-L101-L-P-H10 ] 1.2[LoRa网关 ...
- LoRa学习:LoRa进行跳频扩频通信(FHSS)的原理
更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦: LoRa学习:LoRa进行跳频扩频通信(FHSS)的原理 FHSS,跳频扩频 ...
- 构建之法读书笔记03
构建之法读书笔记03 阅读之前: 我发现这本书我越往后读越是后期软件方面的东西,好多东西因为我之前没有接触过软件,所以都变得晦涩难懂,但是大体意思我也应该明白.我知道微软但是不曾设想过他的工作体系 ...
- Git 的安装与初次使用 —— Git 学习笔记 03
Git 的安装与初次使用 -- Git 学习笔记 03 Git 的安装与初次使用 -- Git 学习笔记 03 安装 Git 在 Linux 上安装 在 Windows 上安装 初次运行 Git 前的 ...
- SpringMVC-学习笔记03【SpringMVC常用注解】
Java后端 学习路线 笔记汇总表[黑马程序员] SpringMVC-学习笔记01[SpringMVC概述及入门案例][day01] SpringMVC-学习笔记02[参数绑定及自定义类型转换] Sp ...
最新文章
- concat和concat_ws()区别及MySQL的几个实用字符串函数
- discard connection丢失数据_python kafka 生产者发送数据的三种方式
- 调整分区个数_2T移动硬盘分区办法
- 不要将时间浪费到编写完美代码上
- 从0搭建一个Springboot+vue前后端分离项目(五)创建后台Springboot工程
- Flume的Channel
- 错误: 找不到或无法加载主类 com.leyou.LeyouItemApplication Process finished with exit code 1...
- Halcon例程(基于GMM模型的分类)详解 —— classify_citrus_fruits.hdev
- idea打war的问题
- 王道考研 计算机网络16网络层功能 数据交换方式 电路交换 报文交换 分组交换 路由算法 OSPF RIP AS自治系统 IGP内部网关协议 EGP外部网关协议
- Java即时类| plus()方法与示例
- 钉钉调岗申请单怎么写 钉钉申请调岗的教程
- 数据结构与算法-列表相关时间复杂度
- 设计模式之原型模式(Prototype)
- Java中将16进制字符串转换成汉字
- DispatcherServlet服务调度
- 【渝粤教育】国家开放大学2018年秋季 0363-21T市场调查与预测 参考试题
- Radasm出现error LNK2001
- Arduino Uno + HMC5883L电子罗盘 实验
- 计算机工程系徽,教师队伍
热门文章
- NLP-基础任务-中文分词算法(1)-基于词典: 机械分词(词典字符串匹配):前向最大匹配、后向最大匹配、双向最大匹配【OOV:基于现有词典,不能进行新词发现处理】
- MATLAB实现智能计算方法实验:实验三 BP神经网络
- 【深度学习】ResNet系列网络结构
- tcpdump进行DNS抓包
- linux高性能服务器编程书本总结
- MATLAB-三维插值运算
- 生产服务器的pcie错误
- Python调用Jar包的两种方式
- React Navigation——底部导航栏设计
- 2018年广东工业大学文远知行杯新生程序设计竞赛 1006 那天的延长线在今天β...