Seri Protokoller
TEKNİK REHBER SERİ PROTOKOLLER ARINC 429 2026

ARINC 429
sivil havacılık veri bus'ı.

Airbus A320'den Boeing 777'ye, A380'den B787'ye — sivil havacılığın veri omurgası. 32-bit word, diferansiyel hat, tek yönlü güvenilirlik.

00 ARINC 429 nedir?

ARINC 429, Airlines Electronic Engineering Committee (AEEC) tarafından 1977'de yayımlanan sivil havacılık avioniği için standart bir veri bus'ıdır. "ARINC Mark 33 Digital Information Transfer System (DITS)" olarak da bilinir.

ARINC 429, tek yönlü (simplex) iletişim prensibine dayanır: bir transmitter aynı anda en fazla 20 receiver'a veri gönderebilir. Bu tasarım kararı, güvenilirliği maksimize eder — bir receiver arızası diğer receiver'ları veya transmitter'ı etkilemez.

PlatformAviyonik sistemLabel örneği
Airbus A320ADIRU (Air Data/Inertial Reference Unit)Label 203: Baro Altitude
Boeing 737 NGFMC (Flight Management Computer)Label 101: GMT Hours
Boeing 777AIMS (Airplane Information Management System)Label 311: True Heading
Airbus A380TCAS (Traffic Collision Avoidance System)Label 130: Selected Altitude
Airbus A350IRS (Inertial Reference System)Label 324: Ground Speed
Bombardier CRJEFIS (Electronic Flight Instrument System)Label 206: Computed Airspeed
Embraer E-JetADC (Air Data Computer)Label 210: Mach Number

Tarihsel bağlam

ARINC 429'dan önce her uçak üreticisi kendi tescilli veri bus'ını kullanıyordu; bu durum bakım karmaşıklığını ve maliyeti artırıyordu. AEEC'nin 1977'de yayımladığı bu standart, sivil havacılıkta birlikte çalışabilirliği (interoperability) garanti altına aldı. Bugün dünyada hizmet veren binlerce ticari uçak ARINC 429 kullanmaktadır.

NOT

ARINC (Aeronautical Radio, Incorporated), havacılık elektroniği standartlarını yayımlayan kuruluştur. 429 numarası, standardın ARINC belge kataloğundaki numarasıdır. Standardın tam adı "ARINC Specification 429: Digital Information Transfer System" olup Supplement 17 ile hâlâ güncellenmektedir.

01 Fiziksel katman

ARINC 429 diferansiyel twisted pair kablo kullanır. RS-485'e benzer görünse de gerilim seviyeleri, kodlama ve hız seçenekleri belirgin biçimde farklıdır.

Sinyal seviyeleri (Return-to-Zero)

  Wire A (pozitif): ─────┐    ┌────┐    ┌────
                         │    │    │    │
  Wire B (negatif): ─────┘    └────┘    └────

  HIGH  : Wire A = +10V, Wire B = -10V  (diferansiyel: +20V)
  NULL  : Wire A =  0V,  Wire B =  0V   (diferansiyel:   0V)
  LOW   : Wire A = -10V, Wire B = +10V  (diferansiyel: -20V)

  Her bit NULL ile başlar ve biter (Return-to-Zero modülasyonu).
  Logic 1 = HIGH-to-NULL geçiş
  Logic 0 = LOW-to-NULL geçiş
    
ParametreDeğerAçıklama
Sinyal seviyesi±10 V (±1V tolerans)Diferansiyel, return-to-zero
High Speed100 kbps ± 1%Uçuş kontrol, ADC, IRS
Low Speed12,5 kbps ± 1%Yakıt yönetimi, kabin ekipmanları
Kablo empedansı78 Ω (54–86 Ω arası)Shielded twisted pair
Maks. kablo uzunluğuTasarıma bağlı (tipik <100 m)Attenüasyon ve kapasitans sınırlar
Transmitter sayısı1 (simplex)Yayın hattı: sadece bir transmitter
Receiver sayısıMaks. 20Hat üzerinde eş zamanlı dinleyici
Word aralığıMin. 4 bit süresi boşlukMesajlar arası NULL süresi

RS-485'ten farkı

