Skip to content

ARINC 615A

Overview

ARINC 615A defines the data loading protocol for transferring software to avionics Line Replaceable Units (LRUs) over Ethernet. It uses a TFTP-like transport with specialized discovery, status, and abort mechanisms.

Key Facts

  • Transport: UDP (TFTP-based, port 69)
  • Block size: 512 bytes (standard TFTP)
  • Integrity: CRC-32 per file
  • Phases: Find → Information → Upload → Status
  • Abort: Supported from any state

Protocol Phases

stateDiagram-v2
    [*] --> IDLE
    IDLE --> FINDING: Find Request
    FINDING --> INFORMING: Find Response
    INFORMING --> UPLOADING: Info Response
    UPLOADING --> COMPLETING: All files transferred
    COMPLETING --> DONE: Status = Complete

    FINDING --> ABORTED: Abort
    INFORMING --> ABORTED: Abort
    UPLOADING --> ABORTED: Abort
    COMPLETING --> ABORTED: Abort

    ABORTED --> [*]
    DONE --> [*]

Phase 1: Find (LRU Discovery)

The data loader broadcasts a Find Request to discover target LRUs on the network.

Phase 2: Information (Identification)

Query the target for hardware/software configuration before loading.

Phase 3: Upload (File Transfer)

Transfer one or more files using TFTP block-by-block protocol:

Loader                          Target
  │───── Upload Init ──────────►│
  │◄──── ACK ──────────────────│
  │───── Data Block 1 ─────────►│
  │◄──── ACK ──────────────────│
  │───── Data Block 2 ─────────►│
  │◄──── ACK ──────────────────│
  │  ...                         │
  │───── Data Block N (< 512B)─►│  ← Short block = end of file
  │◄──── ACK ──────────────────│
  │───── Upload Complete ───────►│

Phase 4: Status (Verification)

Poll the target for upload status until complete or error.

API Reference

#include "arinc615a.h"

// Session management
void a615a_session_init(a615a_session_t *session);
int a615a_add_file(a615a_session_t *session, const char *filename,
                   const uint8_t *data, size_t size);

// State machine
void a615a_session_advance(a615a_session_t *session, a615a_opcode_t op);

// Block transfer
bool a615a_get_next_block(a615a_session_t *session, uint8_t *block, size_t *len);
double a615a_get_progress(const a615a_session_t *session);

// Message construction
size_t a615a_build_find_req(const char *target_pn, uint32_t session_id,
                            uint8_t *buf, size_t buf_len);
size_t a615a_build_status_req(uint32_t session_id, uint8_t *buf, size_t buf_len);

// CRC-32 (file integrity)
uint32_t a615a_crc32(const void *data, size_t len);

Build & Run

make -C src/aerospace/arinc615a
./build/arinc615a_demo

Output:

=== ARINC 615A Data Loading Protocol Verification ===
...
=== RESULTS: 43 passed, 0 failed ===
=== ALL TESTS PASSED ===

References

  • ARINC Specification 615A-4 (2007)
  • ARINC 665-3 (LSP format compatibility)