
1. RS422 不是过时接口先弄懂它解决了什么问题做板间通信的时候我见过太多人先选 RS232等距离拉长、通信乱码之后才回头换差分方案。RS422 在工控和板卡通信里一直有一席之地尤其是 AM26LS31 AM26LS32 这套经典收发组合一块芯片提供四路驱动器/接收器非常适合多路全双工场景。这篇文章就把这套组合从选型、接线、端接、失效保护到实际调试的完整思路讲清楚适合正在设计或维护 RS422 链路的工程师也适合第一次用差分串口做通信的爱好者。1.1 从 RS232 到 RS422差分传输为什么靠谱RS232 是单端电平发送端把信号拉到 -5V 到 -15V 或 5V 到 15V接收端以 GND 作为参考来判断高低电平。只要距离一长、地线电位差变大接收端看到的就不是发送端自信的那个电平很容易出现“单独测每根线都是好的接上去就乱码”的经典故障。RS422 换了一种思路发送端用 Y、Z 两根线输出一对互补信号接收端不再看单根线对 GND 的绝对电压而是看 A、B 两根线之间的差值。外部共模干扰只要同时叠加在两根线上差值基本不受影响这就是差分传输能在几十米甚至上千米距离下保持可靠的根本原因。AM26LS31 是四路差分驱动器负责把 TTL/CMOS 电平转成差分信号AM26LS32 是四路差分接收器负责把差分信号重新转回逻辑电平。这两颗芯片组合就是最经典的 RS422 物理层方案。1.2 RS422 和 RS485 的差异很多人把 RS422、RS485 混在一起其实它们都是差分但定位不一样。RS485 通常跑半双工两根线挂在总线上多个节点分时收发适合多机采集RS422 是全双工用两对差分线分别负责发送和接收典型场景是固定设备之间的板级/设备级高速通信。标准上 RS422 允许一个驱动器驱动最多十个接收器但不允许像 RS485 那样多个驱动器同时挂一条总线。项目RS232RS485RS422电气方式单端电平差分差分典型线数TX、RX、GNDA/B半双工常见两对差分线全双工天然全双工一般需要额外控制或四线四线天然全双工标准参考速率低速为主10Mbps 级别10Mbps 级别参考距离十几米内1000 米级1000 米级拓扑点对点多点总线一发多收、不能多驱动器常见场景调试口、短距配置工业总线、传感器采集板间通信、编码器、仪器仪表实际项目里如果只是两块板卡之间持续双向收发RS422 比 RS485 省事很多至少不用反复倒换方向、处理回环数据。RS485 的优势是在一条总线上挂很多设备而不是追求全双工吞吐。1.3 什么时候选 AM26LS31AM26LS32什么时候选集成收发器现在市面上有很多集成 RS422/RS485 收发器一颗芯片里已经把驱动器和接收器都装进去。那为什么还要用 AM26LS31AM26LS32最直接的理由是通道数。AM26LS31 一片等于四个独立的差分驱动器AM26LS32 一片等于四个独立的差分接收器。如果你要做四路 RS422 发送、四路 RS422 接收或者要在同一块板上同时处理多个全双工串口用两颗芯片就能解决比装八颗集成收发器便宜得多也简单得多。如果只需要一路全双工 RS422那确实可以考虑集成收发器外围器件更少。不过 AM26LS31/32 的好处是灵活、冗余、物料普遍很多工控老项目还在用这套方案你接手时也必须会读会调。下面的内容我全部围绕这对芯片的实际接线和坑点来写。2. AM26LS31 与 AM26LS32 的引脚功能与标准接线2.1 芯片内部结构发送和接收分开看AM26LS31 每个通道有一个逻辑输入端习惯上叫 D 或 A另外有 Y、Z 两个差分输出端。Y 和 Z 互为反相Y 对应“正”端Z 对应“负”端。AM26LS32 每个通道有两个差分输入端 A、B一个逻辑输出端 Y。接收器的判断规则很简单当 A 相对于 B 为正、且差值超过某个阈值时输出高电平反之输出低电平。AM26LS32 的典型输入阈值是 ±200mV也就是说 A-B 大于 200mV 判高小于 -200mV 判低中间状态不保证。芯片功能信号说明AM26LS31D1~D4TTL/CMOS 逻辑输入接 MCU 的 UART TX 或 GPIOY1~Y4同相差分输出接双绞线正端Z1~Z4反相差分输出接双绞线负端G / /G输出使能按具体型号固定到有效电平AM26LS32A1~A4差分输入正端B1~B4差分输入负端Y1~Y4逻辑输出接 MCU 的 UART RXG / /G输出使能按具体型号固定到有效电平不同封装、不同后缀的引脚号可能略有差异但功能命名基本一致。画原理图之前一定先把具体型号的 datasheet 打出来逐脚核对不要凭一张网上搜来的引脚图硬套。2.2 标准 4 线全双工接线图RS422 全双工需要两对双绞线。A 板发送、B 板接收用一对B 板发送、A 板接收用另一对。方向不能混在同一对线上否则自己发给自己远端根本收不到。A板 B板 MCU_TX1 ── AM26LS31 D ── Y ── T ──── A ── AM26LS32 ── MCU_RX1 └─ Z ── T- ──── B MCU_RX2 ◄── AM26LS32 ◄── A ◄── R ──── Y ◄── AM26LS31 ◄── MCU_TX2 B ◄── R- ──── Z先说极性。AM26LS31 的 Y 要接到远端 AM26LS32 的 AZ 要接到远端 AM26LS32 的 B。反过来也一样只要两边约定一致Y 对 A、Z 对 B。一旦把 Y 接到 B、Z 接到 AUART 线路上的空闲电平会被反相轻则乱码重则压根不通。调试时如果发现数据大量 0x55 变 0xAA第一反应就应该是某对线接反了。2.3 使能、电源和 3.3V 逻辑的电平匹配问题很多人焊好板子发现没有输出最后查出来是使能引脚没接。AM26LS31 和 AM26LS32 都有输出使能引脚有些芯片还有两个互补使能端。这些引脚不能悬空必须按数据手册固定到有效的电平否则输出可能处于高阻态示波器当然什么都测不到。尤其是 MCU 还没启动时如果使能引脚被 GPIO 控制一定要加上下拉电阻把默认状态设成“通信可用”避免整机启动过程中总线一直浮空。另外注意AM26LS31/32 是传统 5V 器件。如果 MCU 是 3.3VAM26LS31 的逻辑输入通常还能识别因为 TTL 高电平门槛大约在 2V 左右但 AM26LS32 的逻辑输出高电平在某些手册里只保证 2.4V 以上直接接 3.3V MCU 可能会踩在 VIH 门限附近。稳妥做法是查一下 MCU 的 VIH 参数或者加一级 74LVC245、MOSFET 电平转换。不要因为“单片机引脚是 5V tolerant”就想当然忙起来漏了这个细节通信间歇性出错时极难查。3. 硬件电路设计里的五个高频坑3.1 端接电阻速率越低越容易被忽略速率越高越不能省RS422 的典型线缆是特性阻抗约 100~120Ω 的双绞线。发送端产生的信号到了接收端如果末端阻抗不匹配信号会反射回来造成过冲、振铃和误码。工程上最简单的处理是在接收端最远那一侧并联一个电阻阻值等于线缆特性阻抗常用 120Ω。低速短距离时比如几米之内跑 9600 baud不加端接电阻通常也能工作很多人因此忽略了它。但一旦速率提高到 1Mbps、10Mbps或者线长超过几十米端接就是决定成败的关键。我个人的习惯是PCB 上预留一个 120Ω 电阻位调试时先用示波器看波形再决定焊不焊。高速率测试时直接焊上避免在最开始就被反射问题干扰判断。端接电阻要放在接收端不是发送端。如果你在发送端放一个 120Ω那是给驱动器增加额外负载对反射没有帮助。3.2 接收端失效保护和偏置电阻怎么算AM26LS32 是一颗经典芯片但经典不代表完美。它的输入阈值是 ±200mV跟不上失效保护。所谓失效保护是指当输入悬空、短路或驱动器不使能时接收端输出还能保持一个确定的状态。AM26LS32 这类老芯片在 A、B 都悬空时下游逻辑可能随机跳比如 MCU 串口收到一堆 0x00 或 0xFF。解决办法是在接收端加偏置把 A 通过一个电阻上拉到 VCCB 通过一个电阻下拉到 GND同时保留端接电阻。这样即使远端没有驱动A 也会比 B 高出一个固定差值。用 5V 供电、两个偏置电阻各取 1kΩ、端接电阻 120Ω 时空闲差分会落在 280mV 左右刚好超过 200mV 阈值能保证输出稳定。VCC ── 1kΩ ── A ── 120Ω ── B ── 1kΩ ── GND偏置电阻不是越大越好。要用 10kΩ 做偏置时配合 120Ω 端接后空闲差分会掉到 30mV 以下连 200mV 阈值都到不了。这个计算很简单两个偏置电阻和端接电阻组成一个分压网络阻值越大空闲差分越小。所以说“上拉下拉随便加一个”是典型的新手坑要按阈值算完再定。3.3 地线、共模电压和隔离很多人以为差分通信不需要共地这是误解。差分信号固然不看绝对地电平但 AM26LS32 的接收器输入仍然有一个共模电压范围。AM26LS32 这类芯片通常按 ±7V 或相近值设计意思是 A、B 相对于本地 GND 的电位差必须在这个范围内。如果两块板子的地之间已经有十几伏的电位差信号早就超出接收器的有效范围了轻则收不到重则损坏芯片。所以在非隔离方案里双绞线旁边一定要再走一根 GND 线把两端的电路参考点拉住。不要觉得“反正差分不用接地线”就能省一根线。屏蔽层又是另外一回事屏蔽层通常建议单端接地避免两端都接造成地环路电流。工业环境下如果地电位不稳定或者距离超过几百米老老实实上隔离方案后面第 6 章我会单独说。3.4 PCB 布局与线缆走线的注意事项AM26LS31/32 本身不是特别高速但在 1Mbps 以上时布局太随意也会出问题。差分输出对尽量平行走线、保持等长不要引出一根很长很细的走线再到连接器。板内走线长度一般不远真正的反射通常来自连接器到芯片之间这段“尾巴”所以芯片要尽量靠近连接器放。电源去耦不要省。每颗芯片的 VCC 旁边放一个 0.1uF 陶瓷电容靠近供电引脚如果驱动多路信号再补一个 10uF 左右的钽电容或电解电容。AM26LS31 同时驱动四路时瞬态电流不小电源纹波会直接叠加到差分信号上影响眼图。线缆选择上用真正的双绞线别拿普通排线或者平行杜邦线跑长距离。双绞线的绞合能显著衰减共模干扰这是 RS422 能长距离稳定工作的物理基础。4. 实测和排错从一片空白到稳定收发4.1 先做芯片本地环回把问题切成两半拿到一块新板子我不会马上接很长电缆而是先在同一块板上做本地环回把 AM26LS31 的某个通道输出 Y/Z直接接到同板 AM26LS32 的输入 A/B。然后用 MCU 的串口发 0x55看接收端能不能收到 0x55。这一步能一举确认三件事驱动器的输入有没有进来驱动器输出极性对不对接收器的逻辑输出有没有接到 MCU。如果本地环回都不通接再长的线也没意义。先解决板内问题再连外部电缆排查范围马上缩小一半。如果本地环回正常再连上双绞线用同样的发送内容测试。如果这时候才出现乱码或不收问题大概率出在线缆、端接、极性或者地电位上。这是最实用的分层排查思路不要一上来就抱着示波器测几百米线。4.2 示波器该测哪里怎么测才不误判很多初学者拿示波器探头夹在 A 线对地测量看到方波就以为信号好的。实际上 RS422 接收端判断的是 A-B 的差值不是 A 对 GND 的绝对值。如果共模干扰很大A 对地波形可能乱七八糟但差分波形却很干净反过来单端看起来漂亮也不代表差分达到阈值。正确做法是用两个探头分别接 A、B然后在示波器上用 Math 功能做 CH1-CH2直接观察差分波形。如果有差分探头更好直接夹在双绞线上就行。测量点也要选对在接收芯片的输入引脚附近测或者至少在端接电阻两端测而不是在连接器外侧随便夹一下。对于 0x55 这样的测试字波形上应该是均匀的 0101 交替。要看三个点空闲电平是否稳定、边沿有没有明显振铃、幅度是否远大于 200mV。如果差分幅度只有 300mV 出头除了看端接和偏置还要怀疑线缆太长、驱动器负载太重或者供电电压偏低。4.3 典型故障现象与处理对照表现象高概率原因排查方向完全无数据使能脚悬空、电源没到、UART 引脚配置错量使能电平量芯片供电本地环回数据反相Y/Z 接反或 A/B 接反交换一对线或用示波器看空闲电平单方向正常另一方向不通反方向驱动器的使能或线缆接错查该方向 AM26LS31 的输入和使能短距离正常长距离乱码端接电阻缺失、线缆太长、地电位差大焊上 120Ω缩短线缆测试检查共模偶发错帧、间歇性乱码电源纹波大、接线端子松、屏蔽层接地不当加大去耦、检查连接器、调整屏蔽接地排查的过程里我最常用 0x55 和 0xAA。0x55 是二进制 01010101如果接反接收端会变成 10101010也就是 0xAA一眼就能判断极性。等到 0x55/0xAA 都稳定通过再改发真实业务帧。5. RS422 通信协议到底指什么电气层和 UART 层的分工5.1 RS422 标准只定义了“电”的部分很多人在网上搜“RS422 通信协议”以为它是一个像 Modbus 那样的协议栈。其实 RS422 标准描述的是电气特性电平范围、驱动能力、接收灵敏度、线缆参数等。它不管数据怎么封装、波特率是多少、有没有校验位。这些都属于上层协议的事。实际项目里最常见的做法是 UART 跑在 RS422 物理层上。MCU 把 UART_TX 发给 AM26LS31AM26LS31 变成差分对发出去对端 AM26LS32 把差分对还原成 TTL 电平再送进对端 MCU 的 UART_RX。UART 的起始位、停止位、波特率、校验方式AM26LS31/32 完全不关心它们只是忠实地把每一个电平转移过去。5.2 典型串口配置和软件层注意事项做 RS422 调试时两端的串口参数必须一致。最常用的是 8 数据位、无校验、1 停止位也就是 8N1。如果对端设备手册写了“偶校验”或者“7E1”那就要按手册来不能看着接收乱码就怀疑芯片坏了。波特率误差也是重要排查点。尤其长距离高速率时UART 允许的波特率偏差一般在 ±2% 左右。MCU 内部时钟、USB 转串口工具的晶振精度、线缆延迟叠加起来可能让一个本来“差不多”的波特率在高速时彻底失步。建议在系统里把某个 GPIO 设为翻转测试或者发送 0x55 连续帧用示波器测实际波特率。下面是一个很简化的串口发送示意AM26LS31 的使能已经固定接好所以软件只需要正常操作 UART// 伪代码示意UART 发送一字节到 AM26LS31 输入 void rs422_send_byte(uint8_t byte) { while (!(UART-SR UART_SR_TXE)); UART-DR byte; }软件层真正要注意的是缓冲区、超时和帧校验。RS422 只保证电平传输不保证数据完整性。如果项目要求可靠通信上游一定要加帧头、长度、CRC 校验。硬件物理层再稳也不能替代协议层的差错控制。6. 隔离场景与 ISOW1432 这类替代方案6.1 什么情况下必须考虑隔离AM26LS31 AM26LS32 是非隔离方案要求两端 GND 电位差在接收器共模范围内。车间里两台设备相距很远、电源来自不同插座、甚至存在变频器或大电机启停时地电位差可能远超 ±7V。这种情况下强行用非隔离方案通信时好时坏严重时会烧 AM26LS32。隔离方案的核心是切断地环路让两端拥有各自独立的参考地。老式做法是光耦 隔离 DC-DC再配合 AM26LS31/32。这种方案能做但器件多、延迟大、调试麻烦。信号经过光耦后的上升沿会变差高速率下还要额外处理。6.2 ISOW1432 这类集成隔离收发器怎么选如果你搜过“ISOW1432 RS422 用法”大概率是在找隔离 RS422 方案。ISOW1432 是 TI 的一颗集成隔离收发器内部集成了隔离电源和差分收发电路外围比光耦方案简单很多。它和 AM26LS31/32 不是直接替换关系而是另一种更适合“单路隔离收发”的选择。需要隔离但只有一路 RS422 全双工需求时用集成隔离收发器通常更划算。逻辑侧接 MCU 的串口总线侧接双绞线方向控制引脚按实际收发模式固定或由 GPIO 控制。因为内部有 DC-DC布局时一定要重视 datasheet 里要求的去耦电容位置和容量不能像 AM26LS31 那样只放一个 0.1uF 就完事否则开关噪声会通过隔离电源串到总线上。如果项目是多路并行 RS422比如同时做四路全双工通信集成隔离收发器的成本会快速上升这时反而可以回到 AM26LS31/32 配合隔离电源的分立方案。选型的核心不是“哪个芯片更高级”而是通道数、隔离需求、速率和调试成本之间的平衡。做这套 AM26LS31 AM26LS32 方案时我最大的体会是这种老芯片并不会因为你“知道原理”就给你省心所有坑都藏在细节里。使能脚有没有固定、极性有没有反、端接放没放、共地拉没拉任何一项疏忽都会变成通信现场一个莫名其妙的“偶发故障”。只要把每一根线、每一个引脚都在图纸上标清楚按照本地环回、短距离、长距离的顺序逐步测这套组合其实非常可靠。