Skip to content

ARINC 429

Overview

ARINC 429 is the predominant avionics data bus standard used in commercial transport aircraft. It defines a unidirectional, point-to-point serial data bus operating at 12.5 kHz (low speed) or 100 kHz (high speed).

Key Facts

  • Word size: 32 bits
  • Bus topology: Single transmitter, up to 20 receivers
  • Encoding: Bipolar Return-to-Zero (RZ)
  • Speeds: 12.5 kbps (low) / 100 kbps (high)
  • Usage: Air data, navigation, engine, flight controls

Word Format

Bit 32   Bits 31-30   Bits 29-11        Bits 10-9    Bits 8-1
┌───────┬──────────┬──────────────────┬───────────┬──────────────┐
│Parity │   SSM    │    Data Field    │    SDI    │    Label     │
│(odd)  │ (2 bits) │   (19 bits)      │ (2 bits)  │  (8 bits)    │
└───────┴──────────┴──────────────────┴───────────┴──────────────┘
  MSB                                                        LSB

Field Descriptions

Field Bits Description
Label 1-8 Equipment identifier (octal, BIT-REVERSED)
SDI 9-10 Source/Destination Identifier
Data 11-29 Payload (BNR, BCD, or Discrete)
SSM 30-31 Sign/Status Matrix
Parity 32 Odd parity over bits 1-31

Label Bit Reversal

Critical Implementation Detail

The label field uses reversed bit order. The label is specified in octal notation, but stored in the word with bits reversed. Bit 1 (LSB of word) contains the MSB of the label.

Label 0310 (octal) = binary 11_001_000

In word (reversed): bit1=1, bit2=1, bit3=0, bit4=0, bit5=1, bit6=0, bit7=0, bit8=0
Wire byte: 0x13 (reversed from 0xC8)

SSM Interpretation

SSM Meaning
00 Failure Warning
01 No Computed Data
10 Functional Test
11 Normal Operation
SSM Meaning
00 Plus / North / East / Right / To
01 No Computed Data
10 Functional Test
11 Minus / South / West / Left / From

Data Encoding

BNR (Binary Number Representation)

Two's complement scaled integer. The MSB of the data field is the sign bit.

Resolution = Range / 2^(significant_bits - 1)
Value = raw_integer × Resolution

Example: Barometric Altitude (Label 203)

  • Range: ±131,072 feet
  • Significant bits: 18 (including sign)
  • Resolution: 131,072 / 2^17 = 1 ft/bit
  • +35,000 ft → data field = 35000 = 0x88B8

BCD (Binary Coded Decimal)

Each decimal digit encoded in 4 bits. Supports up to 5 digits in the 19-bit data field.

Example: VOR Frequency (Label 110)

  • 115.30 MHz encoded as BCD: 1-1-5-3-00001_0001_0101_0011_0000

API Reference

Core Functions

#include "arinc429.h"

// Encode a word structure to 32-bit wire format
uint32_t a429_encode(const a429_word_t *decoded);

// Decode 32-bit wire word to fields (returns parity validity)
bool a429_decode(uint32_t word, a429_word_t *decoded);

// Label conversion (octal ↔ reversed wire format)
uint8_t a429_label_from_octal(uint16_t octal_label);
uint16_t a429_label_to_octal(uint8_t reversed_label);

// Parity
uint8_t a429_compute_parity(uint32_t word);
bool a429_verify_parity(uint32_t word);

// BNR encode/decode
uint32_t a429_bnr_encode(double value, double range, int data_bits);
double a429_bnr_decode(uint32_t data, double range, int data_bits);

// BCD encode/decode
uint32_t a429_bcd_encode(uint32_t value);
uint32_t a429_bcd_decode(uint32_t data);

Usage Example

#include "arinc429.h"

// Encode altitude of 35,000 feet
a429_word_t word = {
    .label    = 0xC8,  // Label 310 (binary, not reversed)
    .sdi      = 0,
    .data     = a429_bnr_encode(35000.0, 131072.0, 18),
    .ssm      = A429_SSM_NORMAL_OP,
    .encoding = A429_ENC_BNR
};

uint32_t wire = a429_encode(&word);  // 32-bit word for transmission

// Decode received word
a429_word_t decoded;
bool valid = a429_decode(wire, &decoded);
double altitude = a429_bnr_decode(decoded.data, 131072.0, 18);
// altitude ≈ 35000.0

Build & Run

make -C src/aerospace/arinc429
./build/arinc429_demo

Output:

=== ARINC 429 Bit-Level Codec Verification ===
Word size: 32 bits | Label: 8b reversed | Data: 19b | Parity: odd
...
=== RESULTS: 50 passed, 0 failed ===
=== ALL TESTS PASSED ===

Common Labels

Label (Octal) Parameter Encoding Range
203 Baro Altitude BNR ±131,072 ft
206 Airspeed BNR 0-1024 kts
314 True Heading BNR ±180°
310 Selected Altitude BNR 0-65,536 ft
110 VOR Frequency BCD 108.0-117.95 MHz
012 Distance to Go BNR 0-4096 NM

References

  • ARINC Specification 429, Part 1-18
  • ARINC Report 429P1-18 (2004)