WOR很多人只见其音不见其容,最近经过一翻折腾终于在CC1101上把WOR解决了。

这个配置方式其实对于 CC1100/CC1100E/CC2500等芯片都是通用的,对于SOC 芯片,CC1110和CC2510等芯片可以借鉴下,原理上没区别。

首先,先来简单说明下WOR到底是个什么功能。WOR就是使芯片处于SLEEP状态下,定时唤醒扫描空中信号的功能。米错,虽然说的是电磁波唤醒,但并不是无消耗的无线功能,需要设定一个定时扫描的周期.然后,每个周期醒过来一次扫描空间信号。

需要注意的是,如果引导码正确,即使不是发给它的数据,它也会接收,然后醒过来。

下面来看一下源代码:

/******************************************************************************

<函数说明>

函数名称:CC1101_IntWOR

函数入参:Time 时间 分 秒级和毫秒级  使用TimeLive来选择

函数说明:电磁波WOR唤醒功能初始化

函数备注:进入电磁波唤醒,也会同时进去到掉电模式,即SLEEP. 再次进入SLDE将会退出掉电模式

当 TimeLive = WOR_MS 时, 不可大于60000ms 可用60000

当 TIMELIVE = WOR_S  时,不可大于 61947S

#define WOR_S 0x11

#define WOR_MS 0x22

返回值:

******************************************************************************/

uint8 CC1101_InitWOR(uint32 Time)

{

//uint16 T_Event0=60;   //把 EVENT0的时间设定为1S

uint32 EVENT0=0;

uint16 WOR_RES=1;

uint16 WOR_rest=1;      //2^(5*WOR_RES) 的值

WORmode =1; //开启WORMOD模式

//当输入数据 不符合规则的时候返回错误

if(Time<15 | Time>61946643) return 0;

/* WOR WOR_RES设定

以WOR_RES所能区分的最大时限 区分WOR_RES大小

WOR_RES值       时间(极限最大值)(ms)

0                1890.4615         *14.34 (最小值)

1                60494.7692

2                1935832.6153

3                61946643.6923

*/

if(Time<1890) WOR_RES=0;

else if(Time<60494)       WOR_RES=1;

else if(Time<1935832)     WOR_RES=2;

else if(Time<61946643)    WOR_RES=3;

// WOR_rest 默认等于1

// WOR_rest=2^5WOR_RES

/*

if(!WOR_RES) WOR_rest=1;

else{

for(uint8 t=0;t<(5*WOR_RES);t++)WOR_rest *= 2;

}

*/

WOR_rest <<= 5*WOR_RES;

// 设置 Event0 timeout  (RX 轮询间隔时间);

// 事件0 EVENT0时间长度公式 T_event0 = 750 / f_xosc * EVENT0 * 2^(5*WOR_RES) = 1 s,   f_xosc 使用的是 26 MHz

// EVENT0 = (F_xosc*Time)/((750*WOR_rest)*Tms);

//由于计算的值普遍偏大,如果照常计算会出现溢出, 所以分段处理

EVENT0 = F_xosc/1000;

if(EVENT0>Time)

{

EVENT0 = EVENT0*Time;

EVENT0 = EVENT0/(750*WOR_rest);

}

else

{

EVENT0 = (Time/(750*WOR_rest))*EVENT0;

}

CC1101_WriteCode(CCxxx0_SIDLE); //空闲模式

// 设置接收超时 Rx_timeout =2.596 ms.

// MCSM2.RX_TIME = 001b

// => Rx_timeout = EVENT0*C(RX_TIME, WOR_RES)

CC1101_WriteReg(CCxxx0_MCSM2, 0x10);  //RX_TIME 0   占空比最大

// Enable automatic FS calibration when going from IDLE to RX/TX/FSTXON (in between EVENT0 and EVENT1)

//在TX,RX后 自动校准   XSOC时限 (10) 149-155uS

CC1101_WriteReg(CCxxx0_MCSM0, 0x18);                  //校准 FS_AUTOCAL[1:0]  01    重IDLE转到TX OR RX模式时

//

//写入 事件0 时间

CC1101_WriteReg(CCxxx0_WOREVT1, (uint8)(EVENT0>>8));        // High byte Event0 timeout

CC1101_WriteReg(CCxxx0_WOREVT0, (uint8)EVENT0);             // Low byte Event0 timeout.

// 启动 WOR RCosc 校准

// 因为进入休眠后只使用RC频率周期,RC受环境和温度影响较大,所以必须一段时间或者WOR唤醒后重新校准一次时钟.

// 在WOR没启动之前 RC须得先行启动

// tEvent1 时间设置为最大,设置 T_event1 ~ 1.4 ms

CC1101_WriteReg(CCxxx0_WORCTRL, 0x78| WOR_RES);             //tEvent1 =0111

//--RC_CAL =1 自动校准

//halWait(30);                                                //等待校准完成

//CC1101_WriteReg(CCxxx0_WORCTRL, 0x70 | WOR_RES);           // tEvent1 =0111 即 48 (1.333-1.385 ms)

// RC_CAL =0

//CC1101_WriteReg(CCxxx0_RCCTRL1, RCC1);

//CC1101_WriteReg(CCxxx0_RCCTRL0, RCC0);

//把SO口 设置成通知口 当有数据过来时 置低

CC1101_WriteReg(CCxxx0_IOCFG2, 0x06);  //0x24);

CC1101_WriteCode(CCxxx0_SFRX);

CC1101_WriteCode(CCxxx0_SWORRST);      //复位到 事件1

CC1101_WriteCode(CCxxx0_SWOR);         //启动WOR

//  CC1101_WriteCode(CCxxx0_SPWD); //进入断电模式

return 1;

}

