1. ARINC 429 协议基础:电气特性、字格式、数据编码、传输速率

各位同学,咱们今天正式开讲ARINC 429。说实话,这个协议年纪比我还大,但你别小看它。我在航电系统里摸爬滚打这么多年,见过无数新协议来了又走,但ARINC 429至今还在波音737、空客A320上跑得欢。为什么?因为它够简单、够可靠。

好,咱们先从最底层的电气特性说起。这部分你要是搞不明白,后面写代码、调板子都会踩坑。

1.1 电气特性:双绞线上的差分信号

ARINC 429用的是差分信号传输。说白了,就是两根线拧在一起,一根传正信号,一根传负信号。接收端看的是两根线的电压差,而不是对地的绝对电压。

为什么要这么设计?抗干扰。飞机上电磁环境多复杂啊,发动机点火、雷达发射、各种大功率设备。差分信号有个好处:外界干扰会同时耦合到两根线上,一减就抵消了。嗯,这就是共模抑制。

具体参数我列个表,你记一下:

参数 高速模式 低速模式
标称电压摆幅 ±10V ±10V
差分阻抗 78Ω ± 5Ω 78Ω ± 5Ω
共模电压范围 0V ~ +5V 0V ~ +5V
上升/下降时间 1.5μs ± 0.5μs 10μs ± 5μs

重要:ARINC 429的电气电平是±10V,不是TTL的5V,也不是RS-232的±12V。我曾经见过一个新手直接把429信号接到单片机的GPIO上,结果嘛...芯片冒烟了。所以,一定要用专用的收发器芯片,比如HI-8582或者DEI1016。

还有一个细节:总线是单向的。什么意思?一根线上只能有一个发送器,但可以挂最多20个接收器。发送器负责推数据,接收器只管听。你要是想双向通信,就得拉两根线,一根发一根收。

1.2 字格式:32位的固定结构

ARINC 429的数据单元叫"字"(Word),固定32位。不像以太网帧那样可长可短,429的字就是32位,少一位都不行。

这32位怎么分配的呢?我画个图给你看:

位序号:  31-30 | 29-11 | 10-9 | 8-1
         ------+-------+------+-----
         标号  |  数据  | SDI  | SSM

咱们从右往左看:

  • 位1-8:标号(Label)——这是最重要的8位。它告诉接收端,这个字里装的是什么数据。比如标号"001"表示高度,"005"表示空速。标号是八进制表示的,你写代码时要注意。
  • 位9-10:源/目标标识符(SDI)——2位。用来区分同一个数据来自哪个设备。比如左发动机和右发动机,可以用SDI来区分。
  • 位11-29:数据区(Data)——19位。真正的数据就装在这里。可以是BNR编码(二进制),也可以是BCD编码(二-十进制)。
  • 位30-31:符号状态矩阵(SSM)——2位。表示数据的质量。比如"00"表示故障,"11"表示正常。

我的经验:调试时最容易搞混的就是标号的字节序。ARINC 429的标号是低位在前、高位在后。比如标号八进制"001",在总线上的位顺序是"10000000"。我第一次写驱动时没注意这个,结果读出来的数据全是乱的。后来我养成了一个习惯:拿到标号表,先手动转一遍位顺序,再写代码。

1.3 数据编码:BNR和BCD

ARINC 429支持两种数据编码方式:BNR和BCD。你想想看,为什么要有两种?因为不同的数据适合不同的编码。

BNR(二进制编码)

  • 数据区19位,最高位是符号位(0正1负),剩下18位是数值。
  • 适合表示连续变化的量,比如角度、压力、转速。
  • 分辨率取决于量程和位数。比如量程0-360°,18位分辨率就是360/2^18 ≈ 0.00137°。

BCD(二-十进制编码)

  • 每4位表示一个十进制数字,19位可以表示4个半数字。
  • 适合表示离散值,比如经纬度、频率、代码。
  • 人眼直接可读,调试方便。

举个例子,同样是表示高度10000英尺:

BNR编码:数据区 = 0 0010 0111 0001 0000 00(二进制)
         符号位=0(正),数值=10000

BCD编码:数据区 = 0001 0000 0000 0000 000(BCD)
         表示"10000"

注意:BNR编码中,数据是带符号的。我曾经在项目里遇到过一个bug:高度数据在负值时(比如下降过程中),符号位处理错了,导致显示的高度忽高忽低。排查了两天才发现是符号扩展没做好。所以,处理BNR数据时,一定要先检查符号位,再做数值转换。

1.4 传输速率:高速和低速

ARINC 429只有两种速率:

  • 高速模式:100 kbps——用于关键数据,比如飞行控制指令。
  • 低速模式:12.5 kbps——用于非关键数据,比如客舱温度、燃油量。

为什么只有两种?因为飞机上的设备对实时性要求不一样。飞控数据必须快,客舱温度慢一点无所谓。而且,低速模式抗干扰能力更强,适合长距离传输。

一个字的传输时间怎么算?很简单:

高速模式:32位 / 100,000 bps = 320μs
低速模式:32位 / 12,500 bps = 2.56ms

也就是说,高速模式下每秒能传约3125个字,低速模式下每秒约390个字。嗯,这个吞吐量跟现在的千兆以太网没法比,但在航电领域,够用了。

我的建议:设计系统时,尽量把关键数据放在高速总线上,非关键数据放在低速总线上。别把所有数据都塞到高速总线里,那样反而会增加总线负载。我见过一个项目,设计者把所有数据都放在高速总线上,结果总线利用率超过80%,偶尔出现丢字现象。后来把非关键数据挪到低速总线,问题就解决了。

1.5 小结

好了,ARINC 429的基础部分就讲到这里。咱们回顾一下:

  • 电气特性:差分信号,±10V,单向总线,78Ω阻抗匹配。
  • 字格式:32位固定长度,包含标号、SDI、数据、SSM四个字段。
  • 数据编码:BNR适合连续量,BCD适合离散量。
  • 传输速率:高速100kbps,低速12.5kbps。

下一章咱们要讲ARINC 429的通信机制和协议栈实现。到时候我会带着你手写一个429的发送驱动,从寄存器配置到中断处理,一步步来。嗯,那才是真正有意思的部分。

记住一句话:ARINC 429虽然老,但它是航电通信的基石。你把429搞透了,后面学AFDX、CAN Aerospace都会轻松很多。