USB串行虚拟COM端口:读取不工作,但写入工作

USB Serial Virtual COM Port : Read not working but write works

本文关键字:工作 读取 虚拟 COM 端口 USB      更新时间:2023-10-16

我使用嵌入式硬件(由TI提供:Piccolo Control Stick xxx69),该硬件使用FTDI usb到串行转换器硬件。

在PC上,我有一个简单的VC++应用程序,它试图通过虚拟COM端口(VCOM:通常是COM7)与硬件通信。

  • 我能够正确连接到端口。

  • 我能够将数据从应用程序/PC发送到硬件,并且接收正确。(因此,PC上的Tx工作正常),应用程序首先使用createfile(... ... ...)API打开连接,然后使用writefile(.. ... ..)windows API直接写入端口。

  • 令人惊讶的是,我无法从串行端口读取到应用程序。当我调用readfile(... ... ...)api时,它返回TRUE状态,但读取了ZERO字节。我尝试使用API监控软件,该软件显示内核APINtreadfile(... ... ...),返回错误为STATUS_TIMEOUT" [0x00000102]。这是令人惊讶的,因为写有效,但读无效,尽管数据在线。

数据在线,因为当我使用普通的超级终端软件时,我能够从控制器中正确读取数据,并且它是可见的。[在控制器方面,一切都很好,因为我们可以在超级终端上看到数据。

我不是windows程序员,因为我处理的是微控制器。因此,在处理这一问题方面提供一些帮助将是非常有帮助的。

谨致问候,

-Varun

这是一个参考

问题已解决。我不得不添加等待,直到InQueue>0(这意味着接收缓冲区中至少有1个字节)或超时(作为安全出口)结束。它会阻塞调用,但目前对我的应用程序来说还可以。waitComm()在这里对我不起作用。

示例片段:

while(1)
{
ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST);
if((CST.cbInQue >0)||(count >1000000))
break;
count++;
}