CC1101调试和使用中疑难问题总结

问题现象一、在确认数据端正常工作且发送数据情况下,使用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进行数据发送时,却发现不能发送数据,原因之一可能是设置的数据速率过低。


  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值