如何在PC上访问我的9位数据串行端口?

Maw*_*awg 4 c cygwin serial-port

我已经开发了一种嵌入式解决方案,可以通过多分支总线进行通信,现在我想开发一个基于PC的应用程序来监视总线上的流量。

MDB supports true 9 data bits (plus start/stop/parity - and *no fudging* by using the parity bit as a 9th data bit) 而标准Windows和Linux库最多提供8个数据位。

我有一个支持9个数据位的StarTech PCI2S950 PC串行端口卡,但不确定如何对我的监视应用程序进行编码,并且对Google进行了大量搜索都无济于事。

我更喜欢用C(或Delphi或C ++)进行编码。我对Cygwn略有偏好,但是愿意使用简单的Windows或Linux。

只需任何东西即可在该PC串行端口卡上读写9个数据位。

有人可以帮忙吗?

Han*_*ant 5

您选择的卡不适用于此应用程序。它只有普通的RS-232端口,不适合多点总线。您需要在其他地方购买EIA-485样式的总线接口,您只能在工业电子供应商处找到它们。到目前为止,最好的方法是通过拥有MDB规范的行业组织国家自动售货协会(National Automatic Merchandising Association)。

9位数据格式只是一个技巧,在MDB协议中用于在地址字节和数据字节之间进行模式切换。总线上的所有端口都侦听地址字节,只有寻址的端口侦听数据字节。

第9位只是任何UART均可生成的奇偶校验位。基本数据大小仍为8位。UART通过初始化方式自动生成奇偶校验位,您可以在标记,空格,奇数和偶数奇偶校验之间进行选择。

现在,在带有UART的微控制器中很容易做到这一点,这种UART在这样的总线上使用。您只需即时对UART进行重新编程,告诉它在发送地址字节时生成标记奇偶校验。发送数据字节时,再次将其重新编程为空间奇偶校验。尽管实际上取决于实际的UART芯片,但通常需要等待fifo清空。

这是一个很多困难到正规的Windows或Linux机器上做,有用户模式程序和UART之间的驱动器。驱动程序会生成“发送缓冲区为空”状态位,例如Windows上的EV_TXEMPTY的WaitCommmEvent(),但这不包括fifo空状态,它仅指示缓冲区为空。一种解决方法是等待缓冲区为空,然后再sleep()足够长的时间以确保FIFO被清空。fifo通常为16字节深,因此睡眠时间为位时间的16倍。您肯定需要所选卡上的UART数据表才能确定这些详细信息。


Pet*_*vic 5

http://www.semiconductorstore.com/pdf/newsite/oxford/ox16c950b.pdf上的文档描述了各种 UART 之间的差异。虽然您的 StarTech 板包含支持 RS-485(和 9 位)的 16C950,但它在 RS-232 兼容 (550) 模式下使用它,类似于 IBM-PC 时代的 16550/8250,并且最多支持 8 位数据。

您需要一块具有相同芯片 (16C950) 的板,但它公开了 RS-485 兼容 950 模式,该模式根据规范支持 9 位数据。任何声称提供此类支持的主板都必须附带适用于 Windows 的定制驱动程序,因为 Microsoft 的驱动程序仅为 8 位。

还有其他几种芯片可以实现此处提到的 9 位 RS-485 ,但再次找到 Windows 驱动程序支持将很棘手。当然,许多板使用 16C950,但仅在 8 位和/或仅 RS-232 模式下使用,并且没有适当的驱动程序。

在回答您关于 Superuser 的相关问题时,sawdust建议使用Sealevel 7205e,它看起来是一个不错的选择,具有 Windows 驱动程序支持。它价格昂贵,但他们特别提到了 9 位、RS-485 支持和 Windows 驱动程序。这很可能是您的最佳选择。