Gerilim seviyeleriRS-485: ±1,5V diferansiyel. ARINC 429: ±10V diferansiyel. ARINC 429 çok daha yüksek sinyal seviyesi kullanarak gürültü bağışıklığını artırır — jet uçağı gövdesindeki yüksek EMI ortamı için kritik.
Return-to-ZeroARINC 429 her bit arasında NULL seviyeye döner. RS-485 NRZ (Non-Return-to-Zero) kullanır. RZ kodlama, gömülü saat bilgisi sağlar — ayrı saat hattı gerekmez.
YönelimRS-485 yarı veya tam çift yönlü çalışabilir. ARINC 429 yalnızca tek yönlü (simplex) çalışır. Bu kısıtlama güvenlik tasarımı gereğidir.
HızRS-485: 10 Mbps'e kadar. ARINC 429: maks. 100 kbps. Havacılık uygulamalarının veri ihtiyacına yönelik optimize edilmiş.
GERİLİM UYARISI

ARINC 429 hat seviyeleri ±10V'tur. Standart 3,3V veya 5V mantık devrelerini doğrudan bu hatta bağlamak kalıcı hasar verir. ARINC 429 alıcı/verici çipleri (örn. Holt HI-3593, HI-8596) mutlaka gereklidir.

02 32-bit word yapısı

Her ARINC 429 word 32 bittir ve her zaman LSB (bit 1) önce iletilir. 5 alan içerir: Label, SDI, Data, SSM ve Parity.

  İletim sırası (bit 1 önce, bit 32 son):
  Bit:   1 ... 8   9  10   11 ......... 29  30  31  32
        ┌─────────┬────┬───────────────┬────┬───┐
        │  LABEL  │SDI │    DATA       │SSM │ P │
        │ (8 bit) │(2b)│   (19 bit)    │(2b)│1b │
        └─────────┴────┴───────────────┴────┴───┘
         octal ile   src/dst  BNR/BCD/  status parity
         tanımlanır  tanımı   Discrete

  Wire üzerinde: Bit 1 ilk iletilir (Label LSB önce = bit-reversal!)
    

Label (Bits 1–8)

Label, iletilen parametreyi tanımlar. ARINC 429'da label değerleri octal (sekizlik) sayı sistemi ile ifade edilir ve bit-reversed (ters sıralı) olarak iletilir.

Label (octal)Label (decimal)ParametreFormat
203131Baro Corrected AltitudeBNR, feet
206134Computed AirspeedBNR, knots
210136Mach NumberBNR, Mach
311201True HeadingBNR, degrees
324212Ground SpeedBNR, knots
10165UTC HoursBCD
10468Date (Day)BCD
13088Selected Altitude (MCP)BNR, feet
270184Discrete Word 1Discrete

SDI (Bits 9–10)

SDI (Source/Destination Identifier), aynı label'ı gönderen birden fazla sistem arasında ayrım yapılmasını sağlar. Örneğin üç ADC olduğunda SDI = 01 (Left), 10 (Right), 11 (Centre) anlamına gelebilir. SDI = 00 genellikle "tüm alıcılar" veya "kullanılmıyor" anlamındadır.

SSM (Bits 30–31) — Sign/Status Matrix

SSMBNR/BCD veri içinDiscrete veri için
00Failure Warning — veri geçersizVerified data, normal operation
01No Computed Data — hesaplanamadıNormal operation
10Functional Test — test moduNo Computed Data
11Normal Operation — veri geçerliFailure Warning
ÖNEMLİ

Bir aviyonik sistemi ARINC 429 verisi alırken her zaman SSM kontrolü yapmalıdır. SSM = Normal Operation olmayan verileri kullanmak hatalı hesaplamalara yol açabilir. Airbus A320 ADIRU çıkışlarında, sensör arızası durumunda SSM = Failure Warning set edilir ve FMS bu veriyi reddeder.

Parity (Bit 32)

ARINC 429 odd parity kullanır: bit 1–32'nin toplamındaki 1'lerin sayısı daima tek olmalıdır. Tek bit hataları bu yöntemle tespit edilir.

03 Veri kodlama formatları

ARINC 429'da veri alanı (bits 11–29) üç temel formatla kodlanabilir: BNR (Binary), BCD (Binary Coded Decimal) ve Discrete. Hangi format kullanıldığı, label numarasıyla belirlenir.

BNR (Binary Number Representation)

