TECHNICAL NOTES · AVIONICS
Decoding an ARINC 429 BNR word, bit by bit
ARINC 429 is decades old and still flies on a great many aircraft. Its 32-bit word is simple — until a decoder reads the label backwards or turns a small negative altitude into 260 894 ft. Here is one word, built and taken apart by hand.
The word
| BITS | FIELD | NOTE |
|---|---|---|
| 1–8 | Label | octal; sent most-significant bit first |
| 9–10 | SDI | source/destination identifier, or data |
| 11–28 | Data | BNR magnitude, MSB at bit 28; unused low bits zero |
| 29 | Sign | BNR two's-complement sign |
| 30–31 | SSM | sign/status matrix |
| 32 | Parity | odd parity over all 32 bits |
A word is sent bit 1 first. The data field goes least-significant bit first, but the label goes most-significant bit first — so if you hold the word as a 32-bit integer with bit 1 as the least significant bit, the label appears bit-reversed. That is the single most common decoding bug. The bus runs at 100 kbit/s (high speed) or 12–14.5 kbit/s (low speed), with at least four bit-times of null between words.
BNR scaling
A BNR parameter is defined by its range and its number of significant bits, and its resolution is range ÷ 2significant bits. Take an altitude parameter with a range of 131 072 ft and 17 significant bits: the resolution is 1 ft, bit 28 weighs 65 536 ft, the data occupies bits 28 down to 12, and bit 11 is zero padding. With the sign, bits 29–12 hold an 18-bit two's-complement number of feet. The real label, range and resolution of every parameter come from your ICD or equipment specification — not from this note.
Encoding 35 000 ft
- Label 203 (octal) is 10 000 011 in binary. Sent MSB first, bit 1 carries the leading 1, so bits 8…1 read 11000001.
- SDI = 00.
- Data: 35 000 = 01000100010111000 in bits 28–12; bit 11 = 0; sign bit 29 = 0.
- SSM = 11, normal operation.
- Parity: the other 31 bits hold 11 ones — already odd — so bit 32 = 0.
32 · 31–30 · 29 · 28–12 · 11 · 10–9 · 8–10 · 11 · 0 · 01000100010111000 · 0 · 00 · 11000001 = 0x6445C0C1
Encoding −1 250 ft
Negative values are two's complement across sign and data: −1 250 in 18 bits is 111111101100011110, so sign bit 29 = 1 and bits 28–12 = 11111101100011110. With the same label, SDI and SSM, the other 31 bits hold 18 ones — even — so parity bit 32 = 1:
1 · 11 · 1 · 11111101100011110 · 0 · 00 · 11000001 = 0xFFD8F0C1
Read bits 29–12 as unsigned and the same word decodes to 260 894 ft — the classic symptom of a missing sign extension.
Decoding, in order
- Check parity first, and discard words with even parity.
- Reverse bits 1–8 to recover the label, then route by label — and by SDI, where it is used.
- Check the SSM before using the value. For BNR: 11 normal operation, 10 functional test, 01 no computed data, 00 failure warning.
- Extract bits 29–12 for this parameter, sign-extend, and multiply by the resolution.
Then range-check against the ICD: a word can be perfectly well-formed and still physically impossible.
Where AETHER fits
DYNAMIS works through avionics interfaces like this one — ICD fields, scaling, status handling — with the bit arithmetic executed as code rather than estimated, so a word like 0xFFD8F0C1 can be built, decoded and checked against its definition in one traceable step.
Related notes
- The link budget that passes at zenith and fails at 10°
- AI-generated flight code under DO-178C
- Requirements traceability that survives a certification audit
Published · 9 October 2026 · All technical notes