【发布时间】:2013-02-17 08:28:21
【问题描述】:
我正在开发用于嵌入式设备的通信设备类 (CDC) 驱动程序,即 USB 2.0 的 全速 实现。 COM 端口设置为 115200、8 位、无奇偶校验、1 个停止位、无流量控制。我们的 PC 应用程序(32 位、Windows 7、.NET 2.0)通过虚拟 COM 端口与目标设备进行通信,目标设备上的该端口可以连接到 FTDI(USB-to-SCI 桥接器)芯片或集成的 USB微控制器中的外围设备,具体取决于应用程序选择的端口。
两个虚拟 COM 端口在使用 Realterm 时都可以正常工作。然而,虽然我们的桌面应用程序使用通过 FTDI 芯片连接的虚拟 COM 端口工作,但在尝试使用通过微控制器的集成 USB 外围设备连接的虚拟 COM 时,它会挂起。
当使用集成 USB 通过虚拟 COM 端口连接时,应用程序在第二次调用 SerialPort.Write(...) 时始终挂起。使用Serial Monitor from HHD Software 我可以看到数据是在第一次调用SerialPort.Write(...) 时传输的。但是,目标设备永远不会收到该数据。
这很奇怪,因为我在以前的项目中唯一一次看到类似问题是总线两侧的流量控制设置不匹配。
其他信息...
这是在运行通过集成 USB 外围设备连接到目标设备的 PC 应用程序时从各种端口监控工具捕获的数据。任何见解将不胜感激。
- Sysinternals Portmon
- Advanced USB Port Monitor
- Device Monitoring Studio - Request View
- Device Monitoring Studio - Packet View
对于那些感兴趣的人,我正在使用 CodeWarrior 10.2 和飞思卡尔的 MCF51JM128。
任何想法或建议将不胜感激。谢谢。
【问题讨论】:
-
您是否尝试跟踪 Realterm 的操作?必须有差异才能显示解决方案。
-
@jeb 我该怎么做?它是 Realterm 的功能之一吗?我承认我只熟悉它的一小部分功能。
-
不,但是像来自 sysinternals/microsoft 的 portmon 这样的工具可以显示端口的所有操作、打开/关闭以及读/写以及 Realterms 和您自己的其他程序的所有操作
-
这是什么uC?意思是“微控制器中的集成 USB 外围设备”中的一个。我见过的大多数虚拟 COM 东西似乎都不是很适合/优化。我怀疑UC在这里有问题。您必须记住,将它交给 uC 会增加很多开销。
-
我使用 FTDI 芯片组使用 COM 端口/USB 电缆开发了一个非常相似的产品...不确定我是否可以建议您尚未尝试过的任何东西,但是两个快速(可能是愚蠢的)问题:您是否尝试将 WriteTimeout 设置为某个大数字(例如 60 秒)?另外,您是否尝试在写入之间关闭/重新打开 COM 端口?后者是我发现效果极差的东西(因为关闭端口的请求的异步性质及其实际关闭)。
标签: embedded usb .net-2.0 serial-communication cdc