1、使用的starterware 02.00.01.01版本,芯片AM3354。
2、测试情况:通过AM3354网口1、网口2同时循环向PC发送大量数据,采用UDP方式,电脑用wareshark抓取数据。总是在发送一段时间后(时间不固定基本是1-3分钟左右)就会出现cpswif_tranmit()函数中txch-freenum为0,没有可用的发送缓冲描述符可用而导致数据无法发送。
Shine:
请问单个网口有这个问题吗?
weide lin:
回复 Shine:
单网口工作现象也一样。
经过增加串口打印发现现象是在cpswif.c的cpswif_transmit()函数中,
判断if(pbuf_clen(puf)>txch->free_num){
return ERR_MEM;
}
检测发现txch->free_num=0;没有可用的发送缓冲器描述符了。
另一种尝试,如果在cpswif_transmit()函数中增加串口打印信息,出现该现象的时间会推迟,由1-3分钟,变得更久一点才出问题,感觉就是减小发送数据的频率,出现的时间就会晚一点,但是还是总会出现这个问题。
weide lin:
进一步分析,后续数据发送不出去是因为EOQ未置位,导致cpswif_transmit()中判断EOQ位不满足,而无法赋值tx0hdp。
在这种情况下的打印信息可以看出是出现了主机错误TX Host Error ,代码是0110- Packet Length Error (sum of buffers is less than packet
length) 。手册里面说出现主机错误,Host error Interrupts require hardware reset in order to recover.
如果复位不满足项目应用,我现在应该怎么办呢,如何避免出现主机错误呢?有什么好的预防措施吗?
Shine:
回复 weide lin:
抱歉,我们不再提供starterware的技术支持了,建议使用新版本的RTOS SDK。
e2e.ti.com/…/3525528