USB3.0转串口数据丢失问题

lonelyhacker 2018-01-22 11:23:43
大家好!有个问题咨询下。串口通讯

USB2.0 : 在USB2.0转串口的情况下,通讯完全正常。

USB3.0 : 在USB3.0转串口的情况下,通讯偶尔会少收到1个字节的数据。

通讯过程如下:循环以下通讯

for(i = 0; i < 200; i++)
{
上位机: 0xAA 0x00 0x00 0x08
下位机: 0x55 0x00 0x00 0x08 + 8字节数据(共12字节)
上位机:0x5A
下位机:0x5A(此项偶尔会收到)目前就是在3.0的情况下这里会出现问题。
}

已想过几个办法一直没解决。
1:在未收到0x5A的情况下,循环读取0x5A。不管读几次都收不到0x5A
2.在下一个循环之前,读取0x5A,也还是收不到
3.当未收到0x5A的情况下,如果上位机发 0xAA 0x00 0x00 0x08,下位机就会回0x5A 0x55 0x00 0x00 0x08 + 7字节数据。
只有上位机发了0xAA 0x00 0x00 0x08,下位机才会带着0x5A传回来。这样会导致丢掉1字节的数据,一般是回12字节,
因为数据丢失掉0x5A,在丢失的情况下,读15个字节回来,但是下位机还是只回12个字节携带着0x5A。

请问下各位有什么好的办法能帮忙解决的呢?谢谢。



...全文
1207 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2018-01-23
  • 打赏
  • 举报
回复
以我之前使用USB转串口的经验, 设备驱动高级属性中有一个叫 延迟计时器的参数, 调到最小值,可以提高响应 USB转串口 为提高USB端口使用效率, PC机驱动会缓冲一段时间的数据,然后发送到USB设备再发出, 接收时USB设备也是会缓冲一段时间的数据,然后组包发送到PC机, 这种FIFO机制可以大大降低端口使用率, 这个延迟计时器就是调整这个延迟时间的 另外建议程序中做超时判断, 为下位设备响应留出响应时间
lonelyhacker 2018-01-22
  • 打赏
  • 举报
回复
引用 1 楼 cvbtvbwu 的回复:
你试过用串口监控工具看下,是否真正丢失了数据吗?
是的。串口监控上是没有收到数据的。
赵4老师 2018-01-22
  • 打赏
  • 举报
回复
参考《编译原理》中的词法分析和有限状态自动机。
叶恭介叶恭介 2018-01-22
  • 打赏
  • 举报
回复
你试过用串口监控工具看下,是否真正丢失了数据吗?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