FTDI USB 转 RS232 是否优于真正的 RS232 COM 端口?
Is a FTDI USB to RS232 better than a real RS232 COM port?
我正在使用 Zebra DS457 扫描器通过 COM 端口 (RS232) 读取条码和二维码。在我的测试环境中,我使用了带有 Win10 的 MSI 终端,它可以在真正的 COM 端口上正常工作,没有任何问题。但在其他设备(Win10和Win7)上存在一些问题,即软件触发不通过,读取的信息没有传回电脑。当我使用 USB 到 RS232 FTDI 适配器时,我完全没有问题。但为什么?首先,我认为它是 Win10,对旧版的支持可能会更好,但适配器在所有设备上都更好更快。这怎么可能?也许是驱动程序特定的东西?我正在使用此适配器 link to conrad.de。
FTDI 串行端口将在字符通过线路到达和应用程序可以看到它之间,以及在应用程序想要发送内容和它通过线路传输的时间之间施加最小延迟。在旧设备上,这些延迟至少为 1 毫秒,但我认为一些较新的高速设备已将其减少到 125 微秒。此外,以错误的速度到达的数据有时会导致 数百毫秒 的额外延迟,原因我不太明白。
另一方面,FTDI 设备可以缓冲来自线路的 256 字节数据,或来自要通过线路发送的 USB 端口的 128 字节数据,并处理 RTS/CTS 握手,无需任何软件干预——PC串口使用的UART芯片所缺乏的能力。如果软件向 FTDI 设备提供 128 个字节,它将开始发送它,直到远程设备解除其握手线,此时 FTDI 设备将在当前字节完成后立即停止发送;一旦远程设备重新握手,它就会恢复传输。如果 FTDI 设备通过线路接收到足够多的数据,以至于其 UART 有溢出的危险,它将自动解除其握手输出的断言,而无需任何软件干预。相比之下,PC 串行端口中使用的 UART 需要快速中断处理程序来控制或响应握手线。如果中断处理程序维护一个 4096 字节的缓冲区,它可能会在该缓冲区满 75% 时取消断言握手线,但如果缓冲区小于 75% 满并且 17 字节通过线路快速到达,则不会取消断言握手线在 UART 中断处理程序之前继承。更糟糕的是,如果启用传输缓冲,并且当远程设备解除其握手线时,PC 已将 16 个字节发送到 UART 进行传输,则无论远程设备是否准备好接收它们(以及基于在握手线上,它很可能不是。
因此,一些应用程序可以更好地使用 FTDI UART,而一些应用程序可以更好地使用实际的串行端口。
我正在使用 Zebra DS457 扫描器通过 COM 端口 (RS232) 读取条码和二维码。在我的测试环境中,我使用了带有 Win10 的 MSI 终端,它可以在真正的 COM 端口上正常工作,没有任何问题。但在其他设备(Win10和Win7)上存在一些问题,即软件触发不通过,读取的信息没有传回电脑。当我使用 USB 到 RS232 FTDI 适配器时,我完全没有问题。但为什么?首先,我认为它是 Win10,对旧版的支持可能会更好,但适配器在所有设备上都更好更快。这怎么可能?也许是驱动程序特定的东西?我正在使用此适配器 link to conrad.de。
FTDI 串行端口将在字符通过线路到达和应用程序可以看到它之间,以及在应用程序想要发送内容和它通过线路传输的时间之间施加最小延迟。在旧设备上,这些延迟至少为 1 毫秒,但我认为一些较新的高速设备已将其减少到 125 微秒。此外,以错误的速度到达的数据有时会导致 数百毫秒 的额外延迟,原因我不太明白。
另一方面,FTDI 设备可以缓冲来自线路的 256 字节数据,或来自要通过线路发送的 USB 端口的 128 字节数据,并处理 RTS/CTS 握手,无需任何软件干预——PC串口使用的UART芯片所缺乏的能力。如果软件向 FTDI 设备提供 128 个字节,它将开始发送它,直到远程设备解除其握手线,此时 FTDI 设备将在当前字节完成后立即停止发送;一旦远程设备重新握手,它就会恢复传输。如果 FTDI 设备通过线路接收到足够多的数据,以至于其 UART 有溢出的危险,它将自动解除其握手输出的断言,而无需任何软件干预。相比之下,PC 串行端口中使用的 UART 需要快速中断处理程序来控制或响应握手线。如果中断处理程序维护一个 4096 字节的缓冲区,它可能会在该缓冲区满 75% 时取消断言握手线,但如果缓冲区小于 75% 满并且 17 字节通过线路快速到达,则不会取消断言握手线在 UART 中断处理程序之前继承。更糟糕的是,如果启用传输缓冲,并且当远程设备解除其握手线时,PC 已将 16 个字节发送到 UART 进行传输,则无论远程设备是否准备好接收它们(以及基于在握手线上,它很可能不是。
因此,一些应用程序可以更好地使用 FTDI UART,而一些应用程序可以更好地使用实际的串行端口。