title: ARINC 429
text: # ARINC 429
  
  ARINC 429 est une norme pour l'aéronautique qui décrit à la fois une architecture, une interface électrique et un protocole pour véhiculer des données numériques. Au début du XXIe siècle, ARINC 429 est le bus informatique le plus répandu sur les systèmes avioniques complexes.
  
  ## Historique
  
  La norme ARINC 429 a été développée et est maintenue par l'Airlines Electronic Engineering Committee (AEEC), comité de la société ARINC.
  
  ARINC 429 est issue de la norme ARINC 419 qui fut la première à décrire quatre topologies de bus numériques pour l'aviation commerciale, dont la première version a été publiée en 1966, et la dernière mise à jour faite en $1983^,.$
  
  La première norme ARINC 429 (429-1) a été publiée en avril 1978, et la version actuelle est la version 429-18 adoptée par l'AEEC en 2012.
  
  Elle est composée de trois parties :
  
  * Partie 1 : Description fonctionnelle, interface électrique, étiquettes, formats des mots (Mise à jour $n^o$ 18 du 29/11/2012),
  * Partie 2 : Standard pour les mots discrets (Mise à jour $n^o$ 16 du 01/12/2004),
  * Partie 3 : Techniques de transfert de fichiers (Mise à jour $n^o$ 19 du 01/06/2009).
  
  L'article traite principalement de la 1re partie de la norme.
  
  ## Couche physique
  
  ### Topologie
  
  ARINC 429 décrit un bus de données série unidirectionnel standard (simplex).
  
  La norme impose également qu'il n'y ait qu'un seul émetteur par bus. Le nombre de récepteurs peut lui aller jusqu'à 20.
  
  ### Support
  
  La connexion est réalisée par l'intermédiaire d'une paire torsadée blindée composée de deux brins (ou lignes) « A » et « B ».
  
  Le transfert des données est réalisé en différentiel entre les deux lignes de la paire.
  
  L'impédance de l'émetteur doit être maintenue en permanence à 75 ± 5 Ω quel que soit le niveau HIGH, LOW ou NULL, divisée de manière égale entre les deux lignes de la paire. Cette valeur a été choisie pour être approximativement égale à l'impédance caractéristique de la paire blindée.
  
  La résistance de chaque récepteur, entre les deux lignes (« A » et « B ») mais aussi entre chacune des lignes et la masse, doit être maintenue supérieure à 12 kΩ. Idem pour la capacitance, qui doit être inférieure à 50 pF entre les deux lignes, mais aussi entre chacune des lignes et la masse.
  
  La résistance totale des récepteurs (jusqu'à 20) mis en parallèle doit rester supérieure à 8 kΩ.
  
  ### Encodage des bits
  
  L'encodage utilisé est de type bipolaire avec retour à 0 répondant à la forme suivante :
  
  ### Niveaux
  
  Les trois niveaux utilisés pour l'encodage entre les deux brins (A et B) de la paire blindée $sont^,$ :
  
  | Niveau | Ligne A <> Ligne B Côté émetteur | Ligne A <> Ligne B Côté récepteur |
  | - | - | - |
  | HIGH | +10.0 V ± 1.0 V | de +6.5 à +13 V |
  | NULL | 0 V ± 0.5V | de +2.5 à -2.5 V |
  | LOW | -10.0 V ± 1.0 V | de -6.5 à -13 V |
  
  Côté émetteur, les niveaux entre chaque brin et la masse doivent aussi être maintenus :
  
  | Niveau | Ligne A <> Masse Côté émetteur | Ligne B <> Masse Côté émetteur |
  | - | - | - |
  | HIGH | +5.0 V ± 0.5 V | -5.0 V ± 0.5 V |
  | NULL | 0 V ± 0.25V | 0 V ± 0.25V |
  | LOW | -5.0 V ± 0.5 V | +5.0 V ± 0.5 V |
  
  Lorsque l'émetteur ne transmet rien, il place le bus à l'état NULL.
  
  ### Temps et vitesse
  
  Il existe deux vitesses de transmission 12,5 kbit/s et 100 kbit/s. Pour chacune de ces vitesses, la norme impose des temps $caractéristiques^,$ :
  
  * le taux de transfert (Bit rate),
  * la durée d'un bit (1bit time),
  * la durée d'un demi-bit (1/2bit time),
  * le temps de montée (Rise time),
  * le temps de descente (Fall time).
  
  | Bit rate | 1bit time | 1/2bit time | Rise time | Fall time |
  | - | - | - | - | - |
  | 100kbits/s ± 1 % | 10µs ± 0,25µs | 5µs ± 0,25µs | 1,5µs ± 0,5µs | 1,5µs ± 0,5µs |
  | 12,5kbits/s ± 1 % | 80µs ± 2µs | 40µs ± 2µs | 10µs ± 5µs | 10µs ± 5µs |
  
  ## Couche liaison de données
  
  ### Mots
  
  Les données sont codées sous forme de mots de 32 bits qui peuvent être découpés en cinq champs distincts :
  
  * Le bit 32 est un bit de parité,
  * Les bits 30 et 31 constituent le Sign/Status Matrix (SSM) et peut avoir plusieurs significations en fonction du type de la donnée,
  * Les bits 11 à 29 contiennent la donnée,
  * Les bits 9 et 10 constituent le Source Destination Identifier (SDI) et peut avoir plusieurs utilisations,
  * Les bits 1 à 8 contiennent le label.
  
  **Ordre de transmission des bits**
  
  L'ordre de transmission des bits est « particulier ».
  
  En effet, l'octet correspondant au label est le premier à être transmis, en commençant par le bit de poids fort. Les autres données sont ensuite envoyées telles quelles, en commençant par le bit de poids faible.
  
  Ce qui donne concrètement : 8, 7, 6, 5, 4, 3, 2, 1, 9, 10, 11, 12, 13, etc., 29, 30, 31, 32
  
  Un des intérêts de cet ordre est que l'on peut lire facilement le label (huit premiers bits) avec à un oscilloscope.
  
  **Parité**
  
  Le bit de parité est utilisé pour vérifier que le mot n'a pas été altéré pendant la $transmission^,^,.$
  
  La parité peut être définie comme paire (even) ou impaire (odd).
  
  Dans la plupart des cas, elle est impaire, ce qui signifie que le bit est positionné, lors de l'émission, de telle manière que le nombre des bits à « 1 » dans le mot est impair. Dans ce cas précis, si le nombre de bits à « 1 » est pair, à la réception, c'est qu'un des bits du mot a été altéré pendant la transmission.
  
  Ce mécanisme simple ne permet pas de se prémunir contre l'altération de deux bits puisque dans ce cas on retombe sur la parité d'origine.
  
  **Donnée**
  
  Il existe plusieurs formats d'encodage de la $donnée^,$ :
  
  * le décimal codé binaire (BCD),
  * le complément à deux encodé binaire (BNR),
  * l'agrégation de discrets (DSC).
  
  L'encodage utilisé dans un même mot peut mélanger les trois types d'encodage.
  
  **Donnée**
  
  **BNR**
  
  Dans le cas particulier du BNR, le bit 29 est utilisé pour exprimer le « signe » car le SSM est utilisé pour la $validité^,$ :
  
  | Bit 29 | Signification |
  | - | - |
  | 1 | Moins (Minus), Sud (South), Ouest (West), Gauche (Left), Depuis (From), Au-dessous (Below) |
  | 0 | Plus, Nord (North), Est (East), Droite (Right), Vers (To), Au-dessus (Above) |
  
  Les autres bits codent la donnée :
  
  * Le bit 28 est le bit de poids fort,
  * Le bit de poids faible est déterminé par le nombre de bits utilisés.
  
  Par exemple, si la donnée est encodée sur 16 bits, le bit de poids faible est le bit 14, et les bits 13, 12 et 11 sont inutilisés.
  
  La donnée binaire est encodée en complément à deux, il ne faut pas oublier le bit de signe (bit 29) lors du décodage.
  
  Si n est le nombre de bits utilisés (sans compter le bit de signe), une fois décodée, on obtient une valeur comprise entre $-2^n$ et $2^n-1$ avec une résolution de 1.
  
  Une résolution différente de 1 (parfois égale à une puissance de 2) est souvent fournie dans la documentation.
  
  Si k = $2^m$ est la résolution utilisée, on peut coder une valeur comprise entre k × $-2^n$ = $-2^{n+m}$ et k × $(2^n-1)$ = $2^{n+m}-2^m.$
  
  Dit autrement, il faut multiplier la valeur binaire pure décodée comprise entre $(-2^n$ et $2^n-1)$ par k = $2^m$ pour obtenir la valeur codée.
  
  **Donnée**
  
  **BCD**
  
  Les bits sont regroupés par quatre (bits 11/14, 15/18, 19/22, 23/26) ou par trois pour les derniers (27/29).
  
  Chaque groupe représente alors un chiffre décimal compris entre 0 et 9 (et 0 à 7 pour le dernier groupe qui est sur trois bits).
  
  Chaque chiffre possède un poids croissant différent selon une numération de position en base 10 pour former un nombre, les bits 11/14 représentant le poids faible.
  
  | Bits | Poids |
  | - | - |
  | 11/14 | $10^{n-4}$ |
  | 15/18 | $10^{n-3}$ |
  | 19/22 | $10^{n-2}$ |
  | 23/26 | $10^{n-1}$ |
  | 27/29 | $10^n$ |
  
  On peut ainsi représenter des nombres dans les plages suivantes :
  
  * entre 0,0000 et 7,9999 → pour n = 0
  * entre 00,000 et 79,999 → pour n = 1
  * entre 000,00 et 799,99 → pour n = 2
  * entre 0000,0 et 7999,9 → pour n = 3
  * entre 00000 et 79999 → pour n = 4
  
  Certains groupes de bits (les plus faibles ou les plus forts) peuvent aussi ne pas être utilisés, s'ils ne sont pas nécessaires. Il faut se référer à la documentation de l'équipement.
  
  **Donnée**
  
  **DSC**
  
  Dans le cas des discrets, chaque bit du champ de données représente une information de type tout ou rien.
  
  Il arrive que les bits soient regroupés par petits groupes afin de former une information plus détaillée.
  
  **SSM**
  
  Ce champ indique la plupart du temps la validité de la donnée, mais il peut avoir des significations différentes, comme le signe ou l'orientation, en fonction du type de la $donnée^,^,^,.$
  
  Il peut aussi avoir une signification particulière choisie par l'équipementier, c'est pourquoi il faut toujours se référer à la documentation technique de l'équipement émetteur.
  
  **SSM**
  
  **BNR**
  
  | Bit 31 | Bit 30 | Signification |
  | - | - | - |
  | 0 | 0 | Failure warning |
  | 0 | 1 | No computed data |
  | 1 | 0 | Functional test |
  | 1 | 1 | Normal operation |
  
  **SSM**
  
  **BCD**
  
  | Bit 31 | Bit 30 | Signification |
  | - | - | - |
  | 0 | 0 | Plus, Nord (North), Est (East), Droite (Right), Vers (To), Au-dessus (Above) |
  | 0 | 1 | No computed data |
  | 1 | 0 | Functional test |
  | 1 | 1 | Moins (Minus), Sud (South), Ouest (West), Gauche (Left), Depuis (From), Au-dessous (Below) |
  
  **SSM**
  
  **DSC**
  
  | Bit 31 | Bit 30 | Signification |
  | - | - | - |
  | 0 | 0 | Verified data / Normal operation |
  | 0 | 1 | No computed data |
  | 1 | 0 | Functional test |
  | 1 | 1 | Failure warning |
  
  **SDI**
  
  Ce champ peut être utilisé de deux $manières^,^,^,$ :
  
  * pour définir le récepteur de la donnée sur un bus ayant plusieurs récepteurs. Par exemple : si sur un même bus, on connecte deux équipements identiques mais sur lesquels on veut envoyer des informations différentes, il suffit de configurer le premier équipement pour qu'il ne lise que les données avec le champ SDI placé à « 01 » et de la même manière le deuxième équipement avec le champ SDI « 02 ». L'émetteur n'a plus qu'à modifier le champ SDI en fonction de l'équipement auquel il désire envoyer la donnée.
  * pour définir quel sous-système de l'émetteur a émis la donnée. Par exemple : si on dispose d'un équipement émetteur hybride « centrale inertielle / GPS », lorsque l'on veut envoyer la position (label 010), on place le champ SDI à « 01 » lorsqu'il s'agit de la position inertielle, et à « 02 » lorsqu'il s'agit de la position GPS. Les récepteurs peuvent ainsi choisir parmi les deux positions en fonction du champ SDI.
  
  Il est souvent inutilisé et placé à « 00 ».
  
  **Label**
  
  Le label est l'identifiant de la donnée codé sur huit bits. Il peut prendre 256 valeurs différentes. Le bit 1 représente le bit de poids fort, le bit 8 le bit de poids $faible^,^,.$
  
  Dans la documentation, il est exprimé en octal.
  
  La spécification ARINC A429 comprend un certain nombre de directives sur les labels pour les rendre plus ou moins standards.
  
  La General Aviation Manufacturers Association (GAMA) a également publié un ajout à la norme pour fixer ou modifier un certain nombre de ces directives.
  
  En effet, chaque avion contient de nombreux systèmes différents, tels que les calculateurs de vol, les centrales inertielles, le GPS… Pour chaque type d'équipement, un ensemble de paramètres standard est défini, largement partagé par tous les fournisseurs d'équipements.
  
  Par exemple, tout « Air Data Computer » donnera l'altitude barométrique de l'avion sur le label 204. Cela permet un certain degré d'interchangeabilité des équipements. Il y a seulement un nombre limité de labels, et donc, le label 204 peut avoir une signification totalement différente s'il est émis par un GPS, par exemple.
  
  C'est pourquoi il faut toujours se référer à la documentation technique de l'équipement.
  
  ### Exemple d'un mot
  
  L'image ci-dessous montre un mot ARINC 429, produit par exemple par un générateur NAV429, et capturé à l'aide d'un oscilloscope.
  
  Dans ce cas particulier, les bits 11 à 29 (données) contiennent des jours, des mois et des millisecondes.
  
  Un oscilloscope restitue un signal dans l'ordre chronologique d'apparition de l'information. Ceci explique pourquoi le label est au début de la transmission. (Voir Ordre de transmission des bits).
  
  ### Trames
  
  Les trames sont composées de plusieurs mots de 32 bits espacés par au moins quatre bits à l'état NULL (utiles pour la synchronisation sur le mot $suivant)^,.$
  
  L'ordre des mots n'est pas imposé.
  
  ## Avantages/Inconvénients
  
  ### Avantages
  
  * La topologie est simple (facile d'approche, fiable, etc.),
  * Il est déterministe puisque n'ayant qu'un seul émetteur par bus, il n'y a aucun risque de collision.
  
  ### Inconvénients
  
  * Le nombre et donc le poids des nombreuses paires de fils à installer est important,
  * Dans l'avionique moderne, il est plus que limité par son faible débit et ses possibilités d'adressage (labels),
  * Il n'y a pas de somme de contrôle (hormis la parité) permettant de vérifier l'intégrité de données,
  * Le récepteur ne peut pas acquitter la bonne réception des données, hormis si on met en place un second bus en retour.
  
  ## Développement de systèmes basés sur le bus ARINC 429
  
  Quelques firmes proposent des circuits intégrés dédiés, ou ASIC, permettant d'interfacer des bus ARINC 429 à un microprocesseur. Certains de ces ASICs intègrent y compris les récepteurs et les émetteurs de ligne, et ne requièrent qu'une alimentation de 3,3 volts. Leur interface avec le microprocesseur peut être de type parallèle, mais elle prend de plus en plus la forme d'un bus série, par exemple de type SPI, ce qui réduit le nombre de fils d'interconnexion et simplifie le circuit imprimé.
  
  Dans les calculateurs embarqués complexes, il est souvent nécessaire de mettre en œuvre plusieurs microprocesseurs et FPGAs. Il est alors fréquent de réaliser la gestion du protocole des lignes ARINC 429 sous forme de logique câblée à l'intérieur de l'un des FPGA. Il existe pour cela des blocs d'IP (Semiconductor intellectual property core (en)) disponibles sur le marché. Avec cette approche, les circuits intégrés dédiés se limitent aux récepteurs et émetteurs de ligne.
  
  Dans les phases de mise au point, il peut être utile d'observer directement la forme des signaux sur les lignes ARINC. C'est notamment nécessaire pour s'assurer que les temps de montée et de descente, ainsi que les niveaux de tension imposés par la norme sont respectés. Un oscilloscope capable de réaliser l'acquisition et l'analyse des signaux est alors privilégié. Un tel instrument est capable de se synchroniser sur un mot ARINC 429 particulier et de présenter une coloration spécifique de chacun des champs du mot. La photo illustrant le chapitre "Exemple d'un mot" ci-dessus est un oscillogramme affiché par ce type d'instrument.
  
  Quand il s'agit de faire des essais sur le terrain (par exemple les essais sol d'un avion), un oscilloscope est trop encombrant. On privilégie alors les analyseurs de bus portatifs. Certaines réalisations modernes sont extrêmement compactes et mettent en œuvre une liaison Bluetooth et l'écran d'un smartphone pour leur interface utilisateur.
  
  