2014-03-05 70 views
0

我使用嵌入式硬件(通过TI:Piccolo Control Stick xxx69),它使用FTDI USB至串行转换器硬件。USB串行虚拟COM端口:读取不工作,但写入工作

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

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

  • 我能够从应用程序/ PC发送数据到硬件,并且它被正确接收。 (所以,PC上的Tx工作正常),应用程序首先使用createfile(... ... ...) API打开连接,然后使用writefile(.. ... ..) windows apis直接写入端口。令人惊讶的是,我无法从串口读取应用程序。当我打电话给readfile(... ... ...) api时,它将状态返回为TRUE,但读取的是零字节。我尝试使用API​​监视软件,它显示内核API Ntreadfile(... ... ...),返回错误为STATUS_TIMEOUT" [0x00000102]。这是令人惊讶的,因为写作能够读取虽然数据在线没有。

的数据就行了,因为当我正常使用超级终端软件,我能够正确读取数据形成控制器,它是可见的。 [在控制器方面,没关系,因为我们可以看到超级终端上的数据。

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

最好的问候,

-Varun

这里是一个Reference

+1

这是完全正常。程序员需要修改程序中的SetCommTimeouts()调用。 –

+0

Hans,SetCommTimeouts()未用于我的写入功能。 [虽然我正在使用为VC6开发的遗留代码]。你认为超时只适用于读取...顺便说一句,我增加了设备注册表项的超时时间,然后调用等待指定的时间,但结果仍然是零字节读取。请尽可能详细说明你的提示! –

+0

注册表项地点:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Enum \ FTDIBUS \ VID_0403 + PID_A6D0 + TIU81CWRB \ 0000 \设备参数:MinReadTimeout –

回答

0

问题被解决。我不得不等待InQueue> 0(意味着接收缓冲区中至少有1个字节)或超时(作为安全出口)结束。它会阻止通话,但目前对我的应用程序无影响。 waitComm()在我这里工作不好。

示例代码段:

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

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

     count++; 
    }