求助沁恒工程师:CH341T模拟串口发送溢出!!!

CH341T模拟串口发送溢出: 我用DSP通过串转向CH341T发送数据,波特率2M,发送不间断。发现溢出灯点亮。 分析上位机由接收数据而绘制的图形,发现每2163个数据(一桢图形为2163个数据)就会有一小段图形错误。

分析可得:发生溢出错误时,发送的数据个数没有少(如果数据少了,不够一桢,就不会绘制图形),只是数据值被改变了。

因为布线路图时没进行RDY#(接收就绪)信号采集,现在已不可能进行该针脚判断,故求助沁恒工程师关于CH341T的详细工作原理:

1。CH341T串口接收有一个还是两个缓冲区(仅串口接收,不包括USB接收)??    如果是两个,是不是接满一个缓冲区后,再接收数据转放另外一个缓冲区,而接满的   进行数据打包发送。如此轮流执行。    如果是一个,那么数据缓冲区是多大,以便我发这么多个数据后进行延时,让CH3   41T把缓冲区数据发送出去,之后再继续发送。

2。溢出是怎么回事,为什么溢出后只是数据值被改变了,发送的数据个数没有少????

溢出时,一般是丢数据,只不过串口丢了数据,后面的数据当前前面的补到你的前一帧图形中,CH341内部是双缓冲区,计算机必须在一个缓冲区中满之前将另一个缓冲区中的数据取走,如果计算机的USB很忙,或者串口速度太快,就可能溢出,防止溢出,一是用RDY#引脚判断(可解决所有原因),二是尽量用8位数据不带校验的速度快些,或者适当降低波特率为1.5Mbps,或者增加些延时(不如降低波特率),三是考虑计算机USB是否很忙,是否在同一个USB控制器下接了低速USB设备例如键盘mouse等占了USB带宽,以及画图软件是否占用太多的CPU时间


店小二你好,谢谢你的回复!

你在回复中说:“CH341内部是双缓冲区,计算机必须在一个缓冲区装满之前将另一个缓冲区中的数据取走” 这里您提到缓冲区满之前,计算机必须把另一个缓冲区的数据取走,否则溢出。

请问: 您说的缓冲区是CH341T芯片上的硬件缓冲区还是驱动在上位机上开辟的缓冲区? 1。如果是上位机上的缓冲区,是不是说CH341T芯片硬件速度足够快,即使串口接收2Mbps也不可能发送不完??而CH341T芯片显示溢出是因为上位机应用程序未及时从驱动程序中读取数据,驱动程序缓冲区满后发消息给CH341T芯片告之已满或已溢出,待缓冲区空时再发消息告之已空。请问是不是这样???

2。如果是CH341T芯片上的缓冲区,那么该缓冲区有多大???以便我发够数据后延时。


只有登录才能回复,可以选择微信账号登录