Document fait avec Nvu Document made with Nvu




Protocole XMODEM

Instructions
Utilisation
Exemple

Principe

Le protocole XMODEM permet d'effectuer des transferts de fichiers par blocs de 128 octets avec détection d'erreur et correction par répétition.

Voici un exemple de transfert de données sous protocole XMODEM avec:

<soh> = 0x01
<nak> = 0x15
<ack> = 0x06
<eot> = 0x04
<données> = 128 octets de données
<xx > = somme de la ligne (de <soh> à <données> inclus)

Emetteur
 
Récepteur
   
attente de 10 secondes au maximum
 
<<<
<nak>
<soh> 0x01 0xFE <données> <xx>
>>>
 
 
<<<
<ack>
<soh> 0x02 0xFD <données> <xx>
>>>
erreur de transmission
 
<<<
<nak>
<soh> 0x02 0xFD <données> <xx>
>>>
répétition avec succès
 
<<<
<ack>
<soh> 0x03 0xFC <données> <xx>
>>>
 
 
<<<
<ack>
<eot>
>>>
 
 
<<<
<ack>


Instructions

- XMODEM_TAMPON adresse

Adresse du tampon d'émission/réception de 128 octets

- XMODEM_BLOC adresse

Variable contenant le numéro de bloc en cours de transfert

- XMODEM_TEMPO adresse

Variable pour gestion des temporisations liées au protocole

- INPUT_FILE? nbr_octets

Instruction donnant le nombre d'octets disponibles dans INPUT_FILE

- RS232_RECEIVE_FILE? nbr_octets

Instruction donnant le nombre d'octets disponibles dans RS232_RECEIVE_FILE

- RS232_TRANSMIT_FILE? nbr_octets

Instruction donnant le nombre d'octets disponibles dans RS232_TRANSMIT_FILE

- OUTPUT_FILE? nbr_octets

Instruction donnant le nombre d'octets disponibles dans OUTPUT_FILE

- T_XMODEM_CONNECTE adresse

Tâche de gestion XMODEM (remplace T_RS232_CONNECTE pendant la durée du transfert)

rec/emi XMODEM_OUVRE erreur

Ouverture d'un transfert XMODEM en émission si rec/emi est nul et en réception sinon.
erreur est nul lorsque l'opération est correcte

- XMODEM_OCTET_RECOIT octet,erreur

Réception d'un octet.
erreur est nul si l'octet est valide, sinon la réception est terminée

octet XMODEM_OCTET_EMET erreur

Emission d'un octet.
erreur est nul si l'émission est correcte

- XMODEM_FERME -

Fin du transfert en émission ou en réception

adresse XMODEM_RECOIT longueur

Réception d'un fichier à l'adresse spécifiée sur la longueur (en octets) indiquée en fin de transfert

adresse,longueur XMODEM_EMET -

Emission d'un fichier situé à l'adresse et sur la longueur (en octets) spécifiées


Utilisation

Le transfert d'un fichier nécessite l'utilisation des instructions suivantes:

  • XMODEM_OUVRE,
  • XMODEM_OCTET_RECOIT ou XMODEM_OCTET_EMET,
  • XMODEM_FERME.

L'utilisateur doit démarrer un transfert par l'instruction "XMODEM_OUVRE" avec une valeur nulle dans le cas d'une émission, et non nulle dans le cas d'une réception. Un code d'erreur nul indique que le transfert peut s'effectuer correctement.

L'instruction "XMODEM_FERME" doit impérativemen être exécutée à la fin d'une opération d'émission d'un fichier. Le dernier bloc sera complété automatiquement par des octets de bourrage (à 0), transféré et suivi de l'émission du caractère de fin de texte (eot).

Les fichiers peuvent être transférés en utilisant le logiciel "Hyperterminal" sur PC ou "Apple works terminal" sur MAC.


Exemple

Pour illustrer cette page, voici le code des instructions "XMODEM_RECOIT" et "XMODEM_EMET":

: XMODEM_RECOIT ( adresse --> longueur )
 -1 XMODEM_OUVRE
 IF
  DROP 0
 ELSE
  0
  BEGIN
   XMODEM_OCTET_RECOIT
   IF
    DROP -1
   ELSE
    3 PICK C! >R 1+ R> 1+ 0
   THEN
  UNTIL
  SWAP DROP
 THEN
 XMODEM_FERME
;

: XMODEM_EMET ( adresse, longueur --> - )
 0 XMODEM_OUVRE
 IF
  DROP
 ELSE
  0 DO
   DUP C@ XMODEM_OCTET_EMET
   IF
    LEAVE
   THEN
   1+
  LOOP
 THEN
 DROP XMODEM_FERME
;