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

时间:2014-03-05 09:22:43

标签: c++ windows serial-port usb virtual-serial-port

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

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

  • 我可以正确连接到端口。

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

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

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

我不是Windows程序员,因为我处理微控制器。因此,在追求这个问题方面的一些帮助将会有很大的帮助。

最诚挚的问候,

-Varun

这是Reference

1 个答案:

答案 0 :(得分:0)

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

示例代码段:

while(1)
    {
        ClearCommError((HANDLE)*h_drv, (LPDWORD)&Err, &CST);

        if((CST.cbInQue >0)||(count >1000000))
        break;

        count++;
    }