串口环回测试如何工作internally/underneath?

How Serial Port Loopback Test work internally/underneath?

当使用超级终端或任何其他串行终端(即 PuTTY)对 USB 端口(假设为 COM1)进行串行环回测试时,如果您在键盘上键入的内容显示在终端上,则可以验证测试通过(虽然不是所有角色都适用)。

我的问题是: 下面发生了什么? 所以,键盘将数据发送到它的USB端口COM2(假设它连接在那里): 是什么让COM1端口重新发送和接收数据,我认为这是键盘发送的相同数据,然后显示在终端上?

键盘数据是否在 COM2 上接收并由硬件重定向到所有其他 USB 端口,以便 COM1(适配器)以某种方式在内部接收它,然后将其发送出去并接收回来?

实际上,我使用的是笔记本电脑,所以它是这里用于 Serial/USB 适配器的一个端口(我使用的是 FTDI 模块),而不是两个端口,因为我只是想展示一个示例。

问题很广泛,不过我试试看:

您连接的 COM 端口是 RS-232 串行接口的典型 PC 实现。 顾名思义,环回配置: 之间 signal lines 的 RS-232,传输数据线(TxD)是 looped back 到同一主机端口的接收数据线 (RxD)。

您也可以使用最小配置执行类似(但更简单)的测试,其中环回只是直接 "paperclip test" loopback 完全相同的 COM 端口 的 TxD/RxD 行之间。 只需要很少的抽象,从一台 PC 的一个 COM 端口到 同一台 PC 的另一个 COM 端口 构建的 逻辑 环回具有共同的特征您可以在同一显示屏上看到您自己的传输被返回。

为什么这样的测试在你的例子的串行端口上很容易工作的重要特征是接口非常低级以至于没有连接层(或硬件特征)在其间接收方可以注意到信号不是由外部对等主机发布的,而是来自本地主机。

(您的 PC 的和您的 PC 的适配器)两个 COM 端口之间的连接构成环回测试安排的核心部分。您的问题表明您对串行连接本身 之外发生的事情很感兴趣,因此请继续阅读下文...


从键盘到屏幕,涉及各种(硬件和)软件组件。这些细节取决于您的实际 PC 安装,但它的某些属性可以独立于您所拥有的进行描述。 例如,您是否有两个本机 COM 端口或一个本机加上另一个在 USB 端口上模拟的问题与串行线路上实际发生什么的问题无关(因为适配器的工作是另一个端与本机 COM 端口兼容)。

在 PC 上,您 运行 terminal emulation program, 通常用于与某种外部对等方通信,发送和接收字符 to/from full-duplex 联系。 虽然这不是必需的,但典型的通信模式是 ASCII 数据以乒乓方式交换,其中一方持有 client/master 角色,另一方实现接收请求并发出响应的 server/slave . 然后(通常)服务器端可以通过 Linux/Unix PC 运行 宁一个交互式 shell 来实现,它通过串行线路而不是本机(非模拟)控制台终端由键盘和显示屏组成。

现在想象一下,您已经切断了外部对等体,安装了环回并且您正在倾听自己的声音。 然后,您通过键盘输入的所有内容都会

  • 被 PC 及其操作系统检测到,它管理击键并将相应的事件传递给活动进程(终端仿真器、发送器角色)
  • 由终端仿真器发出串行传输并传送到串行线路(同样,通过操作系统及其驱动程序)
  • 运行 通过串行线,TxD --> RxD
  • 在连接的 COM 端口被 OS/drivers 检测到并传送到终端仿真器(接收者角色)
  • 由终端仿真器处理并发布以显示在您的屏幕上(再次使用 OS 和驱动程序)。 这是您查看数据传输的位置。

如果你像你写的那样使用一个 USB 模拟 COM 端口,信号 运行s 通过适配器加密狗及其相应的驱动程序软件,而不是数据采用的更简单的方式 在本机端口。

如果您运行正在使用 "port loopback"(单个 COM 端口的特殊电缆),输出文本将显示在同一终端仿真器的接收器 window 中,其中您发布了您的输入文本。

如果你在两个端口之间 运行 "host loopback",你通常需要终端仿真器的两个 运行ning 实例(或仿真器 - 你也可以让 Hyperterminal 与 PuTTY 对话例子)。您正在一个实例中键入,而收到的文本显示在另一个实例中。 - 好吧,加上一个扩展:通常,终端仿真器 "echo" 将输入文本输入到它们的本地输出部分,以便用户可以验证(并记住)之前输入并传输到底层线路的内容。 由于试验环回不是终端仿真器的主要目的,默认配置通常是激活此回显。 也就是说,您可能会看到您输入的文本在 "INPUT" 侧回显(输入一次,就在那里阅读),在 window 侧回显一次(它描述了通过串行连接发生的事情。 echo 部分在你的终端仿真器程序中传递(如果是 OSS 请自行查找其代码), received 部分通过串行线传送。

如果您想出于教育目的验证这一点,请尝试重新配置 "INPUT" 终端仿真器使其不回显 - 您将仅在 window 上看到您未激活的输出打字。 然后,将另一个连接器焊接到环回 cable/plug 并将其连接到另一台 "sniffer" 机器(它只听但不自己传输): 在这里,您可以阅读通过环回线实际传输的所有内容。

@Justme 在 ElectricalEngineering

上的简短回答

终端程序接收按键并将这些 ASCII 字节发送到 COM 端口。如果您的 COM 端口有 TX 通过电线从外部连接到 RX,则 COM 端口将接收在 TX 电线上发送的数据。从 COM 端口接收到的数据将发送到您的终端程序,如果它是可打印的 ASCII 符号,则将其打印在屏幕上。

基本上,这与向您自己发送邮件并在发送到您的收件箱中找到它是一回事。电子邮件或普通邮件。

哦,USB 键盘不是 COM 端口。