2013-03-03 108 views
4

我正在致力于嵌入式设备的通信设备类(CDC)驱动程序,实现USB 2.0的全速。 COM端口设置为115200,8位,无奇偶校验,1个停止位,无流量控制。我们的PC应用程序(32位,Windows 7,.NET 2.0)通过虚拟COM端口与目标设备进行通信,目标设备上的虚拟COM端口可以连接到FTDI(USB-SCI桥接)芯片或集成USB外设在微控制器中,取决于应用程序选择哪个端口。虚拟COM通信问题

这两个虚拟COM端口在使用Realterm时都没有任何问题。但是,尽管我们的桌面应用程序使用通过FTDI芯片连接的虚拟COM端口,但在尝试使用通过微控制器的集成USB外设连接的虚拟COM时,它会挂起。

当通过使用集成USB的虚拟COM端口连接时,应用程序在第二次调用SerialPort.Write(...)时始终挂起。使用Serial Monitor from HHD Software我可以看到数据在第一次调用时发送到SerialPort.Write(...)。但是,目标设备永远不会收到该数据。

这很奇怪,因为我在以前的项目中看到类似问题的唯一原因是总线每一侧的流量控制设置不匹配。

附加信息...


这是在运行我们通过集成的USB外围设备连接到目标设备的PC应用程序从不同的端口监控工具捕获的数据。任何洞察力将不胜感激。

对于那些有兴趣,我使用的CodeWarrior 10.2与MCF51JM128飞思卡尔。


任何想法或建议,将不胜感激。谢谢。

+1

您是否试图追踪Realterm的行为?必须有差异应该表明解决方案。 – jeb 2013-03-03 08:54:09

+0

@jeb我该怎么做?它是Realterm的特色之一吗?我承认我只熟悉其一小部分功能。 – 2013-03-03 19:07:18

+0

不,但是像sysinternals/microsoft的[portmon](http://technet.microsoft.com/de-de/sysinternals/bb896644.aspx)这样的工具可以显示一个端口的所有动作,打开/关闭以及读/写而对于像Realterms和你自己的其他程序 – jeb 2013-03-03 21:46:32

回答

3

从日志中可以明显看出,您正在犯一个没有照顾硬件握手信号的经典错误。这只会偶然发生,像Realterm这样的终端模拟器绝对不会犯这个错误。

您必须将DtrEnable属性设置为true。这会打开数据终端就绪信号。这很重要,因为RS-232是一个未端接的总线,所以当电缆断开或电源关闭时会受到电子噪音的影响。 DTR使设备确信它实际上已连接到受电设备。这在你的情况当然是模拟的,但驱动程序或固件通常仍然会实现RS-232行为。

RtsEnable属性很重要,用于与设备握手,并防止应用程序未及时清空缓冲区时接收缓冲区溢出。您应该将Handshake属性设置为Handshake.RequestToSend,这是设备实现它的最常见方式。然后,它还负责打开RTS。如果你必须使用握手。没有出于某种原因,那么你通过设置RtsEnable为true来打开它自己。

这应该采取的问题。如果仍有问题,请使用PortMon监视Realterm初始化驱动程序的方式。将您看到的命令与SerialPort类发送的命令进行比较。确保它们是一样的。在价值中,不是按顺序。

+0

汉斯,那是问题!感谢您的洞察力,让我回到正确的轨道! – 2013-03-07 20:11:41