本帖最后由 tyw 于 2018-4-22 16:18 编辑
满足了TI官网cc1101手册上说的条件,可是仍然无法进入wor。
cc1101官方手册关于swor命令写明了swor是:
Start automatic RX polling sequence (Wake-on-Radio) as described in Section 19.5 if WORCTRL.RC_PD=0.
于是参照网上的例子,配置如下:
CC1101_Set_Idle_Mode( ); //空闲模式
CC1101_Write_Reg(CC1101_MCSM2, 0x10); //RX_TIME 0 占空比最大,查表得占空比为1.95%
// Enable automatic FS calibration when going from IDLE to RX/TX/FSTXON (in between EVENT0 and EVENT1)
//在TX,RX后 自动校准 XSOC时限 (10) 149-155uS
CC1101_Write_Reg(CC1101_MCSM0, 0x18); //校准 FS_AUTOCAL[1:0] 01 重IDLE转到TX OR RX模式时
//
//写入 事件0 时间
WOREVT1=(uint8_t)(EVENT0>>8);
WOREVT0=(uint8_t)EVENT0;
CC1101_Write_Reg(CC1101_WOREVT1,WOREVT1); // High byte Event0 timeout
CC1101_Write_Reg(CC1101_WOREVT0,WOREVT0); // Low byte Event0 timeout.
// 启动 WOR RCosc 校准
// 因为进入休眠后只使用RC频率周期,RC受环境和温度影响较大,所以必须一段时间或者WOR唤醒后重新校准一次时钟.
// 在WOR没启动之前 RC须得先行启动
// tEvent1 时间设置为最大,设置 T_event1 ~ 1.4 ms
CC1101_Write_Reg(CC1101_WORCTRL, 0x78); //tEvent1 =0111
//CC1101_WriteReg(CCxxx0_WORCTRL, 0x70 | WOR_RES); // tEvent1 =0111 即 48 (1.333-1.385 ms)
// RC_CAL =0
//把SO口 设置成通知口 当有数据过来时 置低
CC1101_Write_Reg(CC1101_IOCFG2, 0x06); //0x24);
CC1101_Write_Cmd(CC1101_SFRX);
CC1101_Write_Cmd(CC1101_SWORRST); //复位到 事件1
CC1101_Write_Cmd(CC1101_SWOR); //启动WOR
理论上来说已经进入wor了(实际上我也不知道进入了没有),为了检测它是否进入了,参照手册Application Note AN047 ,里面写到 To exit WOR mode, an SIDLE strobe must be issued. 我的理解就是假如它进入了wor那么必须发送SIDLE命令才能强制它醒过来,于是我假设它进入了wor,我在配置wor之后写了CC1101_Set_Mode( RX_MODE )(没有强制进入IDLE);结果它能接收到数据,,意思就是cc1101并没有进入wor,不知道我理解的对不对!!!! |