Retour au menu : Accueil - Index général - Les transmissions numériques |
Principe de la synchronisation Les trames APRS sont transmises en mode synchrone. Pour reconstituer chaque octet, le programme de décodage doit repérer dans le flux de "0" et de "1" le premier bit d'un octet pour synchroniser le groupement des bits en paquets de 8. Cette opération se fait dès le début de la réception, en recherchant dans le flux un groupe de 8 bits formant un octet de valeur 0x7E, c'est à dire une suite de 6 bits à "1" encadrée par deux "0" soit "01111110" Lorsqu'il a trouvé un flag de début, le programme n'a plus qu'à rechercher un octet différent de 0x7E pour en conclure qu'il a trouvé le début de la trame, c'est à dire le premier octet du champ "adresses", la fin de trame étant marquée par un flag identique. Mais, si dans le corps de la trame il se trouve un groupe de 6 bits à "1" entre deux "0", ce qui peut se produire en moyenne une ou deux fois par trame, le programme en déduira par erreur qu'il a trouvé un flag de fin. La solution trouvée pour éviter cet inconvénient est de casser les suites de 6 bits à "1" dans le corps de la trame. Cette solution est appelée "bit-stuffing" que l'on peut traduire par "bourrage de bits" ou, dans le cas de l'APRS, "bourrage de zéros". Le bourrage de zéro Lors de la transmission, le programme compte le nombre de bits à "1" successifs et, lorsqu'il arrive à 5 il émet un bit à "0" puis reprend la transmission normale après avoir remis son compteur de "1" à zéro. A la réception, c'est un peu le même principe qui est appliqué : dès que 5 bits à "1" successifs ont été comptés, le programme ignore le zéro qui suit. Remarque : si le caractère suivant la série de 5 bits est lui-même un "1", autrement dit si la série de bits comporte 6 bits à "1", le programme de décodage en déduit qu'il s'agit d'un flag. Exemple : Soit la série d'octets suivant : "01010001001111100001001100101011000001110011110100000011001000110" qui se traduit par : "E>djp^`b" On y repère une suite de cinq "1" (en rouge) suivie de plusieurs "0". En supprimant le premier zéro suivant (en vert) comme ci-dessous : "0101000100111110001001100101011000001110011110100000011001000110", le décodage permet de reconstituer le véritable contenu de la trame : "E>258/01" Cette règle très simple semble pourtant comporter une exception. L'exception Pour une raison non élucidée, le bourrage de zéro n'est pas appliqué systématiquement. Les spécifications publiées sur Internet sont très peu détaillées sur ce point mais l'examen des trames captées sur le réseau APRS montrent que l'octet de PID de valeur "0xF0", donc transmis sous la forme "00001111" après transposition des bits (voir : format d'émission des caractères), était parfois suivi par une série de bits dont le premier est à "1" comme dans l'exemple ci-dessous (les espaces ont été ajouté pour faciliter la lecture) : "11101110 11000000 00001111 10000010" Dans ce cas, il ne faut surtout pas supprimer le zéro (de couleur verte ici) qui suit la série de "1" (ni en bourrer un au moment de l'émission). Résumé Lors de l'émission de la partie de la trame comprise entre les deux flags de début et de fin, une série de 5 bits à "1" doit être suivie par l'insertion d'un "0" sauf lorsque les quatre premiers bits de la série sont ceux du PID. Documentation Sites en français : High-Level Data Link Control sur Wikipédia Couche liaison de données sur Wikipédia Documents en anglais : 1200 Baud Packet Radio Details : site de N1VG. How to Send AX.25 UI Frames Using Inexpensive PIC Microprocessors par John Hansen, W2FS AX.25 Amateur Packet-Radio Link-Layer Protocol |