BNR, en yaygın ARINC 429 formatıdır. Analog ölçüm değerlerini (yükseklik, hız, açı) ikili sayı sistemiyle ifade eder.

  Bit 29 = İşaret biti (Sign): 0 = pozitif, 1 = negatif
  Bit 28 = MSB (en yüksek değerlikli bit)
  ...
  Bit 11 = LSB (en düşük değerlikli bit)

  Örnek: Label 203 (Baro Corrected Altitude)
    Range:      -1280 to +131071.75 feet
    Resolution: 0.25 feet / LSB
    Bits 29-11: 19 bit sign-magnitude
    
python — BNR encode/decode
def bnr_encode(value: float, resolution: float,
               n_data_bits: int = 18) -> int:
    """
    ARINC 429 BNR encode: float deger -> data field bitleri (bits 11-29)
    n_data_bits: isaret biti haric veri bit sayisi (tipik 18)
    resolution: 1 LSB gercek degeri (ornek: 0.25 feet icin)
    Donus: bits 11-29 (19 bit) olarak ham integer
    """
    sign = 1 if value < 0 else 0
    magnitude = int(abs(value) / resolution) & ((1 << n_data_bits) - 1)
    return (sign << n_data_bits) | magnitude

def bnr_decode(raw_field: int, resolution: float,
               n_data_bits: int = 18) -> float:
    """ARINC 429 BNR decode: data field bitleri -> float deger"""
    sign      = (raw_field >> n_data_bits) & 1
    magnitude = (raw_field & ((1 << n_data_bits) - 1)) * resolution
    return -magnitude if sign else magnitude

def calc_odd_parity(word: int) -> int:
    """Bit 32 parity hesapla (odd): 1-31 bitlerin 1 sayisi cift ise 1 don"""
    ones = bin(word & 0x7FFFFFFF).count('1')
    return 0 if ones % 2 != 0 else 1

# Label 203: Baro Corrected Altitude = 35000 ft
LABEL_203_OCT  = 0o203
LABEL_WIRE     = int(f"{LABEL_203_OCT:08b}"[::-1], 2)  # bit-reversed

data_field = bnr_encode(35000.0, resolution=0.25)
sdi        = 0b01      # Left ADC
ssm        = 0b11      # Normal Operation

word32  = LABEL_WIRE
word32 |= (sdi        << 8)
word32 |= (data_field << 10)
word32 |= (ssm        << 29)
word32 |= (calc_odd_parity(word32) << 31)

print(f"Label 203 | 35000 ft: 0x{word32:08X}")

# Decode: gelen word'den altitude oku
rx_word   = word32
rx_label  = rx_word & 0xFF
rx_ssm    = (rx_word >> 29) & 0x3
rx_data   = (rx_word >> 10) & 0x7FFFF

if rx_ssm == 0b11:  # Normal Operation
    altitude = bnr_decode(rx_data, resolution=0.25)
    print(f"Altitude: {altitude:.2f} ft")
else:
    print(f"Veri gecersiz! SSM={rx_ssm:02b}")

BCD (Binary Coded Decimal)

BCD formatı, zaman bilgisi (saat, dakika), tarih ve benzeri sayısal değerler için kullanılır. Her 4 bit bir BCD basamağını temsil eder.

python — BCD decode (Label 101: UTC Hours)
def decode_bcd_time(word32: int) -> int:
    """Label 101 (UTC Hours): BCD decode"""
    data    = (word32 >> 10) & 0x7FFFF
    tens    = (data >> 14) & 0xF  # bits 24-27
    units   = (data >> 10) & 0xF  # bits 20-23
    return tens * 10 + units

# Saat 14 -> BCD tens=1, units=4
# word32 ornegi (Label 101, saat 14):
label101_word = (0b10000000) | (0b11 << 29)  # sadelestirilmis
label101_word |= (0x1 << 24) | (0x4 << 20)  # tens=1, units=4
print(f"UTC Hours: {decode_bcd_time(label101_word)}")

04 Önemli label'lar

ARINC 429'da 256 olası label değeri (octal 000–377) vardır. Standart, her label için parametre adı, veri formatı, çözünürlük ve güncelleme hızını tanımlar.

Hava verisi (Air Data) label'ları

