测试CC1310通信的过程中发现下面的问题,使用studio测试时,在距离较远或信号不佳的情况下,studio可以打印接收到的CRC校验错误的数据包,在使用例程测试的时候,发现即便是丢包严重,也不会打印出错的数据包,请问一下这个是在哪边去处理的,因为我需要拿到出错的包,判断重传或校验。
请问是否是rfc_CMD_PROP_RX_ADV_t 的.pktConf.bUseCrc = 0x1,去处理的,在EasyLink.c下面的接收函数EasyLink_receive及EasyLink_receiveAsync处拿不到出错的包。
Felix ZF:
你可以在EasyLink.c文件中,
asyncCmdHndl = RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropRxAdv, RF_PriorityNormal, rxDoneCallback, EASYLINK_RF_EVENT_MASK);
语句之前,加入
EasyLink_cmdPropRxAdv.pktConf.bUseCrc = 0;
试试能否收到crc error的数据包
da qin zheng sheng:
crc检验在接收方硬件自动处理的吧?前提是能够收到包数据,尽管可能是乱包。
fei chen10:
回复 da qin zheng sheng:
.pktConf.bUseCrc = 0x0,.pktConf.bCrcIncSw = 0x0,.pktConf.bCrcIncHdr = 0x0,
这三个配置为0,可以接收到误码包
fei chen10:
回复 Felix ZF:
Felix ZF,你好
还有点问题请教下
CC1310 设备A给B发送数据,B接收到数据会给A一个答复吗,还是需要像rfWsnConcentrator demo那样发送数据包响应一下?
如果没有答复,发送的数据包丢失,有什么好的办法去处理重传呢
Eggsy Pang:
回复 fei chen10:
B接收到数据不会主动给A一个答复,需要自己发数据包。
方法可以 用定时器定时一下,在规定时间内没收到,重传,再定时,重复三次(自己定义尝试次数),还是没收到,放弃发送
Felix ZF:
回复 fei chen10:
这种ack需要通过程序来实现
一般的流程时发送方发送完数据后,切换到接收状态等待ack
接收方在收到正确的数据包后回复一个ack
发送方在设定时间内如果收到ack,则知道对方已经正确接收到数据了;如果在设定时间内一直都没收到ack,则判定对方没有收到数据,需要重发