打印

cc1101电磁波唤醒模式问题

[复制链接]
4821|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
e08610318|  楼主 | 2012-10-28 09:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我测试过,MRFI进入WOR模式后,短时间内可以通过其他设备唤醒,但是时间长了,就唤不醒了,打断点发现MRFI无法接受到数据。已经排除诸如中断没开等问题。
    调试的时候,当我发现MRFI无法唤醒后,我在定时中断里面通过仿真器修改变量值使程序执行wor模式初始化语句后,发现MRFI又可以被唤醒了。
     RCOSC校准开了的,WOR模式中,如果RSSI低于阈值MRFI会自动进入SLEEP状态。

相关帖子

沙发
chinarfstar| | 2012-10-29 17:30 | 只看该作者
可以把相关问题邮箱到jordum@szrfstar.com

使用特权

评论回复
板凳
e08610318|  楼主 | 2012-11-1 08:53 | 只看该作者
2# chinarfstar
这是谁的邮箱呢?   问题已经解决掉了,所以结贴了

使用特权

评论回复
地板
涵潇舒雅| | 2014-6-26 09:48 | 只看该作者
e08610318 发表于 2012-11-1 08:53
2# chinarfstar  
这是谁的邮箱呢?   问题已经解决掉了,所以结贴了

楼主 能否参考一下您的WOR模式初始化?

使用特权

评论回复
5
e08610318|  楼主 | 2014-6-26 10:50 | 只看该作者
涵潇舒雅 发表于 2014-6-26 09:48
楼主 能否参考一下您的WOR模式初始化?

还是用软件WOR吧,硬件WOR太麻烦。

使用特权

评论回复
6
涵潇舒雅| | 2014-6-26 10:54 | 只看该作者
e08610318 发表于 2014-6-26 10:50
还是用软件WOR吧,硬件WOR太麻烦。

这是参考别人的
u8 CC1101_InitWOR(u32 Time)
{
        //uint16 T_Event0=60; //把 EVENT0的时间设定为1S
        u32 EVENT0=0;
        u16 WOR_RES=1;
        u16 WOR_rest=1; //2^(5*WOR_RES)的值
        u8 t;

        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;
        if(!WOR_RES)
            WOR_rest=1;
        else
        {
            for(t=0;t<(5*WOR_RES);t++)
                WOR_rest *= 2;
        }
        EVENT0 = F_xosc/1000;
        if(EVENT0>Time)
        {
                EVENT0 = EVENT0*Time;
                EVENT0 = EVENT0/(750*WOR_rest);
        }
        else
        {
                EVENT0 = (Time/(750*WOR_rest))*EVENT0;
        }
       
        halSpiStrobe(CCxxx0_SIDLE); //空闲模式

        halSpiWriteReg(CCxxx0_MCSM2, 0x10); //RX_TIME 0 占空比最大
        //在TX,RX后 自动校准XSOC时限 (10) 149-155uS
        halSpiWriteReg(CCxxx0_MCSM0, 0x18); //校准 FS_AUTOCAL[1:0] 01 重IDLE转到TX OR RX模式时
        //写入 事件0时间
        halSpiWriteReg(CCxxx0_WOREVT1, (u8)(EVENT0>>8)); // High byte Event0 timeout
        halSpiWriteReg(CCxxx0_WOREVT0, (u8)EVENT0); // Low byte Event0 timeout.
        //启动 WOR RCosc校准
        //因为进入休眠后只使用RC频率周期,RC受环境和温度影响较大,所以必须一段时间或者WOR唤醒后重新校准一次时钟.
        //在WOR没启动之前 RC须得先行启动
        // tEvent1时间设置为最大,设置 T_event1 ~ 1.4 ms
        halSpiWriteReg(CCxxx0_WORCTRL, 0x78| WOR_RES); //tEvent1 =0111
//          把SO口 设置成通知口 当有数据过来时 置低
        halSpiWriteReg(CCxxx0_IOCFG2, 0x06); //0x24);
       
        halSpiStrobe(CCxxx0_SFRX);
       
        halSpiStrobe(CCxxx0_SWORRST); //复位到 事件1
        halSpiStrobe(CCxxx0_SWOR); //启动WOR
       
        // CC1101_WriteCode(CCxxx0_SPWD); //进入断电模式
        return 1;

}
电流能看出有突变来,应该是进入wor模式了,但是接收不到数据,GDO2没有电平变化;如果按照你说的软件怎么做?用430定期唤醒无线吗??

使用特权

评论回复
7
e08610318|  楼主 | 2014-6-27 16:51 | 只看该作者
涵潇舒雅 发表于 2014-6-26 10:54
这是参考别人的电流能看出有突变来,应该是进入wor模式了,但是接收不到数据,GDO2没有电平变化;如果按 ...

看情况,你的GDO引脚应该配置的没问题的。
那么你就要考虑:
你的设备的硬件WOR占空比是多少,实际RX的时间是多少,其次你唤醒的设备发送的数据一帧的持续时间是多少,是否满足接收要求

硬WOR是我开始就使用的,后来和别的公司技术牛人交流以后,人家都笑了,他们都不用硬件WOR,都用软件WOR。后来我也决定用软WOR了。软WOR不用考虑那么多配置,自由设定占空比,而且430的定时器CCRx能够实现灵活控制,比较方便。唯一缺点就是硬件WOR的一些功能需要你用软件来实现,比如RSSI达不到要求时自动进入SLEEP,这个就需要软件来实现了。

使用特权

评论回复
8
涵潇舒雅| | 2014-7-1 16:25 | 只看该作者
e08610318 发表于 2014-6-27 16:51
看情况,你的GDO引脚应该配置的没问题的。
那么你就要考虑:
你的设备的硬件WOR占空比是多少,实际RX的时 ...

找到问题了,因为我参考别人的程序,不小心把寄存器的值改了,所以通信不上,现在没有问题了

使用特权

评论回复
9
hugo0chen| | 2016-1-15 12:14 | 只看该作者
设备占空比搞错了,即RXTime设置问题,导致不能够唤醒。

使用特权

评论回复
10
donsbin| | 2016-6-29 10:56 | 只看该作者
e08610318 发表于 2014-6-27 16:51
看情况,你的GDO引脚应该配置的没问题的。
那么你就要考虑:
你的设备的硬件WOR占空比是多少,实际RX的时 ...

软件WOR?这样不就额外增加了功耗吗?我倒是希望通过1101唤醒MCU

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

67

主题

310

帖子

12

粉丝