Label (oct)ParametreFormatRangeResolutionGüncelleme
203Baro Corrected AltitudeBNR-1280 to +131072 ft0,25 ft50 ms
204Baro Alt (coarse)BNR-1280 to +131072 ft4 ft50 ms
206Computed Airspeed (CAS)BNR0–512 kt0,25 kt50 ms
210Mach NumberBNR0–4 Mach0,001 Mach50 ms
213True Airspeed (TAS)BNR0–1024 kt0,5 kt50 ms
221Static PressureBNR0–32 PSI0,125 PSI50 ms
234Total Air TemperatureBNR-128 to +128 °C0,25 °C250 ms

Navigasyon label'ları

Label (oct)ParametreFormatRangeResolution
310Magnetic HeadingBNR0–360°0,0055°
311True HeadingBNR0–360°0,0055°
312Wind SpeedBNR0–512 kt0,5 kt
313Wind Direction (True)BNR0–360°0,0055°
324Ground SpeedBNR0–4096 kt1 kt
361LatitudeBNR±90°0,0000021°
362LongitudeBNR±180°0,0000021°

Label octal / decimal dönüşümü

python — label dönüsüm yardımcısı
def oct_to_wire_byte(octal_str: str) -> int:
    """Octal label string -> wire byte (bit-reversed)"""
    dec  = int(octal_str, 8)
    bits = f"{dec:08b}"
    return int(bits[::-1], 2)

def wire_byte_to_oct(byte_val: int) -> str:
    """Wire byte -> octal label string"""
    bits = f"{byte_val:08b}"
    dec  = int(bits[::-1], 2)
    return oct(dec).replace('0o', '').zfill(3)

# Ornekler:
for lbl in ["203", "206", "311", "101"]:
    wire = oct_to_wire_byte(lbl)
    back = wire_byte_to_oct(wire)
    print(f"Label {lbl}oct ({int(lbl,8)}dec) -> wire: 0x{wire:02X} -> back: {back}oct")

05 Linux ARINC 429 sürücüleri

Linux altında ARINC 429 donanımı SPI çipleri, PCI kartlar veya USB arayüzleri üzerinden erişilebilir.

Holt HI-3593 SPI Çipi

Holt Integrated Circuits'ın HI-3593 çipi, 2 alıcı (receiver) + 1 verici (transmitter) içeren bir ARINC 429 SPI arayüz çipidir. Raspberry Pi veya BeagleBone ile doğrudan entegre edilebilir.

bash — HI-3593 SPI sürücüsü
# SPI arayüzü etkinleştir (Raspberry Pi):
sudo raspi-config
# Interface Options -> SPI -> Enable

# SPI kernel modülünü yükle:
sudo modprobe spi-bcm2835

# HI-3593 ornek surucu:
git clone https://github.com/avionics/hi3593-linux-driver.git
cd hi3593-linux-driver
make && sudo make install

# Device tree overlay ekle:
sudo nano /boot/config.txt
# dtoverlay=hi3593,speed=12500000

# Cihaz dosyaları:
ls /dev/arinc429_*
# /dev/arinc429_0  (TX)   /dev/arinc429_1 (RX1)   /dev/arinc429_2 (RX2)
c — /dev/arinc429_0 ile word gönderme
#include <fcntl.h>
#include <unistd.h>
#include <stdint.h>
#include <stdio.h>

static uint32_t calc_odd_parity(uint32_t w) {
    int ones = __builtin_popcount(w & 0x7FFFFFFF);
    return (ones % 2 == 0) ? (1u << 31) : 0;
}

int main(void) {
    int fd = open("/dev/arinc429_0", O_WRONLY);
    if (fd < 0) { perror("open"); return 1; }

    /* Label 203 (oct) bit-reversed: 0b11000100 = 0xC4 */
    uint32_t word = 0xC4;

    /* SDI = 01 (Left ADC), bits 9-10 */
    word |= (0x1u << 8);

    /* BNR: 35000 ft, resolution=0.25 -> 140000 = 0x22360, bits 11-28 */
    word |= ((uint32_t)140000 << 10);

    /* SSM = 11 (Normal Op), bits 30-31 */
    word |= (0x3u << 29);

    /* Parity bit 32 */
    word |= calc_odd_parity(word);

    write(fd, &word, sizeof(uint32_t));
    printf("Gonderildi: 0x%08X\n", word);
    close(fd);
    return 0;
}

