# MIL-STD-1553

MIL-STD-1553 est une norme décrivant un bus de communication largement utilisé en avionique militaire et spatiale. Elle a également été adoptée par l'OTAN sous l'appellation STANAG 3838.

## Historique

Elle a été développée sous l'égide du DoD américain à partir de 1968. La première version MIL-STD-1553A a été publiée le 30 avril 1975. La version actuelle est la MIL-STD-1553B datant du 21 septembre 1978.

## Couche physique
### Topologie

Le MIL-STD-1553 décrit un bus de données série multiplexé (half-duplex). La connexion est réalisée par l'intermédiaire d'une paire torsadée blindée par bus.
Le standard définit la présence de deux bus (A et B) afin d'assurer la redondance, mais seulement un bus est actif à chaque instant.
Il y a trois types d'équipements connectés au bus :
* Le gérant de bus ou « Bus Controller » (BC) qui orchestre les différents échanges sur le bus,
* Les abonnés ou « Remote Terminal » (RT) qui utilisent le bus pour communiquer. Il peut y en avoir jusqu'à 31 (limitation liée à l'adressage),
* Les moniteurs de bus ou « Bus Monitor » (BM) qui écoutent le bus. Il peut y en avoir plusieurs ou aucun.

### Support

Chaque paire blindée doit répondre à plusieurs caractéristiques :
* La capacité entre les 2 fils ne doit pas excéder 30 pF/ft (soit 98,4 pF/m),
* Le nombre de torsions (rotation de 360° des 2 fils) ne doit pas être inférieur à 4/ft (soit 13/m),
* L'impédance caractéristique (Z$_0$) doit être comprise entre 70 Ω et 85 Ω pour une fréquence sinusoïdale de 1 MHz,
* L'atténuation ne doit pas excéder 1,5 dB/100ft (soit 4,92 dB/100m),
* Le blindage du câble doit couvrir plus de 75 % de ce dernier.
* Les 2 extrémités du câble doivent être « bouchées » par des résistances égales à l'impédance caractéristique du câble Z$_0$ ±2 %.

### Encodage des bits

L'encodage utilisé est de type Manchester II biphasé :

### Niveaux électriques

Les niveaux électriques dépendent du couplage utilisé, avec un transformateur ou en direct, et sont différents en émission ou en réception.
Voir ces paramètres spécifiques dans les paragraphes liés au couplage.

### Temps et vitesse

La vitesse de transmission est de 1 Mbit/s :
* La stabilité à court terme (< 1 s) doit être inférieure à 0,01 %,
* La stabilité à long terme doit être inférieure à 0,1 %,
* Les temps de montée, de descente ainsi que la durée du demi-bit dépendent si le terminal est en réception (lecture) ou s'il est en émission (écriture) sur le bus.
| Mode | Bit rate | 1bit time | 1/2bit time | Fall/Rise time |
| Réception | 1 MHz ± 0,01 % | 1 µs ± 150 ns | 0,5 µs ± 150 ns | Le signal peut être sinusoïdal |
| Émission | 1 MHz ± 0,01 % | 1 µs ± 25 ns | 0,5 µs ± 25 ns | de 100 à 300 ns |

### Couplages
#### Couplage en direct

Ce couplage impose diverses contraintes :
* Le blindage du coupleur doit être connecté aux blindages du bus,
* Toutes les jonctions de bus doivent être recouvertes par le blindage de manière continue à plus de 75 %,
* Des résistances d'isolement doivent être placés entre le bus et le terminal, au plus proche ou à l'intérieur du terminal, leur valeur doit être de R = 55Ω ± 2 %,
* La longueur de la dérivation ne doit pas excéder Lmax = 1ft (soit 0,304 8 m),
* L'impédance en entrée du terminal soumis à un signal carré de fréquence comprise entre 75 kHz et 1 MHz doit être supérieure à 2kΩ,
* Le rapport du transformateur d'isolation doit être de Ni = 1:1,
* Les niveaux électriques entre les 2 lignes (A et B) de la paire blindée doivent être les suivants :
| Niveau | Ligne A <> Ligne B En réception | Ligne A <> Ligne B En émission |
| HIGH | de +1,2 V à +20 V | de +6 V à +9 V |
| LOW | de -20 V à -1,2 V | de -9 V à -6 V |

#### Couplage par transformateur

