有哪位大神做过CC1101的WOR功能?

2019-07-21 00:46发布

本人在做CC1101的项目,由于接收端要做低功耗处理。看到CC1101有WOR功能,所以就想用这个功能达到低功耗的目的。但是进入WOR模式后,很难接收,或者过很长一段时间才能接收,如果缩短睡眠时间,功耗增大很多。
本人也试过隔一段时间恢复CC1101,但是功耗并不理想,因为接收模式耗电太大了。

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
ryanwong
1楼-- · 2019-07-21 20:05
不好意思,我太高估我自己的打字速度了。
重点来了:
WOR功能:

先来说明一下,功耗和WOR之间应该怎么配置。这里的配置参考了以下一篇文章:
https://max.book118.com/html/2017/0606/111886695.shtm
如果看不明白我接下来说的内容:请参考以上链接。内容相似。

开发步骤:
1、确定发送周期。上文提到,MDMCFG4-0,按照那样配置的话,发送间隔会在5ms。5ms的话更利于唤醒CC1101
2、接收时间必须是发送周期的两倍以上。其实这里不是必要的,往后的话会详细解释
3、确定  唤醒时间  和  休眠时间  的占空比,从而确定功耗。要想功耗达到最低,这里的占空比必须选择0.195%。.............其实这里也不是必要的,往后会详细解释
4、由接收时间和占空比确定两个寄存器的值:MCSM2.Rx_TIME 和 WORCTRL.WOR_RES。
5、确定Tevent0     Tevent0=接收时间/占空比
6、确定Tevent1     Tevent1是起振时间          是“起振“不是”晶振“。

综上所述:
void CC1101_WOR(void)
{
        CC1101ClrRXBuff();          //清空CC1101模块上的接收缓冲区

       
        //EVENT0寄存器的值=(WOREVT1<<8)|WOREVT1
        //公式(数据手册上有介绍):t_EVENT0 = 750/(晶振)*(EVENT0寄存器的值)*(2^(5*WOR_RES))
        //晶振:26M,即26000000.    WOR_RES是WOR可设置最大周期值,简单地说,你希望你的CC1101过多久才醒一次。为了不影响体验,这里选择1.8~1.9秒
        //通过以上公式:得到WOREVT的值。
        WriteReg(CC1101_WOREVT1, 0x87);               
        WriteReg(CC1101_WOREVT0, 0x6B);
        WriteReg(CC1101_WORCTRL, 0x38);
        WriteReg(CC1101_MCSM2, 0x13);                        //可能有人会问,这个寄存器不是选择占空比的吗?你填了0x13,不就选择了1.563%,功耗不就大了吗?没错是的,这里先埋下一个伏笔。
        WriteReg(CC1101_MCSM0, 0x38);                        //这个根据数据手册配置的,据说会降低不少功耗,不过好像没什么作用。
       
        WriteReg(CC1101_IOCFG0, 0x46);                       //细心的朋友会发现,这里填的是0x46,前文的配置为0x06。因为我发现配置成0x06的话,GDO0这个脚一直处于低电平,
        //WriteReg(CC1101_IOCFG2, 0x46);                     //为了得到下降沿,这里配置成0x46,目的是让它反一下相。
                                                                                //(这里有个疑问,配置成0x06的话是产生上升沿吗?讲道理它恢复成正常状态时应该有下降沿,但是好像没有引起中断)
        WriteCmd(CC1101_SCAL);         //校准频率合成器并关闭,这个命令我没搞懂。但是不输入这个命令也没影响
        WriteCmd(CC1101_SWOR);         //正式启动WOR功能
       
}



jermy_z
2楼-- · 2019-07-21 23:59
 精彩回答 2  元偷偷看……
ryanwong
3楼-- · 2019-07-22 05:52
本帖最后由 ryanwong 于 2018-12-4 21:12 编辑

可能有人看到最后 把MCSM2.RX_TIME_RSSI 置1就能把功耗降到这么低,会想:那前面是不是都是废话?
这里,我很负责地告诉你:是的!除了最后的说明,前面的都是废话!!!
为什么,我要绕这么一大圈呢?
因为这些都是我经历过的事情,我跳进去的坑,你们也要跳一边。哈哈哈,我就是这么皮!最后再说一句:我是加了很多天的班,才把功耗降到这么低。所以,胜利属于加班狗协会!!!
正点原子
4楼-- · 2019-07-22 09:29
 精彩回答 2  元偷偷看……
Akon
5楼-- · 2019-07-22 13:22
顶!
BZT
6楼-- · 2019-07-22 16:25
大哥你好,我最近也在学习cc1101。目前基本通信已经调通,但WOR功能完全没有思绪。大哥能否给点例程让我参考一下,真的感激不尽!我的邮箱952169146@qq.com

一周热门 更多>