AIM GmbH ARINC 429 PCI Kartı

bash — AIM ARINC429 kart kurulumu
# AIM kart tespiti:
lspci | grep -i aim
# 04:00.0 Signal processing controller: AIM GmbH ARINC429 PCIe

# AIM Linux surucusu:
sudo modprobe aim_arinc429

# Kanal yapılandırma:
aim_config --card 0 --ch 1 --mode TX --speed high
aim_config --card 0 --ch 2 --mode RX --speed high --filter 203,206,311

06 Python simülasyonu

Gerçek donanım olmadan ARINC 429 word'lerini encode/decode etmek ve veri akışını simüle etmek için saf Python yeterlidir.

python — tam ARINC429 word sınıfı
import struct

class Arinc429Word:
    """32-bit ARINC 429 word encode / decode yardimci sinifi"""

    SSM_FAILURE      = 0b00
    SSM_NO_COMPUTED  = 0b01
    SSM_FUNC_TEST    = 0b10
    SSM_NORMAL       = 0b11

    def __init__(self, label_oct: int, sdi: int = 0,
                 ssm: int = 0b11):
        self.label_oct  = label_oct   # octal integer, orn. 0o203
        self.sdi        = sdi & 0x3
        self.ssm        = ssm & 0x3
        self._data_bits = 0

    def _label_wire(self) -> int:
        """Label byte bit-reversed"""
        bits = f"{self.label_oct:08b}"
        return int(bits[::-1], 2)

    def set_bnr(self, value: float, resolution: float) -> None:
        sign = 1 if value < 0 else 0
        mag  = int(abs(value) / resolution) & 0x3FFFF  # 18 bit
        self._data_bits = (sign << 18) | mag

    def get_bnr(self, resolution: float) -> float:
        sign = (self._data_bits >> 18) & 1
        mag  = (self._data_bits & 0x3FFFF) * resolution
        return -mag if sign else mag

    def to_uint32(self) -> int:
        w  = self._label_wire()
        w |= (self.sdi          << 8)
        w |= (self._data_bits   << 10)
        w |= (self.ssm          << 29)
        ones = bin(w & 0x7FFFFFFF).count('1')
        if ones % 2 == 0:
            w |= (1 << 31)
        return w

    @classmethod
    def from_uint32(cls, raw: int) -> 'Arinc429Word':
        label_wire = raw & 0xFF
        label_oct  = int(f"{label_wire:08b}"[::-1], 2)
        sdi        = (raw >> 8)  & 0x3
        ssm        = (raw >> 29) & 0x3
        obj = cls(label_oct, sdi, ssm)
        obj._data_bits = (raw >> 10) & 0x7FFFF
        return obj

# Kullanim ornekleri:
w = Arinc429Word(0o203, sdi=1, ssm=Arinc429Word.SSM_NORMAL)
w.set_bnr(35000.0, resolution=0.25)
raw = w.to_uint32()
print(f"Altitude 35000 ft  : 0x{raw:08X}")

w2 = Arinc429Word(0o311, sdi=0, ssm=Arinc429Word.SSM_NORMAL)
w2.set_bnr(274.5, resolution=0.0055)
print(f"Heading 274.5 deg  : 0x{w2.to_uint32():08X}")

# Decode:
received = Arinc429Word.from_uint32(raw)
print(f"Decoded altitude   : {received.get_bnr(resolution=0.25):.2f} ft")
print(f"SSM                : {received.ssm:02b}")

07 ARINC 629 ve modern alternatifler

ARINC 429'un tek yönlü sınırlaması ve düşük hızı, modern uçaklar için daha kapasiteli alternatiflerin geliştirilmesini zorunlu kıldı.

ARINC 629 (Boeing 777)

ARINC 629, Boeing ve Honeywell'in B777 için geliştirdiği iki yönlü (bi-directional) havacılık veri bus'ıdır. 2 Mbps hız, maks. 120 LRU (Line Replaceable Unit) desteği ve CSDB (Current Source Data Bus) fiziksel katmanıyla 429'un önemli bir evrimi oldu.

