问题描述:
软硬件描述
软件
Boot程序
CAN-FD通信(波特率:500k+2M),采用1ms的轮询接收和发送数据
UDS协议;
STmin =0连续帧时间间隔,连续帧间隔较短;
硬件
芯片型号TLE989X;
现象描述
在OTA过程中,上位机(CANOE)发送36服务(发送数据128Bytes)。上位机发送连续帧后boot未响应上位机(boot应做出正响应或负响应),导致OTA失败。
从CANOE 记录的Log来看,连续帧报文间隔109us;通过Keil仿真可以看到从数据寄存器中读取的数据是有问题的(倒数第二帧的后半部分数据不对)。
问题分析
问题分析一:是否因为CANFD模块接收到的数据没有上传到应用层导致失败
尝试方法一:使用FIFO功能接收数据
尝试结果:无法解决问题。TLE989x 集成的CANFD模块不支持FIFO功能,(FIFO功能仅适用于CAN模块)
尝试方法二:使用中断的方式进行数据的收/发
测试:
测量倒数第二帧发送完成到最后一帧发送完成时长(109us)
测量接收中断运行时长(31.4us)
结果:使用中断可以解决OTA失败的问题。
在使用中断方式进行数据收发时需注意中断运行时长,中断运行时间太长也导致接收丢数据,见下文