我一直在使用使用 RS232 与 PC 通信的设备。由于他们定义了与设备相关的 TX 和 RX 引脚,因此存在一些混淆。在他们的定义中,他们用来表示 TX 是从设备发送数据的引脚。在我看来,这应该标记为 RX,因为它是计算机接收的引脚。
引脚应该如何定义?它们是相对于每个设备还是相对于“控制器”?
我一直在使用使用 RS232 与 PC 通信的设备。由于他们定义了与设备相关的 TX 和 RX 引脚,因此存在一些混淆。在他们的定义中,他们用来表示 TX 是从设备发送数据的引脚。在我看来,这应该标记为 RX,因为它是计算机接收的引脚。
引脚应该如何定义?它们是相对于每个设备还是相对于“控制器”?
如果我们快速回顾一下最初使用 RS-232 标准的方式,可能会更容易理解。
注:以下所有管脚编号均指原厂 25 针 D 连接器;在后来的 PC 上使用的 9 针连接器上的编号发生了变化。
背景
DTE = 数据终端设备 - 在过去,这通常是终端或打印机,或模拟这些设备的设备。
DCE = 数据通信设备 - 在过去,这通常是调制解调器或其他 WAN 接口。
原始 25 针 D 连接器上的针 2(在标准中描述为“传输数据”、“电路 BA”、“V24. 编号 103”)应该是从DTE到DCE 的数据。
原始 25 针 D 连接器上的针 3(在标准中描述为“接收数据”、“电路 BB”、“V24. 编号 104”)应该是从DCE到DTE 的数据。
这意味着连接终端和调制解调器的电缆是“直通”的 - 数据来源电缆一端的终端 (DTE) 上的针脚 2 连接到调制解调器(或类似设备)另一端的针脚 2接收该数据的电缆 (DCE) 的一端。然后调制解调器使用通信链路将该数据发送到该链路另一端的任何设备。
引脚 3“接收到的数据”是相反方向的数据信号 - 由引脚 3 上的调制解调器 (DCE) 传输,并由引脚 3 上的终端 (DTE) 接收。
因此,您可以看到,从 DTE(即终端)的角度来看,对传输的内容和接收的内容进行了标记。当典型的连接是在 DCE 和 DTE 之间时,这一切都是有意义的。
然而,我们现在使用的设备(即使它们不使用 RS-232 而是使用 TTL 或其他电压 UART 协议接口)通常都是有效的 DTE(调制解调器除外)。将一个 DTE 上的引脚 2(这是一个输出)连接到另一台配置为 DTE 的设备上的引脚 2(另一个输出)是没有意义的(并且在使用逻辑电平信号时,甚至可能导致硬件损坏)。这就是使用“交叉”或“零调制解调器”(即无调制解调器)电缆的地方。
你的问题
我一直在使用使用 RS232 与 PC 通信的设备。由于他们定义了与设备相关的 TX 和 RX 引脚,因此存在一些混淆。在他们的定义中,他们用来表示 TX 是从设备发送数据的引脚。在我看来,这应该标记为 RX,因为它是计算机接收的引脚。
引脚应该如何定义?它们是相对于每个设备还是相对于“控制器”?
从上面的背景信息中,您可以看到如果他们的设备充当 DTE(大多数情况下,除非它是调制解调器或其他 WAN 接口) ,他们的标签是正确的。在一块 DTE 上,标有“传输数据”的引脚(25 引脚连接器上的引脚 2)确实发送数据。(并且,如上所述,在一块 DCE(例如调制解调器)上,称为“传输数据”的引脚(其 25 针连接器上的引脚 2)实际上是一个输入,它接收来自 DTE 的信号。)
PC 的串行端口也将被配置为 DTE(除非它有一个非常不寻常的串行端口 - 这里不适用,如果它确实适用,您会知道)。
因此,您将 DTE 设备(您提到的此设备)连接到 DTE 设备(PC),即“RS-232 术语中没有 DCE,即没有调制解调器,以及“空调制解调器”或“交叉”RS-232将需要接线。无论哪个引脚是 RS-232“传输数据”(可能是您提到的那个他们已标记为 TX),这将是一个输出,需要连接到 RS-232“接收PC 上的“数据”引脚(也是 DTE 设备),它是一个输入(显然反之亦然,用于在另一个方向传输数据)。
尽管这似乎不适用于您,但我只想补充:为了让生活变得更加复杂,一些制造商试图通过有效地标记他们的 DTE 设备来“帮助”,就好像它是 DCE 一样。他们将数据输入引脚标记为 Tx,以便用户只需将“Tx”从外部设备(如果是 DTE,将是从那里输出的数据)连接到他们设备上标记为“Tx”的引脚(他们知道是输入)。从而允许他们说“只需将您设备上的 Tx 连接到我们设备上的 Tx”。他们认为他们正在努力提供帮助,但这样的标签往往只会增加混乱。
正如Dan Mills在评论中提到的那样,我们中的许多人在 RS-232 的陪伴下长大,不得不使用他描述的“接线盒”连接各种具有稍微不同的 RS-232 实现的设备,度过了快乐的时光。这些接线盒有 LED,显示哪些信号正在被主动驱动(这可以让您快速查看设备是配置为 DTE 还是 DCE:引脚 2 是否在该设备上驱动?是 = 它是 DTE)并且有短跳线的地方电缆可用于连接各种连接器引脚。
与许多使用信号名称的类似总线的配置不同,串行通信传统上使用函数名称作为引脚。因此,如果设备在某个引脚上传输,则将其标记为 Tx。如果收到,则标记为 Rx。显然,您将一个设备的 Tx 与另一个设备的 RX 连接起来,反之亦然。
换个角度来说,你所说的设备里面也有一个“计算机”,这就是MCU基本上是什么。为什么一台计算机要指定另一台计算机引脚的名称,特别是考虑到通信的双向异步性质?
特殊情况是当所讨论的设备是直通类型时,例如旧调制解调器或现代 FT232 转换器。他们不使用 Tx/Rx 引脚与计算机通信,而是使用它们将计算机的通信进一步传递到线路中。出于这个原因,它们的引脚以通过的信号命名。
更新:这里有几个例子来说明这一点。
现在可能有数百万人在使用 Arduinos,有些人甚至不知道它是如何工作的。它们将 Tx 连接到 Rx,将 Rx 连接到 Tx,将 Gnd 连接到 Gnd,它们很好用。他们通常没有意识到的是,他们在技术上创建了零调制解调器,它允许两个 MCU 相互通信。
现在,同样的人有时想将 USB 连接添加到他们的 Arduino 中。它们在适配器或转换器芯片上将 TX 连接到 TX,将 RX 连接到 RX。注意那些通常命名为“TX-IN”和“RX-OUT”以避免混淆。同样,似乎很明显但很少想到的是,从技术上讲,这个 USB 适配器是一个直通设备。它在 RX 引脚上“说”的不是来自适配器本身,而是来自线路另一端的设备。你猜怎么着?它连接到某处的 TX 引脚。
它们通常与设备相关,因为 RS232 设备没有“主/从”或“客户端/服务器”关系。SPI 协议具有主/从架构,因此它们被标记为“MISO”(主从输出)和“MOSI”(留给学生练习)。那是在设备级别;我无法谈论个别电路设计师可能会选择什么作为网络名称。
不幸的是,对于工程师来说,这是两片粪便之间的难题。
没有真正合乎逻辑的解决方案,两种方式都合乎逻辑。
我尝试用 IN/OUT 和/或箭头指示方向来标记引脚、PCB、IC 布局、连接表、软件。在您的原理图等上使用“TX-out”“RX-in”“CTS-out”“RTS-in”等词。这完全解决了歧义。[我通常认为 TX 和 RX 应该正确命名,即 TX 应该是一个输出]。
这是一个信号穿过隔离栅的PCB。注意箭头,因此调试它或尝试安装连接器的人清楚地知道信号的走向。
控制信号更差。(除了电气方向,它们也有逻辑控制方向)
控制信号有一个明确列出功能的文档:“CTS(输出)向计算机发出信号,表明设备已准备好接收数据”
有时这两种方式同时有意义:我有一个芯片,其中 RX 和 TX 用它们自己的功能正确命名(从芯片的角度来看)。但是握手引脚被命名为 CTS 和 RTS,与它们将连接到的 PC 引脚匹配,因为这是软件和状态灯所指的内容。
近年来有所帮助的是让设备使用 DE9F 连接器,该连接器通过直通 mf 电缆直接连接到 PC 串行端口。这减少了过去所有的免费。