MAX485 参数速查:RS-485 半双工、方向切换与总线竞争
更新时间:2026-10-30。本篇属于芯片选型速查系列,方向控制逻辑由 Vivado Simulator 2017.4 行为仿真验证,电气边界以厂商 datasheet 为准。更多器件见 MAX485 等收发器的芯片参数速查中心。
MAX485 把 UART 的单端数字信号转换成适合多点总线的 RS-485 差分信号。它只有一对 A/B 总线引脚,发送和接收共用这条物理通道,所以是半双工:同一节点可以轮流说和听,却不能靠这一对导线同时双向传输。用好它的关键不只是把 UART 接上,而是控制 DE 与 RE,让任意时刻只有一个节点主动驱动总线,并给换向留下清楚的先后关系。
本文要回答的问题
- MAX485 与 RS-485 标准分别负责什么,半双工体现在哪里?
- RO、DI、DE、RE 和 A/B 怎样接,四种收发状态如何组合?
- 两个节点换向时为什么要先关旧驱动、再开新驱动?
- 终端电阻、偏置、共地、短支线和单位负载各约束什么?
- 行为仿真中的 contention X 能证明什么,又不能代替哪些电气测量?
一、MAX485 的半双工本质:差分传输加方向管理
RS-485 规定的是多点差分物理层,不是 Modbus 之类的上层协议。A、B 两根线共同表达一个逻辑位,接收器判断二者的电压差,因而比单端信号更适合长距离和存在地电位差的环境。MAX485 是这一物理层的收发器:DI 进入驱动器后变成 A/B 差分输出,A/B 的差分状态经接收器恢复成 RO。
读这张图要把「电气层」和「调度层」分开:收发器能驱动差分线,却不知道哪台设备应当发言。主从轮询、地址和超时属于上层协议;DE/RE 的开关属于本地控制器。两层配合才构成可工作的总线,只接好 A/B 并不能自动避免冲突。
二、引脚、真值表与方向连接
经典 MAX485 采用 8 引脚排列,常见功能如下。不同厂商兼容料和不同封装的丝印、订货后缀仍须逐脚核对,尤其不要凭其他 RS-485 芯片的 A/B 命名习惯反推极性。
| 引脚 | 名称 | 接法与作用 |
|---|---|---|
| 1 | RO | 接收器输出,接 MCU UART RX;RE 为高时输出高阻 |
| 2 | RE_n | 接收使能,低有效;为低时 RO 反映 A/B 状态 |
| 3 | DE | 驱动器使能,高有效;为高时 DI 驱动 A/B |
| 4 | DI | 驱动器输入,接 MCU UART TX |
| 5 | GND | 本地信号地 |
| 6 | A | 同相总线端,DI 为高时相对 B 为高 |
| 7 | B | 反相总线端,DI 为高时相对 A 为低 |
| 8 | VCC | 正电源;经典 MAX485 为 5V 器件,按具体 datasheet 供电与退耦 |
RE 上横线表示低有效,本文代码写作 re_n。DE 与 RE_n 可以分别控制,也常把二者接到同一个 GPIO:GPIO 高时发送、低时接收。但若需要关闭 RO、做本机回环观察或独立处理换向,就应保留两路控制。
| DE | RE_n | 工作状态 | A/B 与 RO 的结果 |
|---|---|---|---|
| 0 | 0 | 接收 | 本机释放 A/B,RO 输出收到的差分逻辑 |
| 1 | 1 | 发送 | DI 决定 A/B,RO 高阻 |
| 0 | 1 | 收发关闭 | A/B 与 RO 都释放,不等于器件进入某种特定低功耗模式 |
| 1 | 0 | 发送并接收 | 本机驱动 A/B,同时可接收总线上的自身信号 |
图中 A/B 是双向共享介质,箭头表达当前数据路径,不是两条独立专线。本地发送时远端必须关闭驱动;远端应答前,本地也要退出驱动态。MCU 的 TX、RX 可以同时工作,并不代表外部 RS-485 总线因此变成全双工。
三、换向时序:先断开发送,再允许对方接管
正常换向采用「先关后开」。发送节点完成停止位后关闭自己的 DE,等总线不再由它主动驱动,接收节点才拉高 DE 开始应答。反向过程同理。所需等待时间要结合器件关断和开启延迟、协议帧间隔及线缆情况,从具体 datasheet 和系统测量确定,不能用行为仿真的激励间隔代替。
本地 DE 先回落,远端 DE 随后才上升,中间的 z 表示理想数字模型里无人驱动,而非测得某个电压。RE_n 可以在发送期间保持禁止,待本地释放后开启接收。若把「UART 移位完成」误当成「线上最后一位已经结束」,过早换向会截断停止位;若两端同时开 DE,则会进入总线竞争。
总线竞争不是普通的逻辑 0 或 1,而是两个驱动器把 A/B 拉向相反状态。数字仿真用 X 表示无法由逻辑规则确定结果;实物中则可能出现异常压差、额外电源电流、误码和器件应力。X 不是电流值,也不能用来推算发热或损坏时间。
固件实现时,最好把「请求发送」「等待 UART 真正发完」「关闭驱动」「切到接收」写成明确状态,而不是在多个中断里随手翻转 GPIO。若 RTOS 调度可能插入长延时,还应区分发送使能的临界顺序与普通任务延时,避免节点一直占住总线。打开接收的时机也要覆盖对方可能的最早应答,否则虽然电气上没有冲突,应用层仍会漏掉响应帧开头。
联合控制 DE 与 RE_n 能减少一路 GPIO,却让发送期间无法通过本机 RO 观察总线。需要检测回环数据、诊断 A/B 短路或记录自身发送结果时,独立控制更方便;它并不消除协议冲突,只是让本机能够看见冲突期间总线被解析成了什么。无论采用哪种接法,上电默认状态都应让 DE 无效,防止复位中的 MCU 意外抢占链路。
多主系统还要把冲突当成协议设计问题,而不是靠重试掩盖。主从架构可由主机保证同一时刻只授权一个从机应答;多主架构则需要仲裁、随机退避或其他介质访问规则。MAX485 不会识别地址、检测帧边界或自动关闭肇事驱动,这些职责必须由控制器和协议承担。
四、实验:双节点换向、竞争和释放
4.1 行为模型与检查方法
实验把两个 MAX485 行为实例接到同一组 a、b 线网。模型只在差分状态明确时给出 0 或 1,其余情况给 X;DE 关闭时输出高阻,RE_n 为高时 RO 高阻。这段代码描述方向逻辑,不包含阈值、传播延迟、电流或线缆模型。
wire received = (a === 1'b1 && b === 1'b0) ? 1'b1 :
(a === 1'b0 && b === 1'b1) ? 1'b0 : 1'bx;
assign a = de ? di : 1'bz;
assign b = de ? ~di : 1'bz;
assign ro = re_n ? 1'bz : received;测试台先让 node1 分别发送 1 和 0,由 node2 的 RO 检查;随后 node1 停止驱动、node2 接管并反向发送。竞争场景故意让两端 DE 都为高且 DI 相反,检查 A/B 是否解析为 X;末尾同时关闭两个 DE,检查总线是否回到高阻。
记录中的五个 PASS 分别对应正向 1、正向 0、换向后的反向接收、相反驱动竞争和双驱动关闭。结束时间 13ns 只是测试台使用 1ns、2ns 激励间隔累积的结果,不是 MAX485 的开关延迟规格。
4.2 原始结果与结论
Vivado Simulator 2017.4
Time resolution is 1 ps
run -all
PASS node1 drives one ro2=1
PASS node1 drives zero ro2=0
PASS reverse direction after turnaround ro1=1
PASS opposing drivers produce contention X
PASS both drivers disabled release bus
SUMMARY errors=0
PASS direction turnaround contention release
$finish called at time : 13 ns : File "C:/win-jobs/runs/chipref-max485-r2-20261030-mac/tb.v" Line 51SUMMARY errors=0 说明这组方向场景与模型预期一致。它支持本文的真值表和「竞争产生 X」的解释,但没有证明真实节点在竞争时安全,也没有验证接收门限、最大速率或线缆末端波形;这些问题必须回到器件规格和板级测量。
五、硬件边界:让总线有确定电平,也让驱动者有边界
| 项目 | 推荐做法 | 做错了会怎样 |
|---|---|---|
| 终端电阻 | 在总线物理两端按线缆特性阻抗配置,常见 120Ω 双绞线也只是典型起点 | 中间节点乱加会增加负载;无端接或位置不当可能反射、误码 |
| 失效偏置 | 按接收器门限与抗扰需求设计上下拉,使空闲差分状态确定,避免重复多点强偏置 | 无人驱动时 RO 可能漂移或受噪声触发;偏置过强又加重驱动负担 |
| 共地 | 给节点提供参考地,并核对收发器允许的共模范围;不能假定双绞线能消除地差 | 地电位差超限时,即使差分信号存在也无法可靠接收 |
| 拓扑与 stub | 优先主干菊花链,节点支线尽量短;高速或长支线需按完整链路评估 | 星形、长 stub 形成阻抗不连续和反射,问题常随速率升高暴露 |
| 单位负载 | 经典 MAX485 按一个单位负载计算,常见总线预算为 32 个;现代分数负载器件须重新核算 | 只数设备数量、不查接收器负载和偏置电阻,可能超过驱动能力 |
终端和偏置不是「每张板都焊一套」的固定仪式。一般只有物理两端承担终端,偏置也要从整条总线计算等效负载。共地导线同样不能替代保护设计;跨建筑、雷击浪涌或大地差明显时,应考虑隔离收发器、隔离电源及适当的保护措施,具体方案取决于现场安全等级。
经典 MAX485 标称 5V 供电、最高 2.5Mbps,但这些数字不能脱离厂商、温度、负载和布线条件使用。电源门限、接收阈值、驱动电流、共模范围、封装与温度等级都要按实际订货型号的数据手册核对。速率越高,越不能把长线、星形拓扑和多次转接当作无关细节。
六、替代型号与选型
| 型号或类别 | 主要差别 | 适合场景 |
|---|---|---|
| MAX3485 | 同族 3.3V 供电版本,逻辑与速率条件需另查 | 3.3V MCU,希望减少电平与电源适配 |
| MAX483 | 限制压摆率的低速同族器件 | 速率较低、希望减轻边沿带来的辐射与反射问题 |
| MAX487 | 分数单位负载、限制压摆率的同族器件 | 节点更多且速率需求较低,按规格重新计算负载 |
| 隔离型 RS-485 收发器 | 集成信号隔离,通常还需匹配隔离电源 | 地差、浪涌或安全隔离要求明显的工业链路 |
| 全双工 RS-485 收发器 | 使用独立发送、接收差分对,接口和布线不同 | 确实需要同时双向通信,不能直接把 MAX485 当替代品 |
替换时至少比较供电、输入逻辑门限、数据速率、单位负载、失效保护、共模范围、封装和工作温度。所谓「pin-to-pin」只说明引脚排列相容,不保证偏置网络、终端和固件换向延迟都无需调整。
七、常见坑:从 UART 波形一直查到总线末端
- 把 RE_n 当高有效。 它接高会关闭 RO,不是打开接收;联合控制 DE/RE_n 时,高发送、低接收最容易记忆。
- 发完最后一个字节就立刻反转。 UART 外设「数据寄存器空」不等于停止位已经离线,应依据发送完成状态和链路时序再关闭 DE。
- 两端等待同一个固定延时后同时应答。 协议需要唯一主从调度、地址和冲突规避,延时本身不能保证只有一个驱动者。
- 所有节点都装终端和强偏置。 这会把正确做法变成过重负载;应看整机拓扑和总装等效电阻。
- 只接 A/B,不处理参考地和机壳地。 差分并不提供无限共模容忍,保护地与信号参考地也要按系统方案区分。
- 用 X 或高阻推断实物电压。 仿真释放后的 Z 需要由真实偏置决定逻辑含义,竞争 X 则需要示波器、电流和热设计评估。
- 上电期间忽略 GPIO 状态。 MCU 复位时 DE 若被外部上拉,可能意外占总线;用合适的上下拉确保上电默认释放,并核对收发器自身上电行为。
实验环境
- 机器/系统:Windows worker
- 工具版本:Vivado Simulator 2017.4(xvlog / xelab / xsim 批处理链)
- 日期:2026-10-30
- 完整命令:
xvlog transceiver.v tb.v && xelab tb -s snap && xsim snap -R,由run.bat顺序调用并在失败时退出。
代码获取
本实验的完整源码、运行脚本、README 与原始输出已放在公开仓库 experiments/chip-ref-max485/。在 Windows 上把 run.bat 中的 Vivado 安装路径改为本机路径后执行该脚本,即可复现双节点方向切换、竞争和释放检查。
参考来源
- Analog Devices / Maxim, MAX481/MAX483/MAX485/MAX487–MAX491/MAX1487 Low-Power, Slew-Rate-Limited RS-485/RS-422 Transceivers:引脚、方向真值表、供电、速率、负载与电气限值。
- TIA/EIA-485 系列标准:平衡多点收发器的电气接口与互连要求。
- 本文实验:
transceiver.v与tb.v的数字行为结果,仅用于验证方向控制,不替代 datasheet 和实物电气测试。
这一篇在知识体系里的位置
本篇属于 MAX485 等器件的芯片参数速查中心,重点是收发器方向控制与共享差分总线。若继续看处理器如何通过组合逻辑选择外设,可读 74HC138 参数速查:MAX485 解决「节点怎样在共享介质上轮流说话」,74HC138 解决「处理器怎样从多个外设中选中一个」。
总结
MAX485 是 5V 经典 RS-485 半双工收发器,DI/RO 接 UART,DE 高有效、RE_n 低有效,A/B 由所有节点分时共享。可靠换向的原则是旧发送方先释放、新发送方后接管;双节点相反驱动在数字模型中表现为 contention X,实物则意味着电气冲突,不能把它当正常逻辑状态。双节点仿真已覆盖正向收发、反向换向、竞争和释放且错误为零,但终端、偏置、共地、stub、单位负载及具体供电和时序仍须按实际 datasheet 与板级测量闭环。