ÖzellikARINC 429ARINC 629AFDX (ARINC 664)
Hız100 kbps2 Mbps100 Mbps
TopolojiPoint-to-point simplex busÇok noktalı çift yönlüStar (switch tabanlı)
Max. cihaz20 receiver / hat120 LRUTeorik sınırsız
DeterminizmYüksek (sabit rate)Yüksek (TDMA)Orta (BAG garanti)
UygulamaTüm ticari uçaklarSadece B777A380, A350, B787
StandartARINC Spec 429ARINC Spec 629ARINC Spec 664 Part 7

AFDX — Avionics Full-Duplex Switched Ethernet

Airbus A380 2005'te hizmete girdiğinde AFDX dünya havacılığında devrim yarattı. 100 Mbps Ethernet altyapısı üzerine inşa edilen bu sistem, sanal bağlantılar (Virtual Links) ve bant genişliği tahsisi (BAG — Bandwidth Allocation Gap) ile deterministik iletim garantisi sağlar. Boeing 787 Dreamliner de aynı teknolojiyi benimsedi.

Virtual Links (VL)AFDX'te her veri akışı bir Virtual Link üzerinden iletilir. Her VL'nin maks. bant genişliği ve gecikme garantisi önceden tanımlanır — bu sayede tek bir ethernet kablosu üzerinden yüzlerce farklı aviyonik veri akışı deterministik biçimde taşınır.
Redundancy ManagementAFDX çift yollu (Dual Star) topoloji kullanır: her uç nokta iki bağımsız anahtara (switch) bağlıdır. A380'de iki ayrı AFDX ağı (Cabin ve Avionics) bulunur.
SAFEbus / TTPBoeing 777 AIMS kabinetlerindeki yüksek hızlı backplane (ARINC 659 SAFEbus, 60 Mbps) ile Airbus A380'in bazı motor kontrol sistemlerinde TTP/C (Time-Triggered Protocol) kullanılır.

08 Test ekipmanları ve geliştirme

ARINC 429 sistemlerinin doğrulanması için özelleşmiş test ekipmanları ve geliştirme kartları mevcuttur.

Astronics AltaView ARINC 429 Analyzer

bash — AltaView komut satırı
# Kanal 1'de 100 kbps RX, label 203 ve 206'yı izle (30 sn):
altaview_429 --card 0 --ch 1 --mode RX --speed high \
             --filter-labels 203,206,311 --duration 30 \
             --output adc_capture.a429

# Kaydı CSV'ye çevir:
altaview_decode --input adc_capture.a429 --format csv \
                --output adc_data.csv

# Hata raporu:
altaview_stats --input adc_capture.a429
# Total words:        12450
# Parity errors:          0
# Bit format errors:      2
# Label 203 count:     3780  (19.1 ms rate)
# Label 206 count:     3780  (19.1 ms rate)
# Label 311 count:     1890  (38.2 ms rate)

Geliştirme kartları

KartÜreticiArayüzTX/RXKullanım
HI-3593 Eval KitHolt ICSPI1TX / 2RXPrototip, Raspberry Pi entegrasyon
AIT-429 PCIAvionics Interface TechnologiesPCIe4TX / 8RXLab testi, simülasyon
AIM-429 USBAIM GmbHUSB 2.02TX / 4RXSaha testi, laptop bağlantısı
DDC BU-67118Data Device CorpPMC/XMC8TX / 16RXUçuş test donanımı
DO-254 DONANIM SERTİFİKASYONU

ARINC 429 alıcı/verici devrelerinin havacılık sertifikasyonu DO-254 (Design Assurance Guidance for Airborne Electronic Hardware) kapsamında yapılır. DAL-A veya DAL-B seviyesi için gereksinimler şunlardır: donanım plan dökümanı, şema incelemesi, FMEA (Failure Modes and Effects Analysis), test prosedürleri ve DER onayı. HI-3593 gibi ticari çipler COTS olarak kullanılırken ek yeterlilik belgelendirmesi gerekebilir.

09 Pratik: ADC simülasyonu ve baro altitude encoding

Raspberry Pi + Holt HI-3593 SPI kartı kullanarak basit bir Air Data Computer (ADC) simülatörü oluşturuyoruz. Bu simülatör, atmosferik basınç sensöründen okuduğu veriyi ARINC 429 Label 203 formatında yayınlar.

