4. MIL-STD-1553B 协议深度解析
MIL-STD-1553B 是一种集中控制、命令/响应式的时分多路复用串行总线,标准速率 1 Mbps,采用曼彻斯特II型双相编码,通过变压器耦合或直接耦合接入总线。理解它的关键,不是记住“1553 很可靠”,而是看清一条消息从总线控制器发出命令,到终端回送状态字,再到数据字落地的完整链路,以及链路中每个字段如何决定后续行为。
一、三种字格式:命令字、数据字、状态字
1553B 总线上传输的最小单位是“字”,每个字 20 位:3 位同步头 + 16 位有效信息 + 1 位奇校验。同步头是区分字类型的第一道标志:命令字和状态字使用同一种同步波形(高-低),数据字使用相反波形(低-高)。接收端先靠同步头判断“这是命令/状态还是数据”,再解析 16 位内容。
命令字由终端地址(5 位)、T/R 位(1 位)、子地址/模式(5 位)和字计数/模式代码(5 位)组成。T/R=1 表示控制器要求终端发送,T/R=0 表示要求终端接收。状态字由终端地址、消息差错位、测试位、服务请求位、广播命令接收位等标志组成,是终端对命令的“应答凭证”。数据字则承载 16 位有效载荷,可以是传感器数值、控制指令或状态参数。
二、消息格式:十种传输模式
1553B 定义了 10 种消息格式,核心可归为三类。第一类是控制器到终端的“接收命令”消息:控制器发命令字(T/R=0),随后连续发 N 个数据字,终端最后回状态字。第二类是终端到控制器的“发送命令”消息:控制器发命令字(T/R=1),终端回状态字后紧跟 N 个数据字。第三类是“模式命令”消息,用于总线管理而非普通数据传输。
此外还有广播消息:命令字中终端地址为 31(11111)时表示广播,所有终端都接收数据但不回状态字,只有广播命令接收位置位。以及“无数据字”的模式命令,如发送状态字、发送自检字等。实际分析中,看到命令字后先看 T/R 和终端地址,再看字计数,就能预判后续总线上应出现的数据字数量和方向。
三、终端类型与模式代码
总线上有三种终端角色。总线控制器(BC)是唯一有权发起命令的终端,负责调度消息、管理总线。远程终端(RT)是挂在总线上的设备,响应 BC 的命令,最多可接 31 个。总线监视器(BM)只监听、不发送,用于记录总线流量和故障复现。一个终端可以同时具备 BC 和 RT 功能,但同一时刻只能有一个 BC 在控制总线。
模式代码通过命令字中“子地址=00000 或 11111”来标识,用于执行标准管理功能。常见模式代码包括:动态总线控制(让出/接管总线控制权)、同步(带数据字或不带数据字)、发送状态字、发送自检字、发送矢量字、复位远程终端、发送上一命令等。模式代码是排障时的重要线索:如果总线上出现子地址为 0 的命令,说明系统在做总线管理或终端自检,而不是普通数据传输。
四、冗余总线与错误处理
1553B 通常采用双冗余总线(总线 A 和总线 B),两条总线物理独立,终端同时连接两条。正常时 BC 只在一条总线上发消息,另一条作为备份。当主总线出现故障,BC 可切换到备份总线重发。冗余的价值在于:单条总线短路、断路或耦合器故障时,系统仍能通过另一条总线维持通信。
错误处理主要依赖状态字中的标志位和响应超时。消息差错位(ME)置 1 表示终端认为收到的消息有错,常见原因包括奇校验错、曼彻斯特编码错、字计数不匹配或同步头错误。如果终端在 4~12 μs 内没有回状态字,BC 判定为无应答,通常会记录故障并尝试重发或切换总线。若状态字中服务请求位置 1,表示终端有事件需要 BC 处理,BC 可随后发送“发送矢量字”模式命令获取中断矢量。
五、一个可复现的分析示例
假设某飞行控制计算机作为 BC,向惯导 RT(地址 0x05)发送“发送数据”命令,要求从子地址 0x02 读取 4 个字。总线上应出现:命令字(地址 05,T/R=1,子地址 02,字计数 04)→ 状态字(地址 05,ME=0)→ 数据字 1~4。若用总线分析仪抓取,发现命令字后 20 μs 仍无状态字,则可判定该 RT 无应答。此时应检查 RT 供电、耦合器连接和总线 A/B 的差分电平;若切换到总线 B 后恢复正常,则故障定位在总线 A 的物理链路。
若状态字返回但 ME=1,说明 RT 收到了命令但认为消息有错。此时应重点核对字计数是否与 RT 实际缓冲区匹配、数据字是否存在奇校验错。若 ME 持续置位,通常不是总线物理问题,而是 RT 软件配置或数据长度约定不一致。掌握这套“命令—状态—数据—标志”的判读顺序,就能把 1553B 从抽象协议变成可定位、可复现的工程对象。