CC1310 架构组成,TX/RX+WOR嗅探过程,低功耗方法

CC1310主要由四个部分组成:主MCU、RF核、Sensor Controller Engine和一些外设

主MCU搭载的是ARM Cortex-M3,它作为CC1310主要的操控部份,包含的是RTOS和 对底层外部接口的ㄧ些drivers ,应用程序跑在这个部分

RF核顾名思义就是和射频相关的,它包含的是射频的一些接口,主MCU通过发送命令的方式可以控制射频进行工作,同时RF核会返回 射频工作的结果给主MCU

Sensor Controller Engine 是CC1310独有的一个部份,它可以独立于主MCU工作,主要操控的是外部传感器和一些接口,可以做一些小的编程(使用Sensor Controller Studio)

Peripherals就是一些外设,包括一些GPIO UART的口 AES加密、Timers相关的

例如CC1310需要完成的工作是以一秒的频率,从外部的传感器获取数据(ADC), 然后把这个数据发送出去的。首先主MCU、RF Core和外设全部都是关闭的,Sensor Controller Engine 独立于这三个部分独立工作。从外部的传感器以一秒的频率进行采样,Sensor Controller Engine 它可以独立编程,那么在编程逻辑里面我们加入了对传感器数据的判断,如果传感器的数据高于预值,那么我们就唤醒主MCU,否则继续进行采样

如果Sensor Controller 获取到的传感器的数高于预值,那么它就会唤醒主MCU 主MCU会准备对RF Core进行初始化,主MCU通过发送TX命令 对RF Core进行操控,RF Core在接受到命令之后 会自动对命令进行处理,并把数据返回给主MCU,当发送完成之后主MCU会继续关闭RF Core。

CC1310的wor嗅探功能为发送方与接收方都提供了低功耗运行方案。

发送方处于低功耗休眠+sensor controller检测外部信号,当需要发送数据时,先发送长时间的前导同步码,发送时间需要大于接收方的接收唤醒周期。发送方不定的时间发送,这就需要接收方定期醒来接收数据,CC1310的嗅探功能可以在不开启接收模式的状态下先检测空中信号,首先使用RSSI检测空中信号强度,若RSSI满足设定阈值(信号强度阈值可设)再使用POT检测前导码是否满足要求,检测信号的存在。再开启接收器接收数据。在嗅探模式下的功耗约为60-70uA 。

Wor执行过程中,进入standby模式最低功耗低至0.1uA,执行sniff命令时功耗约为60~70uA,接收到数据包时功耗约为6mA。

CC1310的wor功能使用demo验证,引用的是内部API发送命令形式,WOR自动执行,并且定时自动唤醒MCU来启动RF的RSSI信号强度检测和Preamble Quality(PQT)前导码质量检测进行载波侦听。

发送方主要流程:

1、initializeTxAdvCmdFromTxCmd(&RF_cmdPropTxAdv, &RF_cmdPropTx);

初始化发送命令,RF_cmdPropTx 该结构体为设置发送命令,发送同步字及速率等参数

使用SmartRF Studio的配置导出“数据包发送/接收”选项,以导出此示例的设置。以50kbit / s的速度进行了测试。

2、RF_cmdPropTxAdv.preTime = WOR_PREAMBLE_TIME_RAT_TICKS(WOR_WAKEUPS_PER_SECOND);

该参数决定了接收方的启动时间间隔,发送方与接收方设置一致。前同步码的长度是根据WOR_WAKEUPS_PER_SECOND定义动态计算的。即每次发送唤醒请求时,前导码的发送时间长度由该参数决定。

3、RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, NULL, 0);

设置发送频率868MHz

4、RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropTxAdv, RF_PriorityNormal, NULL, 0);

调用该命令即发送数据,例程使用按键触发发送。

接收方主要流程:

1、initializeSniffCmdFromRxCmd(&RF_cmdPropRxSniff, &RF_cmdPropRx);

初始化嗅探命令,与发送方一致使用SmartRF Studio的配置导出

2、configureSniffCmd(&RF_cmdPropRxSniff, WOR_MODE, datarate, WOR_WAKEUPS_PER_SECOND);

配置为WOR模式,该命令表示为,首先使用RSSI检测空中信号强度,若RSSI满足设定阈值(信号强度阈值可设)再使用POT检测前导码是否满足要求,检测信号的存在。

3、RF_runCmd(rfHandle, (RF_Op*)&RF_cmdFs, RF_PriorityNormal, &callback, 0);

设置发送速率、同步字、发送频率868MHz等参数

4、RF_cmdPropRxSniff.startTime = RF_getCurrentTime();

RF_cmdPropRxSniff.startTime += WOR_WAKE_UP_INTERVAL_RAT_TICKS(WOR_WAKEUPS_PER_SECOND);

设置接收触发时间,设置下次接收的时间。间隔时间内系统进入standby模式

5、RF_runCmd(rfHandle, (RF_Op*)&RF_cmdPropRxSniff, RF_PriorityNormal, &callback, RF_EventRxEntryDone);

MCU间隔唤醒执行接收命令及回调函数,RF_runCmd()是阻塞调用,可换用 RF_postCmd()或者RF_scheduleCmd()。然后用RF_pendCmd() 来阻塞命令,【RF_runCmd()其实就是 post + pend】

使用前同步码来检测信号的存在,那么接收器必须经常醒来以免错过前同步码。这意味着前同步码的长度直接影响接收机唤醒的频率。默认设置是发送500 ms前同步码,因此每秒大约唤醒两次以进行检查。增加了系统中的等待时间,但大大降低了平均功耗。参数WOR_WAKEUPS_PER_SECOND设置发送前同步码的持续时间,设置为2即每秒2次唤醒接收,则对应500ms同步码发送时间。该时间计算使用无线电定时器(RAT:4MHz)的滴答为单位

WOR空中检测RSSI及载波监听同步字、前同步码的时间根据速率不同而计算,且相关周期需足够宽以使检测有一定的余量。算法中根据50K~200K,300K~400K,500K设置了不同的时间以便于不同的速率下执行WOR。在传输距离上WOR会比普通模式短一点,因为WOR会设置阀值,只有能量高于这个这个值,才能进入后面的接收。

想让RF core独立于主MCU进行数据包的嗅探,是不行的。WOR功能的实现是基于sniff命令软件实现的,也就是说必须每次都处理“sniff command done”回调,去查看是否收到了WOR包,或者是否要调度新的sniff命令。

    Wor执行过程中,进入standby模式最低功耗低至0.1uA,执行sniff命令时功耗约为60~70uA,接收到数据包时功耗约为6mA。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值