最后再来说几个注意事项:

1.       接收端使用的是WOR的时候,发送端一定要使用连续发送模式。

2.       设置好GPIO口,上面的代码中有设置GPIO,GPIO可以作为一个接收指示器。

3.       如果发现经常收到一些乱码,那么你环境的干扰强度太高,建议增加引导码长度,或者使用CCA空闲信道评估。

4.       WOR的使用会导致CC1101进入休眠状态,这种状态可以在给予GPIO口信号来激活,回到空闲状态。

5.       要打开接收中断。

下面我们来看看WOR的一些原理。

上面是一个WOR使用时间的示意图,看得到事件0所占用的时间最长,而WOR就是一个接一个的事件0。

时间的时间长度,在这里面可以参照源代码,要注意WOR_RES值的时间定义有个区间,每个区间都不是和下一个区间刚好相连的。

睡眠的最短时长是依照晶振的频率设定的。26M的时候最短时间为11.08ms。

事件0的时间长度为事件1+空闲模式+接收溢出+休眠时间。下面我们可以看一个电平图:

图上标注的时间就是一个周期的电平变化,事件1激活芯片,然后进入空闲模式,接收扫描,时间溢出,如果有收到数据,那么会延长事件0的时间。

转载于:https://www.cnblogs.com/wanqian/p/3180444.html

CC1101的WOR电磁波唤醒方式用法相关推荐

  1. Android数据存储几种方式用法总结

    Android数据存储几种方式用法总结 1.概述 Android提供了5种方式来让用户保存持久化应用程序数据.根据自己的需求来做选择,比如数据是否是应用程序私有的,是否能被其他程序访问,需要多少数据存 ...

  2. html5 语音唤醒,解锁小爱同学5种唤醒方式,如果你只会语音呼唤,手机白买了...

    如今手机市场的基础配置都差不多,只有比差异化来吸引更多用户.所以各大手机厂商在手机中添加更多手机人工智能化功能.让用户真正感受贴心.黑科技等.例如:苹果手机Siri.华为手机的小艺.魅族的小溪,还有小 ...

  3. Midjourney官方中文版在QQ开启内测申请;“Hi,Siri”将成历史,苹果计划修改语音助手唤醒方式|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  4. Midjourney官方中文版在QQ开启内测申请;“Hi,Siri”将成历史,苹果计划修改语音助手唤醒方式|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  5. ESP8266 Deep-Sleep 模式下的唤醒方式

    ESP-WROOM-02D 模块进入 Deep-Sleep 睡眠:仅 RTC 处于⼯作状态,芯⽚的其他部分掉电. ESP8266 在 Deep-Sleep 模式下支持两种唤醒方式:自动唤醒和外部唤醒. ...

  6. 基于 MSP430 CC1101的WOR的测试

    CC1101配合MSP430 测试正常. /****************************************************************************** ...

  7. 树莓派通过snowboy唤醒引擎(Python2、Python3的都可以),自定义唤醒词、关键字,达到小爱同学、天猫精灵一样的唤醒方式的全套教程

    Python2的方案如下: 1.首先需要下载snowboy的安装包,连接如下: https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/ ...

  8. 天猫精灵 python_树莓派通过snowboy唤醒引擎(Python2、Python3的都可以),自定义唤醒词、关键字,达到小爱同学、天猫精灵一样的唤醒方式的全套教程...

    Python2的方案如下: 1.首先需要下载snowboy的安装包,连接如下: https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/ ...

  9. 参数化的 4 种方式用法总结

    大家好啊,我是大田. 参数化就是用变量代替数据的过程,结合前几天的 Jmeter 打卡内容,总结参数化的4种方式: 1.用户自定义变量 两种方法: 一是测试计划面板中的用户定义的变量设置(用户定义的变 ...

最新文章

  1. Android环境的构建
  2. c语言编写单词位置反转,C语言笔试题答案.docx
  3. 已知项目有风险,作为项目经理接还是不接?
  4. SAP CRM和Cloud for Customer的扩展字段元数据
  5. 什么是网络协议转换器?
  6. 操作系统原理:进程 PV 操作如何计算?全网最全三种前驱图计算类型总结
  7. 在线部署web项目(适用于较大型项目)
  8. LADRC的学习——总概
  9. 【GEE】配置本地python环境
  10. mysql如果中途报错则_Mysql的下载安装全过程(包括中途遇到的问题)
  11. 利用TTL转USB串口在两台PC机间进行文件传输
  12. MySql查询之单表查询 --附练习素材
  13. [转载]郭云深先生解说形意拳经--九要论
  14. win7系统一键还原教程
  15. 一年级课程表(4月18日-4月22日)
  16. win7配置maven环境变量
  17. 服务器的速度没有虚拟主机快,云服务器没有虚拟主机快
  18. C++怎样获取当前系统时间?
  19. 软考 第8章 项目质量管理
  20. Cu50温度传感器的误差分析

热门文章

  1. 9.18meituan面试总结
  2. 设计模式学习5——适配器模式
  3. Robots协议(爬虫协议、机器人协议)
  4. 【IDEA】IDEA中出现下划标红问题应该怎样解决(一种简单方法)
  5. Fail2ban配置ssh防暴力破解
  6. 【106个】医院职能科岗位说明书
  7. FineReport学习(二)——各种报表的制作
  8. 今年的 COSCon 中国开源年会,让我们聊点不一样的~
  9. 力扣1024活动 根据你手中的卡片判断能否合成1024 Java程序
  10. 直播预约丨 微服务x容器开源开发者 Meetup 北京站回顾 PPT 下载