Protocols

From Ninerpedia
Revision as of 21:22, 7 May 2011 by Mizapf (talk | contribs)
Jump to navigation Jump to search

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 message sequence starts with the receiver sending the first timeout NAK to the sender.

Sender sending Block Block
Receiver sending NAK ACK ACK


The receiver has a timeout of 10 seconds, after which it transmits a NAK.


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.

XModem/CRC