【发布时间】:2013-12-12 18:59:14
【问题描述】:
我正在打开一个 USB 设备:
使用CreateFile进行通信:
HANDLE hUsb = CreateFile("\\.\LCLD9",
GENERIC_READ | GENERIC_WRITE,
0,
null,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
调用成功(即 hUsb 不等于 INVALID_HANDLE_VALUE)。但接下来是时候对每个串行端口做我们所做的事情了:
-
SetupComm(设置接收和传输缓冲区大小) -
SetCommState(设置流控、波特率等) -
SetCommTimeouts(设置超时)
每个调用都使用 1 的 GetLastError 代码。例如:
SetupComm(hUsb, 1024, 1024);
为什么在使用“USB”串行设备时配置串行设备的操作失败,但在使用“虚拟 COM 端口”时工作? USB 设备是否不支持此类波特率、缓冲区、流量控制和超时?
如果这是通用串行设备的限制/功能,我如何检测到句柄指的是 “通用串行设备”,而不是 “COMM 端口”时间>?例如,用户是指定使用哪个端口的人:
- \.\COM5
- \.\LCLD9
与通用串行总线串行设备通信时失败的其他串行功能:
-
GetCommModemStatus(错误代码为 1) -
ReadFile(错误代码为 6) -
PurgeComm(错误代码为 6) -
WriteFile(错误代码为 6)
这引出了一个更大的问题,一旦使用CreateFile 打开 USB 设备,您如何与它通信?
【问题讨论】:
-
是的,您的设备可能显示为 USB 设备,但也暴露了 COM 端口。查看“端口”下的设备管理器,假设您安装了正确的驱动程序,您可能会看到与 USB 接口关联的 COM 端口。
标签: windows serial-port usb createfile