Ce couplage impose diverses contraintes :
* Le blindage du coupleur doit être connecté aux blindages du bus,
* Toutes les jonctions de bus doivent être recouvertes par le blindage de manière continue à plus de 75 %,
* Des résistances d'isolement doivent être placés entre le bus et le transformateur de couplage, leur valeur doit être de R = 0,75 x (Z0) ± 2 %,
* Le rapport du transformateur de couplage doit être de Nc = 1:1,41 ±3 %, le plus grand nombre de spires est du côté des résistances d'isolement (autrement dit, transformateur abaisseur du point de vue du terminal),
* L'impédance de sortie en circuit ouvert du transformateur de couplage soumis à une sinusoïde de tension 1 V (RMS) et de fréquence comprise entre 75 kHz et 1 MHz doit être supérieure à 3kΩ,
* Le taux de réjection de mode commun du transformateur de couplage doit être supérieur à 45dB à 1 MHz,
* La longueur de la dérivation ne doit pas excéder Lmax = 20ft (6,09 m),
* L'impédance en entrée du terminal soumis à un signal carré de fréquence comprise entre 75 kHz et 1 MHz doit être supérieure à 1kΩ,
* Le rapport du transformateur d'isolation doit être de Ni = 1:1.
* Les niveaux électriques entre les 2 lignes (A et B) de la paire blindée doivent être les suivants :
| Niveau | Ligne A <> Ligne B En réception | Ligne A <> Ligne B En émission |
| HIGH | de +0,86 V à +14 V | de +18 V à +27 V |
| LOW | de -14 V à -0,86 V | de -27 V à -18 V |

## Couche liaison de données
### Mots

Les mots de 16 bits sont encapsulés dans 20 bits décomposables en trois parties :
* Les bits 1 à 3 premiers servent de synchronisation,
* Les bits 4 à 19 (16 bits) composent le mot proprement dit,
* Le bit 20 est un bit de parité.

#### Ordre de transmission des bits

Dans un mot, les bits sont transmis en commençant par le bit nommé "bit time n°1" de poids fort, les autres suivent par ordre de force décroissante (bit time n$^o$ 2, bit time n$^o$ 3, etc.) jusqu'au bit time n$^o$ 20.
De la même manière, si une donnée est codée sur plus de 16 bits, et qu'on doit utiliser plusieurs mots pour la transmettre, c'est le mot contenant les bits de poids fort qui doit être émis en premier.

#### Synchronisation

La synchronisation est réalisée par une violation du code Manchester sur les premiers 3 bits de la trame.
Elle consiste à placer le bus au niveau HIGH pendant le temps équivalent à 1,5 bit puis au niveau LOW durant le 1,5 bit restant (« front descendant »), ou inversement (« front montant ») en fonction du type de mot (voir ci-dessous).

#### Parité

Le bit de parité est utilisé pour vérifier que le mot n'a pas été altéré pendant la transmission.
La parité est définie comme étant impaire (odd). Si le nombre de bits d'Information à "1" est paire, le bit de parité sera à "1". À l'inverse si ce nombre est impaire il sera mis à "0".
Ce mécanisme simpliste ne permet pas de se prémunir contre l'altération de 2 bits puisque dans ce cas on retombe sur la parité impaire.

#### Mot de commande
##### Sync

La synchronisation forme un « front descendant ».

##### RT address

Ce champ permet d'adresser le mot à un terminal en particulier, chaque terminal ayant une adresse unique. Les 5 bits permettent 32 adresses, cependant l'adresse « 11111 » est réservée pour contacter l'ensemble des terminaux (« broadcast »), c'est pourquoi il ne peut il y avoir que 31 terminaux connectés au bus.

##### T/R (Transmit/Receive)

Si le bit vaut :
* 0 (R) → on prévient le terminal qu'il doit recevoir des données.
* 1 (T) → on demande au terminal d'envoyer des données.

##### Sub-address or mode

Les 5 bits permettent 32 combinaisons :
* les combinaisons « 00000 » et « 11111 » sont réservées comme « mode » et permettent de dire au terminal que le champ « Data word count or mode code » doit être interprété comme un « mode code »,
* les 30 autres sont interprétées comme « Subaddress » et permettent de s'adresser à un des 30 sous-ensembles que peut compter un terminal.

##### Data word count or mode code
###### Data word count

Il s'agit :
* du nombre de mots que va recevoir le terminal si « T/R » vaut 0,
* du nombre de mots que doit envoyer le terminal si « T/R » vaut 1.
Les 5 bits permettent d'envoyer de 1 à 32 données, la valeur 0 correspond à 32 mots de données envoyées. Il ne peut pas y avoir plus de 32 mots de données envoyées à la suite dans un seul échange.

###### Mode code

