问题现象一、在确认数据端正常工作且发送数据情况下,使用CC1101进行数据接收,过一段时间之后CC1101接收不到数据了。
原因及解决方法:这个问题比较诡异,应该是CC1101的芯片设计问题:锁相环漂移,由此造成的频率合成器的接收频率、带宽位置变化。解决该问题的方法也很简单,定期进行频率校准。既可以使用Strobe命令进行手动校准:SCAL,亦可在MCSM0.FS_AUTOCAL设置为1,然后在程序中定期的执行:SIDLE加SRX或SRT命令,重新进行频率校准。
参考地址:http://bbs.csdn.net/topics/390060694
问题现象二、配置GDO2管脚为0x07,即当CC1101接收到数据并CRC校验正确之后,管脚Assert,但实际调试过程中,经常出现,GDO2管脚不正常电平跳变,提示有数据接收并校验正确,但此时去读RXBYTES(0x3B)这个状态寄存器时,读出的数值为0是无数据的,而直接读取RX FIFO又有数据(之前已经用SFRX命令冲掉了RX FIFO数据的)。
原因及解决方法:该方法目前不知道是不是硬件电路设计不够稳定的原因,我的解决方法是,检测到GDO2管脚电平Assert后,首先延时1000us(至少500us,实测少于该数值,读读取的RXBYTES寄存器数值不稳定不正确),然后读取RXBYTES寄存器,如果数值不为0,再读取RX FIFO中的数据。
问题现象三、调试的时候,配置GDO0为0x06。进行数据发送的时候,首先将长度数据写入TX FIFO,然后Burst方式连续写入要发送的数据,之后再将CC1101转换到TX模式。根据手册上说的,GDO0会首先Assert表示已经发送/收到了同步字,然后管脚电平De-Assert指示数据封包已经发送完毕。所以采用while(GDO2_IN);的方式进行判断,但却始终卡在这里死循环。就此问题,我在网上看到很多网友也遇到了类似的疑问,这里正好也说一下;
原因及解决方法:在CC1101 User Guider的第33页有这样一句话:The burst access method expects one header byte and then consecutive data bytes until terminating the access by setting CSn high。问题大多都出在Burst读写后,没有拉高CSN管脚电平,而是又直接进行其他命令操作。解决方法即Burst方式读写之后,立即将CC1101的CSN管脚电平上拉,等待至少10us,然后再进行STX等操作,这样芯片就能正常地将数据发送出去了。
问题现象四、正确地进行了CC1101配置,然后调用CC1101进行数据发送时,却发现不能发送数据,原因之一可能是设置的数据速率过低。