在使用的时候,会突然无法接收到数据,但是能正常发送数据,得重启芯片才能恢复。出现的概率不大,但是对于产品使用有一定的不稳定因素。请问有什么方法可以排查问题,或者有解决方法吗?
Viki Shi:
是否排查过RX buffer?
user5782616:
回复 Viki Shi:
请问RX buffer在什么情况下会引起这个问题?
Viki Shi:
回复 user5782616:
看一下是不是有溢出
user5782616:
回复 Viki Shi:
RXbuffer只有在接收数据超长才有可能溢出,现在在进行测试。请问还有其他可能的情况吗?比如TX 与RX切换的时候是否需要一些操作,否则会接收不到数据?
user5782616:
回复 Viki Shi:
你好,我把RXcallback函数内的rxbuffer人为的造成数据溢出,在测试一天的情况下,没有出现不能接收的情况。请问还有什么可能的原因?
Viki Shi:
回复 user5782616:
暂时没有想法,不过RX TX的切换有工程师提供过例程,参考这边:e2echina.ti.com/…/106253
user5782616:
回复 Viki Shi:
EasyLink在调用EasyLink_receiveAsync以后,突然某一瞬间进入发送,会不会出现芯片不接收?
Viki Shi:
回复 user5782616:
也有可能,建议按照上面的例程进行RX TX 切换
user5782616:
回复 Viki Shi:
EasyLink_receiveAsync(rxDoneCb, 0);//// /* Wait 300ms for Rx */// if(Semaphore_pend(rxDoneSem, (300000 / Clock_tickPeriod)) == FALSE) //delete by barbara if(Semaphore_pend(rxDoneSem, (100000 / Clock_tickPeriod)) == FALSE) //add by barbara { /* RX timed out abort */ if(EasyLink_abort() == EasyLink_Status_Success) { /* Wait for the abort */ Semaphore_pend(rxDoneSem, BIOS_WAIT_FOREVER); // 请问这里在abort成功后,为什么要一直等待接收成功信号量 ? } } }
user5782616:
回复 Viki Shi:
请问调用
void ReBoot(void){ asm("CPSID F");// asm("CPSID F");// asm("LDR R0, =0xE000ED0C"); asm("LDR R1, =0x05FA0004"); asm("STR R1, [R0]"); while(1);}
这个函数复位芯片,有时候会复位不成功,需要手动拉reset引脚才行,这是什么原因?