我们做的一款户外产品,使用CC1310做遥控接收。在测试极限温度运行时,发现CC1310在高温50C和低温-40C,都会出现无法接收遥控信号的现象,如果此时将CC1310重新断电复位,又可以恢复正常,可接收到遥控信号,如果继续在这种温度下放置约1~2小时,又会出现不能接收遥控信号的问题。整个过程遥控器处于常温条件下,可以排除遥控器的问题。
我们使用TI DEMO程序,让CC1310做为发射器,然后用频谱仪测试其发射频率,发现CC1310在这种温度下放置一定时间后,频率会偏离初始设置频率约800K~1MHz,所以我们认为整机无法接收遥控的问题是由于频率偏了导致的。
问题:1.请协助分析是否是由于频偏造成的无法接收。
2.请协助提供解决办法。
谢谢!
Viki Shi:
射频芯片在温度变化中,一般都会有温漂,或者工作不正常等。
正常在打开TX/RX过程中(实际应用场景),会做校准。【复位重新校准芯片,或用RF_close,rf_open开关一下RF核】
Seven Huang:
回复 Viki Shi:
我们试过这种方法,不好用,没什么效果,还是会出现同样的问题。
Seven Huang:
回复 Viki Shi:
现在有一个方案(方案2)基本解决了这个问题,但是还有如下问题希望能够搞清楚:
1.我现在的方案是用easylink异步的方式,会偶尔丢包,相同测试条件下,easylink的同步方式不会丢包,请问有没有同步的解决方案?
2.现在的方案是否存在其他隐患?
3.这个问题及解决方案,TI是否有相关的文档供参考?附:各方案软件代码如下:
原方案代码(easylink同步,高低温测试RF会死机,接收不到信号,常温下13m丢包率为0):MyrxPacket.absTime = 0;EasyLink_Status result = EasyLink_receive(&MyrxPacket);if (result == EasyLink_Status_Success){/* Toggle LED2 to indicate RX */DealRxPack(&MyrxPacket);}else{}
方案1(easylink同步,高低温测试不通过,RF会死机):MyrxPacket.absTime = 10;EasyLink_Status result = EasyLink_receive(&MyrxPacket);if (result == EasyLink_Status_Success){/* Toggle LED2 to indicate RX */DealRxPack(&MyrxPacket);}else{}
方案2(easylink异步,高低温测试ok,但是会导致个别数据包丢失,目前13m距离测试的丢包率为0.172%):EasyLink_receiveAsync(rxDoneCb, 0);
///* Wait for Rx */if(Semaphore_pend(rxDoneSem, g_waitTick) == FALSE){/* RX timed out abort */if(EasyLink_abort() == EasyLink_Status_Success){/* Wait for the abort */Semaphore_pend(rxDoneSem, BIOS_WAIT_FOREVER);}}RF_yield(rfHandle);
Viki Shi:
回复 Seven Huang:
需要跟同事讨论一下,有消息会上来更新
Viki Shi:
回复 Viki Shi:
1、鉴于重启RF不起效,那solution2就挺好的,此配置就我们看没发现隐患。
2、目前没有同步的解决方案或相关文档
Seven Huang:
回复 Viki Shi:
1.方案2中的RF_yield和调用RF_close,再调用RF_Open有什么区别?
Seven Huang:
回复 Viki Shi:
请问这个问题出现的root cause是什么?
Viki Shi:
回复 Seven Huang:
原因一开始就有说,“射频芯片在温度变化中,一般都会有温漂,或者工作不正常等” 此现象并不罕见
Seven Huang:
回复 Viki Shi:
好的,明白了。我还有个关于软件的问题,同步模式中
MyrxPacket.absTime = 10;
EasyLink_Status result = EasyLink_receive(&MyrxPacket);
这个absTime 是什么作用?是否可以通过给它设置一个合适的值来解决目前这个问题?