一文把 1553B 总线讲清楚:信号怎么传、波形怎么看、一次通信到底发生了什么
一文把 1553B 总线讲清楚信号怎么传、波形怎么看、一次通信到底发生了什么MIL-STD-1553B 是航空航天系统里很经典的一种总线。它的全名可以理解成数字式、时分复用、命令/响应型数据总线。标准本身规定了从电缆、耦合方式、信号编码到命令字、数据字、状态字等一整套规则1553B 总线通常用屏蔽双绞线传输速率固定为1 Mbps常见系统还会做成 A/B 双冗余总线。先给一个最直观的比喻1553B 像一个单车道对讲系统不是谁想说就说而是“总线控制器 BC”点名某个“远程终端 RT”才回答。这样做的好处是总线上不会乱抢话通信节奏非常可控。示例代码地址https://gitcode.com/qq_44154915/dianlu/blob/main/mil1553b_demo_full.py1. 1553B 总线上有哪几类角色1553B 里最重要的三个角色是角色英文作用总线控制器BC, Bus Controller老大。所有通信都由它发起。远程终端RT, Remote Terminal被 BC 点名后接收数据或发送数据。总线监视器BM, Bus Monitor旁听者。只监听不参与应答。标准要求总线按命令/响应方式工作BC 负责发起传输RT 只响应有效命令同一时刻只有一个 BC 控制总线。所以1553B 不是 CAN 那种多节点竞争总线也不是 Ethernet 那种大家都可以主动发包的网络。它更像BCRT3把 2 个数据字收一下。 RT3收到状态正常。 BCRT5把你的 1 个数据字发给我。 RT5状态正常数据如下……这就是 1553B 的核心秩序BC 发命令RT 回状态和数据。2. 信号到底是怎么在线上传输的1553B 的物理链路通常是一对屏蔽双绞线。标准要求主总线和 stub 支线使用两芯、双绞、屏蔽电缆电缆标称特性阻抗范围为70 Ω 到 85 Ω两端要做终端匹配。可以把总线想象成一根主干线很多设备通过短支线接上去终端电阻 终端电阻 | | Bus A | | | Coupler Coupler Coupler | | | RT1 RT2 BC实际连接时常见方式是变压器耦合。也就是说终端不是硬生生直接把芯片脚接到主总线上而是通过隔离变压器、耦合变压器、电阻和短 stub 接入主线。这样可以提升隔离能力也能减少某个终端故障对整条总线的影响。标准图中给出了 transformer coupling 和 direct coupling 两类接口形式其中变压器耦合 stub 的推荐长度不超过 20 ft直接耦合 stub 推荐不超过 1 ft。重点来了1553B 上传的不是 TTL 高低电平不是“1 就是 5V0 就是 0V”。它是差分的、交流耦合的、围绕 0V 正负摆动的波形。接收器真正关心的是信号什么时候过零、过零方向是什么。3. 1553B 为什么用 Manchester II 编码1553B 的每个数据位使用Manchester II bi-phase level编码。标准规定逻辑 1 表示为“前半位为正、后半位为负”逻辑 0 表示为“前半位为负、后半位为正”每个 bit 的中间都会有一次过零跳变。因为总线速率是1 Mbps所以1 bit 时间 1 µs 前半 bit 0.5 µs 后半 bit 0.5 µs用 ASCII 图看会更直观。假设差分电压 Vdiff A 线电压 - B 线电压逻辑 1前半位为正后半位为负 时间 |----0.5µs----|----0.5µs----| Vdiff - ______ | | 0V --------| |---------------- |______ 逻辑 0前半位为负后半位为正 时间 |----0.5µs----|----0.5µs----| Vdiff - ______ | | 0V ---------------| |--------- _______|把几个 bit 连起来例如发送1 0 1 1 0bit | 1 | 0 | 1 | 1 | 0 | 半位电平 | - | - | - | - | - | Vdiff |▔▔▁▁|▁▁▔▔|▔▔▁▁|▔▔▁▁|▁▁▔▔| 时间 1µs 1µs 1µs 1µs 1µs这就是 Manchester 编码最重要的特点每个 bit 中间必定跳变。接收端可以靠这个跳变恢复时钟所以它是自同步的同时信号正负对称也适合变压器耦合。(优电子工业)4. 一个 1553B word 长什么样1553B 的基本单位叫word。每个 word 总长度是20 bit time也就是 20 µs。结构固定如下| 3 bit sync | 16 bit 信息字段 | 1 bit 奇校验 | |------------|----------------|--------------| | 3 µs | 16 µs | 1 µs |1553B 有三种 wordWord 类型谁发用来干什么Command Word 命令字BC 发点名哪个 RT要求它收还是发收发多少个数据字Data Word 数据字BC 或 RT 发真正的数据内容Status Word 状态字RT 发告诉 BC我收到了、有没有错误、我忙不忙标准规定每个 word 都要有有效 sync、有效 Manchester II 编码、16 bit 信息字段加 parity并且 parity 是奇校验不满足这些条件的 word 会被认为无效。5. sync 同步头为什么它很关键每个 word 前 3 µs 是 sync同步头不是普通 Manchester 数据。它故意做成一种正常 Manchester 编码中不会出现的波形用来告诉接收机“一个新 word 开始了而且这个 word 是命令/状态还是数据。”简单画一下命令字 / 状态字 sync | - - - 数据字 sync - - - | 1.5µs 1.5µs注意实际示波器上看到的正负方向可能因为探头接法、变压器极性而翻转判断时不要死记“必须先正后负”而要看相对形状命令/状态 sync 和数据 sync 极性相反。标准图中 command word、status word 使用同一种 syncdata word 使用相反 sync。6. 命令字 Command Word 怎么读命令字的 16 bit 信息字段这样分| RT地址 5bit | T/R 1bit | 子地址/模式 5bit | 字数/模式码 5bit |含义如下RT地址 要点名哪个 RT范围 0~31 T/R 0 RT 接收1 RT 发送 子地址 RT 内部的哪个功能区、缓冲区、通道 字数 后面要传几个 Data Word1~3200000 表示 32 个其中子地址字段为00000或11111时通常表示 Mode CodeRT 地址11111也就是十进制 31用于广播类命令。举个命令字RT地址 3 - 00011 T/R 0 - RT 接收 子地址 4 - 00100 字数 2 - 00010拼起来00011 0 00100 00010也就是0001100010000010这个命令的意思是BC 对 RT3 说 你准备接收数据放到子地址 4一共接收 2 个数据字。7. 状态字 Status Word 怎么读RT 收到有效命令后通常会回一个 Status Word。状态字的前 5 bit 是 RT 地址后面是一组状态标志例如 message error、service request、busy、subsystem flag、terminal flag 等。标准的状态字格式图明确把这些状态位放在 RT 地址之后。最简单的正常状态字可以理解为RT地址 3 所有错误/忙/请求标志 0也就是00011 00000000000意思是我是 RT3。 刚才的消息我收到了。 当前没有报告错误。8. 一次完整通信示例BC 给 RT3 发送两个数据字现在把前面所有东西串起来。假设 BC 要给 RT3 的子地址 4 写入两个 16 bit 数据Data1 0x1234 Data2 0xABCD第一步BC 发命令字RT地址 3 - 00011 T/R 0 - RT 接收 子地址 4 - 00100 字数 2 - 00010命令字信息字段00011 0 00100 00010 0001100010000010 0x1882这个 16 bit 中有 4 个1为了满足奇校验parity bit 要填1。所以线上第一个 word 是CMD_SYNC | 0001100010000010 | P1第二步BC 紧接着发两个数据字1553B 同一条 message 内 word 与 word 之间是连续的没有 interword gap。BC 会马上继续发 Data Word。BC-to-RT 传输要求 BC 发 receive command 后紧跟指定数量的数据字RT 校验消息后再返回状态字。(Aim Online)DATA_SYNC | 0001001000110100 | P0 // 0x1234 DATA_SYNC | 1010101111001101 | P1 // 0xABCD第三步RT3 校验后返回状态字RT3 收到命令和两个数据字后会检查 sync、Manchester 编码、字数、奇校验等。如果都正确就在规定响应时间内回 Status Word。RT 对有效无错命令的响应时间要求为4 µs 到 12 µs如果没有在 14 µs 内开始响应通常会被认为没有收到该命令消息。(优电子工业)RT3 正常返回STAT_SYNC | 0001100000000000 | P1其中00011 RT3 后 11 个状态位全 0 没报错、没忙、没特殊请求9. 这次通信在线上的时间波形长什么样因为每个 word 是 20 µs所以这次通信大概是BC 方向 [命令字 20µs][数据字1 20µs][数据字2 20µs] 总线静默 [RT 响应等待 4~12µs] RT 方向 [状态字 20µs]画成时间轴时间 → BC: | CMD 20µs | DATA1 20µs | DATA2 20µs | | BUS: |||| silence || RT: | | | | 4~12µs | STATUS 20µs |所以总耗时大约是20 20 20 4~12 20 84~92 µs这还没算前后两条 message 之间的最小间隔。BC 在不同 message 之间需要留出至少4 µs的 intermessage gap。(Aim Online)10. 示波器上应该怎么看 1553B 波形如果你把差分探头接到 1553B 总线上典型观察顺序应该是第一看有没有成组的 20 µs word。每个 word 前面应该有 3 µs sync后面跟 16 bit 信息和 1 bit 奇校验。第二看 Manchester 跳变是否正常。每个 bit 时间是 1 µs每个 bit 中间 0.5 µs 位置应该有过零跳变。逻辑 1 和逻辑 0 的区别不是电压高低而是中点过零方向相反。第三看 sync 类型。命令字和状态字 sync 是一类数据字 sync 是相反的一类。一次 BC-to-RT 传输一般会看到命令 sync → 数据 sync → 数据 sync → 等待 → 状态 sync第四看响应时间。RT 不应该立刻乱抢总线而是在 BC 发完命令/数据后按规定响应窗口返回状态字。这个窗口通常看起来就是一小段总线静默然后出现 RT 的状态字。(Aim Online)11. 再看一个 RT 给 BC 发数据的例子假设 BC 想读取 RT5 子地址 2 的一个数据字。命令字字段RT地址 5 - 00101 T/R 1 - RT 发送 子地址 2 - 00010 字数 1 - 00001这个命令的意思是BC 对 RT5 说 请你从子地址 2 发 1 个数据字给我。线上顺序不是“RT 想发就发”而是BC: Command Word RT: Status Word RT: Data Word时间轴时间 → BC: | CMD 20µs | | BUS: || silence ||| RT: | | 4~12µs | STATUS | DATA |RT-to-BC 传输中BC 先发 transmit commandRT 校验命令后先回状态字再连续发送指定数量的数据字。(Aim Online)12. 初学者最容易混淆的几个点第一1553B 的 T/R 是站在 RT 角度看的。T/R0不是 BC 接收而是 RT 接收T/R1是 RT 发送。第二1553B 的 1 和 0 不是电平值而是跳变方向。逻辑 1 和逻辑 0 都有正负电平真正的信息在 bit 中间的过零方向里。(优电子工业)第三sync 不是普通 Manchester 数据。它是故意设计出来的特殊波形用来让接收机识别 word 起点和 word 类型。第四RT 不能随便主动发话。RT 必须等 BC 点名。即便 RT 有事情要上报也通常要通过状态字中的 service request 等机制让 BC 后续来查询。第五一个 word 是 20 µs不是 16 µs。16 bit 只是信息字段前面还有 3 bit sync后面还有 1 bit parity。13. 一句话总结1553B 总线可以这样记BC 统一调度 RT 被点名才响应 一条屏蔽双绞线传差分信号 1 Mbps每 bit 1µs Manchester II 编码每 bit 中间必跳变 每个 word 3µs sync 16µs 信息 1µs 奇校验 通信由命令字、数据字、状态字组成。真正理解 1553B 的关键不是背字段而是把它想成一条有严格秩序的总线先由 BC 发命令再由被点名的 RT 按规定时间回答线上看到的是一串带特殊同步头的 Manchester 差分波形。