这里会显示出您选择的修订版和当前版本之间的差别。
cc1310:wake_on_radio [2017/08/31 22:47] 127.0.0.1 外部编辑 |
cc1310:wake_on_radio [2021/06/22 23:14] |
||
---|---|---|---|
行 1: | 行 1: | ||
- | < | ||
- | # CC1310 Wake-on-Radio 功能 # | ||
- | |||
- | |||
- | ## 介绍 ## | ||
- | 本章使用两块< | ||
- | |||
- | |||
- | > | ||
- | rfWakeOnRadioRx可在: C: | ||
- | ## 硬件环境 ## | ||
- | 使用USB连接< | ||
- | |||
- | ![](http:// | ||
- | |||
- | 成功连接开发板之后,打开电脑的设备管理器。可以看见XDS110的两个端口,我们打印使用的串口是XDS110 Class Application/ | ||
- | |||
- | ![](http:// | ||
- | |||
- | > | ||
- | |||
- | ## 导入例程 ## | ||
- | 参考编译运行第一个例程。 | ||
- | |||
- | ## 例程摘要 ## | ||
- | 该示例演示了CC1310的Wake-on-Radio(WoR)功能,显着的降低了RF链路的功耗。该例程演示了如何使用RF驱动程序来安排自动唤醒时间,并发送具有长的前导码的消息。 | ||
- | 该例程要配合rfWakeOnRadioTx和rfWakeOnRadioRx一起使用。 | ||
- | |||
- | ## 基本配置 ## | ||
- | 可以使用SmartRF Studio的代码导出功能,分别选择“TX/ | ||
- | 唤醒间隔使用rfWakeOnRadioRx.c文件和rfWakeOnRadioTx.c顶部的WOR_WAKEUPS_PER_SECOND定义设置。请确保在RX和TX部分中将其设置为相同。 | ||
- | |||
- | |||
- | ## 例程描述 ## | ||
- | **rfWakeOnRadioTx: | ||
- | 该TX示例非常类似于rfPacketTX示例,除了它使用CMD_PROP_TX_ADV能够发送长前导码。 | ||
- | 基于rfWakeOnRadioTx.c文件顶部的WOR_WAKEUPS_PER_SECOND定义来动态计算前导码的长度。 | ||
- | 通过按键进行数据发送。 | ||
- | |||
- | **rfWakeOnRadioRx: | ||
- | Wake-on-Radio示例基于无线电的占空比原理,并根据是否具有有效的数据包再进入RX。 | ||
- | 应用程序有一个任务,除了初始化应用程序,还重新提交CMD_PROP_RX_SNIFF命令更新无线接收时间间隔,如下所示。 | ||
- | ````C | ||
- | RF_cmdPropRxSniff.startTime += WOR_WAKE_UP_INTERVAL_RAT_TICKS(WOR_WAKEUPS_PER_SECOND); | ||
- | ```` | ||
- | 无论何时运行RX Sniff命令,它也会记录命令的状态。一些状况可以在“worStatistics”结构中找到。这里可以获得命令当前返回状态,这可能是以下四种情况: | ||
- | |||
- | 因为没有发现RSSI而返回idle状态 | ||
- | 发现RSSI但没有PQT而返回idle状态 | ||
- | 发现RSSI和PQT,但没有有效的同步字返回的超时状态 | ||
- | 收到一个Packet | ||
- | |||
- | 在应用中,内部LNA控制信号已经路由到Board_PIN_LED0。这意味着当收音机处于活动RX时,Board_PIN_LED0将被打开。如果没有发现RSSI超过配置的阈值,则它将处于比发现超过阈值的时间更短的时间。原因是因为如果超过阈值,那么它还将检查有效的前导码。 | ||
- | |||
- | 如果发现RSSI和有效的前同步码,那么它也将继续并寻找同步字。如果找到同步字,并且数据包的CRC也正确,则Board_PIN_LED1将切换。 | ||
- | |||
- | ## 数据包前导码 ## | ||
- | 以下是典型的无线电物理层数据包格式。 | ||
- | ````C | ||
- | | Preamble | ||
- | -------------------------------------------------------------------- | ||
- | | 4 byte | ||
- | ```` | ||
- | |||
- | 前导码通常设置为重复的10101010模式,因为数据包的开始在现代无线电中用于多种目的。这通常涉及建立自动增益控制,估计频率误差等。除此之外,它还可以用于检测信号的存在。 | ||
- | |||
- | 如果我们使用前导码来检测信号的存在,则接收机必须经常地醒来,不要错过前导码。这意味着前导码的长度直接影响接收机唤醒的频率。 | ||
- | |||
- | 在50kbit / s的2-GFSK中,4字节前导码只有650 us长。这意味着,为了不丢失数据包,接收机每秒必须唤醒1500次以上。这通常不是一个可行的解决方案,不会节省大量的电力。 | ||
- | |||
- | 如果我们改为配置发送器发送100毫秒长的前导码,这意味着接收机只需要每秒唤醒10次以保证接收数据包。这增加了系统的延迟,但显着降低了平均功耗。 | ||
- | |||
- | 在这个唤醒无线电示例中,默认设置是发送500 ms的前导码,因此每秒唤醒约两次以检查它。 | ||
- | |||
- | ## RSSI和PQT ## | ||
- | 通常有两种方法可以使用接收器检查空中信号的存在。一个是检查接收信号强度指示器(RSSI),它仅仅表示接收到的能量。另一个是检查有效前导码的存在并检查前导码质量(PQT)。 | ||
- | |||
- | RSSI通常更快地检查,但也提供较少的信息。RSSI阈值大小主要取决于配置的接收器带宽。从RSSI中获得的信息只是表示存在信号,不会给出有用信息。 | ||
- | |||
- | PQT比RSSI需要更长的时间来检查。主要原因是接收机必须接收一定数量的符号,才能看到接收的数据,并检查其确实是一个有效的前导码。这多长时间主要取决于符号率。 | ||
- | |||
- | 也可以RSSI和PQT都检测。在这种情况下,通常首先首先检查RSSI,如果RSSI达到阈值之上,则检查PQT。 | ||
- | |||
- | ## RX Sniff命令 ## | ||
- | CC13xx具有用于进行接收(RX)和进行载波监听(Carrier Sense)的专用无线电命令。要进入接收模式,可以发送CMD_PROP_RX或CMD_PROP_ADV。要做载波侦听,可以发送CMD_PROP_CS。还有两个命令,在信号存在的情况下将载波侦听与进入接收相结合,就是CMD_PROP_RX_SNIFF和CMD_PROP_RX_ADV_SNIFF命令。 | ||
- | |||
- | Sniff命令本身由两部分组成。第一部分是与RX命令相同,第二部分与载波检测命令相同。实际上,sniff命令的行为非常像用CMD_PROP_RX(_ADV)和MD_PROP_CS的组合。 | ||
- | |||
- | Sniff命令可以配置为使用RSSI,PQT或两者作为检测信号存在的标准。在这个例子中,使用的就是Sniff命令。 | ||
- | |||
- | ## RX Sniff命令的无线电唤醒配置 ## | ||
- | |||
- | 在rfWakeOnRadioRx工程中:配置RX Sniff命令时,有几个参数对于唤醒无线电使用长前导码很重要。 | ||
- | |||
- | 此示例默认情况下以下列方式配置了RX Sniff命令: | ||
- | |||
- | - 使用RSSI和PQT: | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | - 如果RSSI无效,则报告空闲,不需要测试PQT: | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | - 如果报告空闲,请立即结束命令: | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | - 连续检查前置码的整个长度的RSSI和PQT: | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | - RSSI阈值在示例中的定义中设置。默认为SmartRF Studio设置的灵敏度50kbit/ | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | - 一个RSSI高于阈值立刻报告忙,低于立刻报告空闲: | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | - 一个有效的PQT立刻报告忙,无效的PQT立即报告空闲: | ||
- | ````C | ||
- | rxSniffCmd-> | ||
- | ```` | ||
- | |||
- | 除了功能设置外,还有几个时序参数需要正确配置。这些是基于前导码长度和/ | ||
- | |||
- | ## 相关概念 ## | ||
- | ### 开始触发 ### | ||
- | 为了能够在唤醒之间具有确定性间隔,使用绝对时序。这通过将起始触发类型设置为TRIG_ABSTIME来完成,并且每个唤醒以给定的间隔(即每秒醒来两次500ms)递增。 | ||
- | |||
- | ### 结束触发 ### | ||
- | RX Sniff命令的结束触发设置为比整个前导码加上同步字的长度稍长。意味着如果我们在前导码的最开头醒来,我们会等待直到我们收到整个前导码和同步字,如果结束触发之前还没有得到一个同步字,那么我们离开RX。 | ||
- | |||
- | > | ||
- | |||
- | ### 相关期 ### | ||
- | 相关周期是无线电必须检测到有效前导码的时间窗口。检测到的每个有效的PQT都将向前移动此时间窗口,这通过相关峰值在底层硬件中完成,因此命名。第一个峰值将在接收到约24个符号的前导码之后发生。每两个符号将发生后续的峰值。如果相关期间没有相关峰值,那么空中没有有效的前导码。 | ||
- | |||
- | 这个时期的一个值得注意的是,它必须足够宽以达到第一个相关峰值。另一个原因是它还必须足够宽,以便能够适应整个同步字,具有一定的余地。原因为如果没有空余,那么命令将会报告它在接收同步字时不再感测到前导码。 | ||
- | |||
- | ## 例程演示 ## | ||
- | Rx板Board_PIN_LED0 500ms闪烁一次,一旦接收到pack,进行一次Board_PIN_LED1状态切换。TXBoard_BINT_1按键按下即发送数据包,并且每次发送成功后Board_PIN_LED1状态切换。 | ||
- | |||
- | |||
- | |||
- | |||
- | ## 加入我们 ## | ||
- | 文章所有代码、工具、文档开源。加入我们[**QQ群 593145299**](https:// | ||
- | <div> | ||
- | <p align=" | ||
- | <a target=" | ||
- | © Copyright 2017, 成都乐控畅联科技有限公司. | ||
- | </p> | ||
- | </ | ||
- | </ | ||