Donanım bağlantısı

  Raspberry Pi 4B         HI-3593 Eval Board
  ─────────────────       ──────────────────
  SPI0 MOSI (GPIO 10) ──→ SDI
  SPI0 MISO (GPIO 9)  ←── SDO
  SPI0 SCLK (GPIO 11) ──→ SCLK
  CE0   (GPIO 8)      ──→ /CS
  GPIO 25             ←── /ARINC_INT (alici kesme)
  3.3V                ──→ VCC (3.3V besleme)
  GND                 ──→ GND

  HI-3593 ARINC TX1 OUT A/B ──→ 429 bus (differansiyel, +-10V)
  HI-3593 ARINC RX1 IN  A/B ←── 429 bus alici
    
python — RPi + HI-3593 ADC simülatörü
import spidev, time, struct
import smbus2  # BMP280 basinc sensörü için

# ─── ARINC 429 word yardımcıları ──────────────────────────────
def label_wire(octal: int) -> int:
    return int(f"{octal:08b}"[::-1], 2)

def bnr_data(value: float, resolution: float) -> int:
    sign = 1 if value < 0 else 0
    mag  = int(abs(value) / resolution) & 0x3FFFF
    return (sign << 18) | mag

def build_word(label_oct: int, sdi: int, ssm: int,
               data_19: int) -> int:
    w  = label_wire(label_oct)
    w |= (sdi    << 8)
    w |= (data_19 << 10)
    w |= (ssm    << 29)
    ones = bin(w & 0x7FFFFFFF).count('1')
    if ones % 2 == 0:
        w |= (1 << 31)
    return w

# ─── HI-3593 SPI TX fonksiyonu ────────────────────────────────
def hi3593_transmit(spi: spidev.SpiDev, word32: int) -> None:
    """HI-3593 TX1: 32-bit ARINC word SPI ile gönder (MSB first)"""
    # HI-3593 TX komutu: 0xA0 + 4 byte data
    cmd  = [0xA0]
    cmd += list(struct.pack(">I", word32))  # big-endian
    spi.xfer2(cmd)

# ─── BMP280 basınçtan irtifa hesabı ───────────────────────────
def pressure_to_altitude_ft(pressure_pa: float,
                              baro_setting_pa: float = 101325.0) -> float:
    """ISA modeli: basınçtan irtifa (feet)"""
    ratio    = pressure_pa / baro_setting_pa
    alt_m    = 44330.0 * (1.0 - ratio ** 0.1903)
    return alt_m * 3.28084  # metre -> feet

# ─── Ana döngü ────────────────────────────────────────────────
spi = spidev.SpiDev()
spi.open(0, 0)   # SPI0, CE0
spi.max_speed_hz = 1_000_000
spi.mode = 0

i2c = smbus2.SMBus(1)  # BMP280 I2C bus

print("ADC simülasyonu başlıyor — ARINC 429 Label 203 yayını...")
try:
    while True:
        # BMP280'den ham basıncı oku (sadelestirilmis)
        raw_p = i2c.read_i2c_block_data(0x77, 0xF7, 3)
        p_pa  = ((raw_p[0] << 12) | (raw_p[1] << 4) | (raw_p[2] >> 4)) * 0.25

        # Basınçtan irtifa (feet, ISA)
        alt_ft = pressure_to_altitude_ft(p_pa)

        # Label 203: Baro Corrected Altitude
        data = bnr_data(alt_ft, resolution=0.25)
        word = build_word(label_oct=0o203, sdi=1, ssm=0b11,
                          data_19=data)

        hi3593_transmit(spi, word)
        print(f"TX Label 203: {alt_ft:.1f} ft  | 0x{word:08X}")
        time.sleep(0.05)  # 50 ms = 20 Hz
except KeyboardInterrupt:
    spi.close()
    print("Durduruldu.")
GERÇEK ADC SİSTEMİ

Airbus A320'de üç ayrı ADC (Air Data Computer) bulunur: Left, Right ve Standby. Her ADC, pitot tüpü ve statik port verilerinden baro basıncını, hava hızını ve mach sayısını hesaplar; sonuçları ARINC 429 üzerinden FMGC (Flight Management and Guidance Computer), EFIS ve otopilot bilgisayarlarına gönderir. Üç ADC'nin SDI değerleri birbirinden farklıdır, böylece alıcı sistemler hangi ADC'den veri geldiğini anlayabilir ve çapraz karşılaştırma (ECAM monitörü) yapabilir.