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

2019-07-21 00:46发布

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

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
ryanwong
1楼-- · 2019-07-21 02:36
好了,前文挖了不少坑,现在要填一下了。
1、说到WOR配置时,详细说明了开发步骤。
其实,这个开发步骤并不是必要的,或者不是一定要遵循的。我们开发产品的,第一个考虑的时低功耗问题,如果你的产品做得再牛,体验感再好,
只要功耗没有将下来,都没用,除非你的产品能毁灭地球。
所以我们先确定的是占空比,为了达到最低功耗,占空比选择0.195%。发送周期并不关心,目前发送周期最短5ms。
显然,根据上文给出的链接介绍,接收周期要比发送周期小很多。

2、现在说一下WriteReg(CC1101_MCSM2, 0x13);的伏笔
如果这里填0x06的话,功耗还是会在40uA左右。和链接的文章计算的差不多。
我觉得仍然很大,于是又寻找了各种文章,各种人,供应商,或者淘宝卖家。这里重点批评淘宝卖家,我把程序发给他,让他看一下配置,结果我怀疑他根本
没看,来来回回一直和我说是不是哪里漏电。拜托,我的单片机连接模块的引脚都模拟输入了(除了CS,和GDO0),只接了CC1101,其它什么都没接,哪来的漏电。
问我哪里买的模块,我说另一家的,然后就不停攻击那家公司。把自己的产品说得很NB。其实都一样。

好了,对不起,不废话了。
我在数据手册找到了CC1101电气特性。
微信截图_20181204205106.png
画红框的那里,8.8uA。
微信图片_20181204204926.png

具体我不翻译了,根据提示,我将MCSM2.RX_TIME_RSSI 置1。这里简单解释一下,当8个电磁波周期内没有接收到数据,那么判断为接收超时(翻译不准确),这个位是在WOR功能下,
变相地,极限地 缩短接收时间,所以功耗才能降到8uA。选择配置为0x13,纯属是应为体验了一下接收效果,0x13是最佳的。(后面这一句话不是很精确)

这里再次批评淘宝卖家,还说什么,正品的芯片功耗能到达5uA,我休眠模式下还1uA不到呢?数据手册写明是8uA,蒙谁呢?话说,我还真被他蒙了,让我私下给他转30,两个CC1101,包邮。
结果我到他店里看的时候,是另一个版本的模块,两个模块加起来,把运费也加起来,也不过20块。哼,坑货。
正点原子
2楼-- · 2019-07-21 04:05
 精彩回答 2  元偷偷看……
ryanwong
3楼-- · 2019-07-21 06:07
正点原子 发表于 2018-11-23 02:17
帮顶

原子哥,为什么你帮顶后又把我的贴子删掉?
ryanwong
4楼-- · 2019-07-21 06:29
正点原子 发表于 2018-11-23 02:17
帮顶

不好意思没看到。。。
ryanwong
5楼-- · 2019-07-21 09:21
 精彩回答 2  元偷偷看……
ryanwong
6楼-- · 2019-07-21 15:10
本帖最后由 ryanwong 于 2018-12-4 20:38 编辑

对不起,晚了点。
首先:由于篇幅的原因,我只把CC1101的某些配置发出来
把基本配置上传上来先
寄存器配置:
static const unsigned char CC1101InitData[30][2]=
{
  {CC1101_IOCFG0,      0x06},                            //这里是GDO0的收到数据就产生中断的配置
  {CC1101_FIFOTHR,     0x47},
  {CC1101_PKTCTRL0,    0x05},
  {CC1101_CHANNR,      0x01},
  {CC1101_FSCTRL1,     0x0B},
  {CC1101_FSCTRL0,     0x00},   //    Frequency synthesizer control.
  {CC1101_FREQ2,       0x10},
  {CC1101_FREQ1,       0xA7},
  {CC1101_FREQ0,       0x62},
  {CC1101_MDMCFG4,     0x7B},                             //这里比较重要的是 MDMCFG4 - 0,这几个寄存器,其实我不知道这是什么意思,但是这样配置的话,发送端发送周期会下降至5ms
  {CC1101_MDMCFG3,     0x83},                             //按照其他文章配置的话,发送周期将会到达100ms,发送周期太长的话,接收端不好接收数据
  {CC1101_MDMCFG2,     0x93},                             //这里的“发送周期”不是指连续发送,而是每次只发几个字节,用来唤醒CC1101。(这里表述不清楚,真是不好意思)
  {CC1101_MDMCFG1,     0x23},   //    Modem configuration.                                        //其余的和网上的配置差不多
  {CC1101_MDMCFG0,     0xA4},   //    Modem configuration.
  {CC1101_DEVIATN,     0x15},
  {CC1101_FREND1,      0x56},   //     Front end RX configuration.
  {CC1101_FREND0,      0x10},   //     Front end RX configuration.
  {CC1101_MCSM0,       0x18},
  {CC1101_FOCCFG,      0x16},
  {CC1101_BSCFG,       0x6C},   //      Bit synchronization Configuration.
  {CC1101_AGCCTRL2,    0x43},   //   AGC control.
  {CC1101_AGCCTRL1,    0x40},   //   AGC control.
  {CC1101_AGCCTRL0,    0x91},   //   AGC control.
  {CC1101_FSCAL3,      0xA9},
  {CC1101_FSCAL2,      0x0A},
  {CC1101_FSCAL1,      0x00},
  {CC1101_FSCAL0,      0x11},
  {CC1101_TEST2,       0x81},
  {CC1101_TEST1,       0x35},
  {CC1101_MCSM1,       0x3B},
初始化函数:  //以下是初始化函数的操作,值得注意的是这里配置了地址。一般CC1101选择信道就可以了。我也是跟着别人配置的
void cc1101Init(void)
{
    unsigned char i;
        SPI_GPIO_Init();
    Reset();   
    for(i=0;i<0xff;i++);
    for(i=0;i<0xff;i++);

    for( i = 0; i < 30; i++ )                //28
    {
        WriteReg(CC1101InitData[0],CC1101InitData[1]);
    }
    //cc1101_mode(RX_MODE);
        CC1101SetAddress( 0x05, BROAD_0AND255 );
        CC1101SetSYNC( 0x8799 );
        WriteReg(CC1101_MDMCFG1,   0x72); //Modem Configuration
        
        WriteMultiReg(CC1101_PATABLE, PaTabel, 8 );
        
        i = ReadStatus( CC1101_PARTNUM );//for test, must be 0x80
    i = ReadStatus( CC1101_VERSION );//for test, refer to the datasheet
        
        CC1101SetTRMode(RX_MODE);
}


unsigned char PaTabel[8] = { 0xc0, 0xC8, 0x84, 0x60, 0x68, 0x34, 0x1D, 0x0E};

一周热门 更多>