Difference between revisions of "Protocols"
Line 20: | Line 20: | ||
Each block contains a sequence number. When a block with the same number as the previous one is received, the receiver ignores the block. | Each block contains a sequence number. When a block with the same number as the previous one is received, the receiver ignores the block. | ||
The message sequence starts with the receiver sending the first timeout NAK to the sender. | The receiver has a timeout of 10 seconds, after which it transmits a NAK. The message sequence starts with the receiver sending the first timeout NAK to the sender, which may be sent immediately. All errors are retried for at most 10 times. | ||
A NAK must be sent by the receiver if the block data are invalid. If the block number is not the expected next one or a repetition of the recent one, the sequence is out of sync, and the receiver shall send a CAN. | |||
{| class="xmodemseq" | {| class="xmodemseq" | ||
Line 28: | Line 30: | ||
| | | | ||
| Block | | Block | ||
| | |||
| ... | |||
| | |||
| Block | |||
| | |||
| EOT | |||
| | |||
|- | |- | ||
! Receiver sending | ! Receiver sending | ||
| NAK | | NAK | ||
| | | | ||
| ACK | |||
| | |||
| ACK | |||
| | |||
| ... | |||
| | |||
| ACK | | ACK | ||
| | | | ||
| ACK | | ACK | ||
|} | |} | ||
=== Standard XModem === | === Standard XModem === |
Revision as of 21:33, 7 May 2011
Communication with devices
Here is a commented log when formatting a SSSD floppy disk with the TI disk controller. Actually, this dump was achieved using MESS and putting in some printf lines.
XModem protocol
The XModem protocol transmits data in a sequence of blocks. Each block contains a part of the file to be transmitted.
Block | Block | Block | ... | Block |
The last block may require padding if the number of remaining bytes does not suffice to fill the block.
Each block contains a sequence number. When a block with the same number as the previous one is received, the receiver ignores the block.
The receiver has a timeout of 10 seconds, after which it transmits a NAK. The message sequence starts with the receiver sending the first timeout NAK to the sender, which may be sent immediately. All errors are retried for at most 10 times.
A NAK must be sent by the receiver if the block data are invalid. If the block number is not the expected next one or a repetition of the recent one, the sequence is out of sync, and the receiver shall send a CAN.
Sender sending | Block | Block | ... | Block | EOT | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Receiver sending | NAK | ACK | ACK | ... | ACK | ACK |
Standard XModem
Each block is defined in this way (numbers tell the number of bytes for each field):
1 | 1 | 1 | 128 | 1 |
---|---|---|---|---|
SOH | Number | /Number | Data bytes | Checksum |
The number is a sequence number which increases by one for each successive block. The /Number field is the one's complement of the Number field and calculates as 255-Number. When the number reaches 256 it is reset to 0.
The checksum field contains the least significant byte of the sum of the data bytes of this block.
XModem-1K
XModem-1K is a variation of XModem with 1K (1024) bytes for each data block.
1 | 1 | 1 | 1024 | 1 |
---|---|---|---|---|
STX | Number | /Number | Data bytes | Checksum |
The sender may switch between 128-byte and 1024-byte blocks after receiving an ACK from the receiver.