我正在打开一个 USB 设备:
用于通信使用CreateFile
:
HANDLE hUsb = CreateFile("\\.\LCLD9",
GENERIC_READ | GENERIC_WRITE,
0,
null,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
0);
调用成功(即hUsb不等于INVALID_HANDLE_VALUE
)。但接下来是时候对每个串行端口执行我们所做的操作了:
-
设置通讯(设置接收和传输缓冲区大小)
-
设置通讯状态(设置流量控制、波特率等)
-
设置通讯超时(设置超时时间)
每个调用都会返回一个获取最后一个错误()的代码1
. E.g.:
SetupComm(hUsb, 1024, 1024);
为什么使用“USB”串行设备时配置串行设备的操作会失败,而使用“USB”串行设备时配置串行设备的操作却可以“虚拟COM端口”? USB 设备不支持这样的波特率、缓冲区、流量控制和超时吗?
如果这是通用串行设备的限制/功能,我如何检测到句柄引用了“通用串行设备”,而不是一个“通讯端口”?例如,用户是指定使用哪个端口的人:
与通用串行总线串行设备通信时失败的其他串行功能:
-
GetCommModemStatus(错误代码为1)
-
ReadFile
(错误代码6)
-
PurgeComm
(错误代码6)
-
WriteFile
(错误代码6)
这就引出了一个更大的问题,一旦 USB 设备被打开,你如何与它通信?CreateFile
?
不,USB 设备不使用这些东西。如果您的设备是实际的 USB 转 RS232(或其他慢速串行设备),那么您应该打开与其关联的 COM 端口。让驱动程序处理发送数据的工作。
USB 通信与 COM 端口不同。您可以将其更多地视为外部 PCI 总线,而不是简单的发送您想要的任何数据的线路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)