am3352分别使用过4.4.113和4.1.6的内核版本,usb转串口芯片采用ch340G厂家官网的驱动,如附件。
测试的方式如下,有两个设备A和B的两个串口相互连接,首先A往B发送带有计数标志的2K的数据,当B接收到了数据后,会校验该数据的完整性和计数是否正确。校验正确后,会把所有B接收到的数据全部发回给A,A接收到了以后,会校验接收到的数据是否为自己所发送的数据。然后发送下一帧。
正常情况下,收发数据都OK。
出错时候的现象如下:当发送某一帧数据时,不能全部把2K的数据完整发送,而且发送的数据一定为32字节的倍数。
跟踪ch340G的驱动,发现他的主要流程是:在发送数据时,调用write函数,里面会提交一个URB给usb子系统,包含32字节数据。当给数据发送完成后,usb子系统会调用驱动的完成函数,在完成函数中继续发送下一个32字节的数据,直到所有的数据都发送完成。当出错时,在中间发送完某一个32字节数据时,不会调用驱动的完成函数,造成后面的数据不能继续发送了。但是具体的原因没有找到。
该现象出现的时间不一定,可能是几分钟,也可能是一两个小时才出现。
测试过内核自带的ch341的驱动,也会出现发送异常的情况。
硬件上,把usb转串口相关的电路飞出来接在其他的cpu的芯片上并没有出现数据收发异常的现象。
有没有大神指导下该怎样定位下问题?谢谢!