Pour les combinaisons :
* de « 00000 » à « 01111 » ne nécessitent pas de réponse du terminal, mais le bit « T/R » doit être placé à 1,
* de « 10000 » à « 11111 » nécessitent une réponse composée d'un seul mot de données de la part du terminal.
| Mode code | Fonction | Bit T/R | Broadcast autorisé? | Détail |
| 00000 | Dynamic bus control | 1 | Non | Le terminal doit répondre par un mot de statut en plaçant le bit 18 (« Dynamic bus acceptance flag ») : « 1 » pour accepter le test, « 0 » pour refuser (ou si la fonction n'est pas implémentée). |
| 00001 | Synchronise (without data word) | 1 | Oui | Le terminal doit se synchroniser (reset de l'horloge interne et/ou lancement d'une séquence de synchronisation) et répondre par un mot de statut. |
| 00010 | Transmit status word | 1 | Non | Le terminal doit renvoyer le dernier mot de statut qu'il a précédemment transmis. |
| 00011 | Initiate self test | 1 | Oui | Le terminal doit initier une séquence de test et répondre par un mot de statut. |
| 00100 | Transmitter shutdown | 1 | Oui | Le contrôleur ne doit envoyer cette commande au terminal que sur un des 2 bus redondés. Le terminal doit inhiber son transmetteur sur l'autre bus et répondre par un mot de statut sur le bus resté actif. |
| 00101 | Override transmitter shutdown | 1 | Oui | Annule la commande « transmitter shutdown ». Le terminal doit répondre par un mot de statut. |
| 00110 | Inhibit terminal flag bit | 1 | Oui | Le terminal doit placer le bit 19 (« Terminal flag ») à « 0 » dans les mots de statut qu'il renvoie (afin d'inhiber le fait qu'il soit en défaut) et doit répondre par un mot de statut. |
| 00111 | Override inhibit terminal flag bit | 1 | Oui | Annule la commande « inhibit terminal flag bit ». Le terminal doit répondre par un mot de statut. |
| 01000 | Reset remote terminal | 1 | Oui | Après avoir transmis un mot de statut, le terminal doit se réinitialiser. |
| 10000 | Transmit vector word | 1 | Non | Le terminal doit répondre par un mot de statut, puis transmettre un mot de données contenant l'information « service request information » lorsque le bit du mot de statut éponyme n'est pas suffisant. |
| 10001 | Synchronise (with data word) | 0 | Oui | En plus du mot de commande, le terminal reçoit un mot de données qui contient des informations liées à la synchronisation. Le terminal doit se synchroniser (reset de l'horloge interne et/ou lancement d'une séquence de synchronisation) et répondre par un mot de statut. |
| 10010 | Transmit last command | 1 | Non | Le terminal doit répondre par un mot de statut, puis transmettre un mot de données contenant l'information les bits 4 à 19 du dernier mot de commande reçu. |
| 10011 | Transmit BIT word | 1 | Non | Le terminal doit répondre par un mot de statut, puis transmettre un mot de données contenant le résultat du BIT (Built In Test) si le terminal contient une telle fonction. |
| 10100 | Selected transmitter shutdown | 0 | Oui | Idem que la commande « transmitter shutdown », mais lorsque le nombre de bus redondés est supérieur à 2. Le numéro du bus sur lequel il faut inhiber le transmetteur est contenu dans le mot de données qui suit la commande. Le terminal doit répondre par un mot de statut. |
| 10101 | Override selected transmitter shutdown | 0 | Oui | Annule la commande « selected transmitter shutdown ». Le numéro du bus sur lequel il faut désinhiber le transmetteur est contenu dans le mot de données qui suit la commande. Le terminal doit répondre par un mot de statut. |

#### Mot de données
##### Sync

La synchronisation forme un « front montant ».

##### Data

Ce champ correspond à la donnée codée sur 16 bits.

#### Mot d'état (ou mot de statut)
##### Sync

Idem que pour le mot de commande, la synchronisation forme un « front descendant ».

##### RT address

Idem que pour le mot de commande.

##### Message error

Doit être placé à 1 pour signaler qu'un mot de données de la trame reçue n'était pas conforme (parité, nombre de bits, etc.) ou que la commande reçue n'est pas conforme.

##### Instrumentation

Doit être placé à 0 dans la majorité des cas. Il peut être utilisé pour différencier les mots de statut des mots de commande.

##### Service request

Permet au terminal de spécifier qu'il attend une action spécifique définie à l'avance de la part du contrôleur en plaçant le bit à 1.

##### Broadcast command received

Doit être placé à 1 pour signaler que la commande précédente était de type « broadcast ».

##### Busy

Doit être placé à 1 par le terminal pour dire qu'il est incapable de traiter les données reçues.

##### Subsystem flag

Doit être placé à 1 si le terminal souhaite déclarer qu'un de ses sous-systèmes est en panne et que les données ne pourront « peut-être » pas être traitées correctement.

##### Dynamic bus acceptance flag

Permet de répondre à la commande « Dynamic bus control » en plaçant le bit à 1.

##### Terminal flag

Doit être placé à 1 si le terminal souhaite se déclarer en défaut. Doit être inhibé (placé à 0) si le terminal reçoit commande « Inhibit terminal flag bit ».

### Trames

Les trames sont composées d'échanges de mots entre le BC et les RTs.
Lorsqu'un même BC ou RT transmet plusieurs mots qui se suivent, il n'y a pas d'espacement ou de gap entre eux.
Le temps de réponse à un mot d'un RT doit être compris entre 4 μs et 12 μs.
Le gap entre les trames doit être d'au moins 4 μs.
Pour les 2 temps cités ci-dessus, la durée est mesurée entre la transition HIGH/LOW du milieu du 20e bit du mot précédent et la transition HIGH/LOW du champ Sync du mot suivant (au milieu du 2e bit).
Le timeout de non-réponse est de 14 μs, en partant de la transition HIGH/LOW du milieu du 20e bit du dernier mot.
Si une nouvelle commande est reçue avant que le RT n'ait répondu à la ou aux précédentes, la dernière reçue prévaut sur toutes les autres.

#### Transfert BC → RT

Déroulement :
* Le BC émet un mot de commande de réception, suivi par les mots de données correspondant à la commande.
* Après validation des données, le RT envoie un mot d'état.

#### Transfert RT → BC

Déroulement :
* Le BC émet un mot de commande d'émission.
* Après validation de la commande, le RT envoie un mot d'état suivi par les mots de données.

#### Transfert RT → RT

Déroulement :
* Le BC émet un mot de commande de réception au RT2, suivis par un mot de commande d'émission au RT1.
* Après validation de la commande, le RT1 envoie un mot d'état suivi par les mots de données.
* Après validation des données, le RT2 envoie un mot d'état.

#### Échanges « mode code »

Les échanges se font sur le même principe que les transferts, avec ou sans données.

#### Échanges « broadcast »

Les échanges se font sur le même principe que les transferts, sauf qu'il n'y a pas de mot d'état à la fin envoyé par un RT, ceci afin d'éviter que tous les RTs tentent de le faire simultanément.

### Exemple d'un transfert RT → BC

L'image ci-dessous donne un exemple des concepts expliqués dans les sections précédentes.
Ainsi on peut voir une demande de transmission (puisque le bit 6 ou T en violet est à 1 dans le mot de commande) faite au RT adressé avec le numéro 0x03.
Les derniers 5 bits (verts) du mot de commande contiennent le nombre de mots à transmettre par le RT, ici 0x01, ce qui correspond effectivement au mot de données (en turquoise, valeur 0x02) unique suivant le mot d'état.
On remarque la différence d'amplitude du signal entre la demande du BC et la réponse du RT. Cette différence est à mettre sur le compte de la position de l'observation électrique sur le bus. Nous sommes ici plus loin du BC que du RT. Le BC est donc reçu avec une amplitude moindre que le RT.

## Avantages/Inconvénients
### Avantages

* Il est déterministe puisqu'il possède un gérant de bus,
* Il est robuste aux perturbations,
* Le mécanisme du mot d'état permet à l'équipement destinataire de vérifier que le transfert a bien été réalisé,
* Il existe un manuel définissant les modalités d'implantation, de qualification et de test : MIL-HDBK-1553.

### Inconvénients

* Dans l'avionique moderne, il commence à montrer ses limites de par son relatif faible débit et ses possibilités d'adressage,
* Il n'y a pas de somme de contrôle (hormis la parité) permettant de vérifier l'intégrité de données,
* Complexité du couplage sur le bus,
* Les transitions liées à l'encodage Manchester II biphasé entraîne un spectre fréquentiel élevé pouvant perturber d'autres équipements si le blindage n'est pas suffisant.

## Anecdotes

* L'adresse des RT est lue une seule fois lors de leur mise sous tension. Cette règle est la conséquence de pertes d'adresse survenues dans les premières versions du bus. Ces pertes d'adresse étaient dues aux vibrations engendrées par l'usage des armes de bord sur des hélicoptères de combat.
* Ce bus est utilisé dans le métro londonien.
* Ce bus est utilisé dans certains satellites de télécommunication et d'observation.

## Systèmes similaires

DIGIBUS (ou Digibus) est l'équivalent français de la norme MIL-STD-1553
Il est similaire à la norme MIL-STD-1553, il possède la même notion de contrôleur de bus, de terminal distant, de moniteur et la même vitesse de transmission.
La différence principale est que DIGIBUS sépare physiquement les données et les commandes.
'GJV289A est l'équivalent chinois de la norme MIL-STD-1553 et GOST R 52070-2003 est l'équivalent russe / soviétique de MIL-STD-1553.