X-Modem



Die hier wiedergegebenen Abläufe dienen einzig der Kurzübersicht. Für detailierte Informationen sind einzig die Unterlagen von Ohmen Techn. und AT&T zuständig.

Im "Automode" sendet der Empfänger zur Modi-Erkennung zuerst das Kennbyte für das von ihm höchste unterstützte X-Modem Format.



(1k)WX-Modem CRC = 'W' (1k)X-Modem CRC = 'C' X-Modem (Csum) = NAK (15h) (nur 128byte/Paket)

Wird innerhalb von 10 Sekunde kein erstes Datenpaket empfangen, so wir das Zeichen noch zwei weitere Male wiederholt. Ist anschließend immer noch kein Datenpaket empfangen worden, so wird auf den nächst-niedrigeren Modi umgeschaltet und der Vorgang wiederholt. Nach Sendung von 3x NAK ohne ein Datenpaket zu erhalten, wird der Transfer mit 3 CAN-Zeichen abgebrochen.
Wird ein Datenpaket empfangen, jedoch die 1k/Paket-Variante nicht unterstützt, wird dieses Paket mit einem NAK vorzeitig beantwortet, was zum "framing-break" führt, wodurch auf 128byte/Paket im Sender umgeschalten wird und der erste Datensatz in diesem Mode nochmals zum Versand kommt. In allen Modi, bis auf WX-Modem CRC, wartet der Sender nach jedem Paket max. 1sek. auf eine Quittung des Empfängers durch ACK bzw. NAK. Im Fehlerfall oder ausbleibender Quittung wird das Paket max. noch 3x wiederholt. Im WX-Modem CRC -Modi muß der Empfänger nicht jedes Paket einzeln quittieren und der Senden wartet auch nicht nach jedem Paket. Es gilt eine Window-size von 4 Paketen. D.h. Der Sender versendet direkt hintereinander 4 Pakete und, sollte er noch keine Quittung für eines der Pakete in der Zwischenzeit erhalten haben, wartet erst anschließend auf eine Quittung. Eine Quittung stellt somit aber auch gleich eine Bestätigung für die vorherigen bislang unquittierten Paket dar. Somit wird mit einem ACK[2] auch das Paket [1] quittiert. Ein Fehler hingegen wird mit einem NAK[n] gemeldet, wobei [n] die Paketnummer des fehlerhaften Paketes ist und gleichzeitig alle bereits durch den Sender noch direkt anschließend versendeten Pakete ablehnt. Dies führt zur Wiederholung der Pakete ab [n]. Am Ende eines Transfers wird das letzte Paket mit EOF (1Ah) ggf. aufgefüllt und anschließend der Transfer mit einem EOT (04h) beendet. Während der Übertragung kann im Fehlerfall, der nicht durch eine Wiederholung behoben werden kann, der Sender sowie der Empfänger den Transfer durch ein CAN (18h) abbrechen. Des weiteren sind zur zeitlichen Syncronisation noch die Mechanismen nach X-On / X-Off sowie SYN / DLE verwendbar. D.h. ist der Empfänger nicht bereit für ein nächstes Frame, so sendet er X-Off oder SYN an den Sender. Ist der Empfänger wieder bereit, so sendet er zur Wiederaufnahme des Transfers ein X-On bzw. beendet das Senden von SYN. Dauert dem Sender die Pause zu lange, so kann dieser die Übertragung bei X-On / X-Off durch ein CAN, bei SYN durch ein DLE beenden.

Konstanten:



SOH = 01h header for 128byte-pakets STX = 02h header for 1024byte-pakets ACK = 06h acknowledge NAK = 15h negativ acknowledge CAN = 18h cancel transfer EOT = 04h end of transmission EOF = 1Ah end of file X-On = 11h transmit on X-Off = 13h transmit off SYN = 16h syncronous idle DLE = 10h data link escape

Parameter:

< s > = SOH 128byte data STX 1024byte data < c > = Csum standard X-Modem (1byte) CRC-16 CRC-16 (2byte) < k > = NAK X-Modem with Csum 'C' CRC-16 'W' WX-Modem < n > = none present all other than WX-Modem Nr & 03h WX-Modem ° = in WX-Modem not for every frame required good for every two frames required after four frames Nr,#Nr = frame-counter begins with 01h up to FFh the loop to 00h .. FFh -> if first frame with 00h - ignore and answer ACK (Y-Modem)

Nebenbedingungen:



* if data in last frame less than paketsize the transmitter add's EOF (1Ah) to data up to frame-size * if a CAN received of ACK/NAK from the receiver or < s > from the transmitter than leave/abort the X-Modem transfer * if a received frame-number the same at the last answer ACK and ignore the frame otherwise send a NAK * if in WX-Modem and a frame-number is over next needed frame or under window-size answer NAK with the required frame-number * syncronisation: - search a < s > - if next bytes a valid frame-number ->begin of frame - if not -> search next < s > up to 135/1040bytes