2. ARINC 429 协议详解:字格式、标签、数据编码方式(BNR/BCD)、传输速率与电气特性
好,咱们正式开始啃 ARINC 429 这块硬骨头。说实话,在航电总线里,429 算是老前辈了,但你别看它年纪大,直到今天,空客 A320、波音 737NG 这些主流机型上,它依然在兢兢业业地干活。我当年第一次调试 429 总线的时候,还闹过笑话,以为跟串口一样随便接上就能通,结果烧了一块板子……嗯,从那以后,我再也不敢小看它的电气特性了。
2.1 字格式:32 位的“小信封”
ARINC 429 的数据传输单位叫“字”(Word),固定 32 位。你可以把它想象成一个标准信封,里面装着你要送出去的信息。这 32 位怎么分配?我习惯把它分成五段来看:
| 位序号 | 名称 | 说明 |
|---|---|---|
| 32 | 奇偶校验位 (P) | 奇校验,确保数据完整性 |
| 31-30 | 符号/状态位 (SSM) | 表示数据正负、故障或无效状态 |
| 29-11 | 数据场 (Data Field) | 19 位,存放实际数据 |
| 10-9 | 源/目标标识符 (SDI) | 区分同一数据来自哪个子系统 |
| 8-1 | 标签 (Label) | 8 位,标识数据类型 |
注意,这里有个坑:位序号是从 32 往下数的,不是从 1 往上。我第一次看手册时差点被搞晕,后来习惯了就好。实际传输时,先发低位(LSB),也就是标签的 Bit 1 先出去。
重要提醒: 32 位字中,标签在最末尾(8-1 位),但传输时最先发出。这个顺序千万别搞反,否则你收到的数据全是乱的。
2.2 标签(Label):数据的“身份证”
标签是 8 位的,用八进制表示。比如 001、203、377 这些。每个标签对应一种特定的参数。举个例子:
- 001:高度(气压高度)
- 203:地速
- 310:航向
- 377:备用/测试字
我个人习惯把常用标签抄在一张纸上贴在工位旁边。你想想看,调试时如果记不住标签,翻手册翻到崩溃。ARINC 429 规范里定义了上百个标准标签,但实际项目中,飞机制造商往往会自定义一部分。我记得在某项目中,客户要求用标签 377 传一个自定义的维护数据,结果跟标准定义冲突了,排查了好久才发现是标签重了。
小技巧: 调试时,先用逻辑分析仪抓一下总线上的标签列表,看看哪些标签在活跃。这比对着手册猜快多了。
2.3 数据编码方式:BNR 与 BCD
数据场有 19 位,怎么解读?ARINC 429 主要支持两种编码:BNR(二进制补码)和 BCD(二进制编码的十进制)。
2.3.1 BNR 编码
说白了,就是用二进制补码表示数值。19 位数据中,最高位(Bit 29)是符号位,0 为正,1 为负。剩下的 18 位表示数值。举个例子:
// 假设数据场为 0x3C000(二进制:011 1100 0000 0000 0000)
// 符号位为 0,表示正数
// 数值部分:111 1000 0000 0000 0000 = 0x78000
// 如果 LSB 权重为 0.5 英尺,则高度 = 0x78000 * 0.5 = 245760 英尺
// 嗯,这个高度有点离谱,实际中要结合量程看
BNR 的好处是计算快,适合做数学运算。但缺点是不直观,你没法一眼看出数值。我在项目中遇到过一个问题:某高度传感器用 BNR 编码,但 LSB 权重是 0.25 英尺,而接收端默认是 0.5 英尺,结果高度差了整整一倍。这种坑,你不亲自踩一次,很难记住。
2.3.2 BCD 编码
BCD 就友好多了。19 位数据每 4 位表示一个十进制数字,从低位到高位排列。比如:
// 数据场:0x12345
// 拆成 BCD:0001 0010 0011 0100 0101
// 对应十进制:1 2 3 4 5
// 如果表示航向,就是 123.45°
BCD 编码的优点是直观,调试时用万用表看数据线电平,都能大概猜出数值。但缺点是浪费位,19 位只能表示 5 位十进制数,效率不如 BNR。
| 特性 | BNR | BCD |
|---|---|---|
| 数据密度 | 高(19 位可表示 ±262143) | 低(19 位最多 5 位十进制) |
| 直观性 | 差 | 好 |
| 运算效率 | 高(CPU 直接处理) | 低(需转换) |
| 常见用途 | 高度、速度、加速度 | 航向、经纬度、频率 |
注意: 同一个标签,不同飞机制造商可能用不同的编码方式。比如标签 001 在波音上用 BNR,在空客上可能用 BCD。拿到接口控制文档(ICD)后,第一件事就是确认编码方式。
2.4 传输速率:高速与低速
ARINC 429 只有两种速率:
- 高速: 100 kbps(千位每秒)
- 低速: 12.5 kbps(千位每秒)
为什么会这样?说白了,这是当年硬件水平的限制。100 kbps 已经能覆盖大部分飞行参数了。我建议你记住一个经验:关键参数用高速,非关键参数用低速。比如高度、空速这些,必须用高速;而客舱温度、燃油量这些,低速就够了。
另外,一个 429 总线上只能有一种速率。你不能在同一根线上混着跑高速和低速,否则接收端会乱掉。我曾经见过一个设计,把高速和低速设备挂在同一根总线上,结果低速设备一直报错。嗯,这种低级错误,犯过一次就不会再犯了。
2.5 电气特性:差分信号与电平
ARINC 429 用的是差分信号,两根线:A 和 B。电平标准是这样的:
| 逻辑状态 | A 线电平 | B 线电平 | 差分电压 |
|---|---|---|---|
| 逻辑 1(高) | +5V | 0V | +5V |
| 逻辑 0(低) | 0V | +5V | -5V |
| NULL(空闲) | 0V | 0V | 0V |
注意,429 总线在空闲时是 NULL 状态,不是逻辑 0。这一点跟 RS-485 不一样。我刚开始做硬件时,用示波器看 429 总线,发现空闲时两根线都是 0V,还以为电路坏了。后来才知道,这就是正常的 NULL 状态。
电气特性要点:
- 差分信号,抗干扰能力强
- 每根线对地阻抗:75Ω ±5%
- 线间电容:不超过 100 pF
- 最大传输距离:约 100 米(高速时)
- 一个发送器最多驱动 20 个接收器
你想想看,为什么用差分?因为飞机上电磁环境太恶劣了,发动机点火、雷达发射、各种电机干扰,单端信号根本扛不住。差分信号共模抑制比高,哪怕两根线同时被干扰,差分电压依然稳定。这个设计思路,到现在还在用。
硬件调试小贴士: 用示波器看 429 信号时,探头接 A 线和 B 线,用数学通道做 A-B 差分。别只看单根线,否则你看到的全是共模噪声,根本看不出有效信号。
好了,ARINC 429 的字格式、标签、编码、速率和电气特性,咱们就聊到这儿。下一节,我会带你看看怎么用软件来解析和发送 429 数据。到时候,我会拿出我当年调试时写的代码,咱们一起过一遍。