| Línia 55: | Línia 55: | ||
+ + + | + + + | ||
| | Byte1 |Byte2 | | | Byte1 |Byte2 | ||
Sync IN ---------------+ \-------------------------------- | Sync IN ---------------+ \--------------------------------\------------ --------------------------------------------------/ | ||
\ / | \ / | ||
\ / | \ / | ||
Revisió del 16:27, 1 ago 2016
Aquest protocol l'utilitzen les màquines mayer relativament recents per comunicar-se amb la unitat de dades. Està basat en el SDLC/HDLC d'IBM tot i que el format de paquet és diferent.
Elèctric
S'utilitza un sol parell diferencial tan per la recepció com la transmissió. Els transceptors s'acoplen al la linia de transmissió via un transformador. Amb un VD+-VD- entre +5V i -5V. La impedància de la línia és de 120 Ohms.
Codificació de bits
S'utilitza una codificació AMI. És a dir:
- L' '1' es senyalitza mantenint la línia a 0V
- El '0' es senyalitza alternativament amb +5V o -5V
| Vdiff | Bit |
|---|---|
| +5V o -5V | 0 |
| 0V | 1 |
S'utilitza el mateix bit-stuffing que el HDLC. És a dir: s'inserta un '0' cada cop que es troben 5 '1' seguits. També, al igual que el HDLC s'utilitza els patró de bits '01111110' (7E) per delimitar els paquets i sincronitzar els rellotges del transmisor i el receptor Finalment, el patró de bits '1111111' està prohibit. Si es troba dins d'un paquet es considera error de transmissió.
La velocitat de transmissió és de 1024Kbits/s
Control de flux
El canal és Half-Duplex i el teler controla la direcció de transmissió. La unitat de dades només pot transmetre com a resposta a una peteció i s'ha d'esperar a que la línia quedi inactiva (0V)
<aafigure scale=0.4>
-+ +-----------------------+ +---+ +---+ +---+ +-------+ +---+ +-------------------+ +-----------+ +-----------------------+ +--------------------------------......
Data | | | | | | | | | | | | | | | | | | | |
+----+ +-------+ +-----------------------+ +---+ +---+ +-------+ +---------------------------+ +---+ +---+ +---+
+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-....
Clock |0| |1| |2| |3| |4| |5| |6| |7| |0| |1| |2| |3| |4| |5| |6| |7| |0| |1| |2| |3| |4| |5| |6| |7| |0| |1| |2| |3| |4| |5| |6| |7| |0| |1| |2| |3| |4| |*| |5| |6| |7| |0| |1| |2| |3| |4| |5| |6| |7| |0| |1| |2| |3| |4| |5| |6| |7| |
--+0+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+1+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+2+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+3+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+4+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+5+-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+ +-+
"-5V" +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
| | | | | | | | | | | | | | | | | | | | | |
Line --+ +-----------------------+ | +---+ | | | | | +---+ +---+ +-------+ | +---+ | | | | | | +-------------------+ +-----------+ +-----------------------+ +-------------------------------------------------
| | | | | | | | | | | | | | | | | | | | | | | | "+5V" +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
\ / \ / \ / \ / \ / \ / \ /
------------ -------------- ------------ -------------- ------------- ------------- ------------- -------------- ---------------- --------------- -------------- ------------- -------------- --------------
\ / \ / \ / \/ \/ \/ \/
+ + +
| | Byte1 |Byte2
Sync IN ---------------+ \--------------------------------\------------ --------------------------------------------------/
\ /
\ /
+
/
DATA ----------------------------------------------------------------------------------------------/
Sync OUT ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
</aafigure>
Paquets
Els paquets tenen l'estructura:
| Camp | Tamany (bytes) | Descripció |
|---|---|---|
| FLAG | n | Sync-in normalment de 220 a 250 repeticions del patró '01111110' (7E) |
| Dest Addr | 1 | Addreça de desti Maquina=0x01 Unitiat=0x02 |
| Seq No | 1 | Numero de seqüència del paquet del (0x01 al 0xff) |
| Src Addr | 1 | Addreça d'origen |
| Op Code | 1 | Tipus de paquet |
| Data | n | Dades de 0 a n bytes. Sembla que el limit és de 642 bytes en el nostre cas |
| FCS | 2 | Frame Check Sequence. A.k.a. Codi de verificació del paquet. |
| FLAG | n | Sync-out normalment de 30 a 40 repeticions del patró '01111110' (7E) |
Frame Check Sequence
És un CRC amb els paràmetres següents:
- polinomi: x^16+x^12+x^5+1
- xor final:0xffff
- init-val:0x84cf
Protocol
| Comandaments/Respostes | |||
|---|---|---|---|
| OP_CODE | Data | Nom | Descripció |
| 0x00 | - | PING | es respon amb ACK per indicar recepcio correcte |
| 0x01 | - | SC_START | es respon amb ACK si es pot escriure en el disc. En altre cas ERR_ACK (0x80) |
| 0x02 | - | LA_START | es respon amb ACK si es pot llegir el disc. En altre cas ERR_ACK (0x80) |
| 0x03 | - | REQ_DATA | Demana següent block de dades |
| 0x04 | dt_len_hi,dt_len_lo,dt0,dt1,...,dtdt_len-1 | DATA_BLK | Block de dades, 0<=dt_len<=0x280 |
| 0x05 | <track_no> | FMT_TRACK | Formateja pista <track_no>=[0..79] |
| 0x06 | - | ACK | Ack pkt |
| 0x80 | - | RESET_COMMS | Error ACK: últim comandament ha fallat |
| 0x81 | - | ABORT | Aborta operació en curs |
Carrega (LA)
<mscgen caption="Carrega (LA)" uniquifier="DiagramLA" > msc { a [label=Loom],b[label=DataUnit];
a=>b [label="LA_START"]; b=>a [label="ACK"]; a=>b [label="REQ_DATA"]; b=>a [label="DATA_BLK,dt_len_Hi,dt_len_Lo,dt0,dt1,..."]; ...; ...; a=>b [label="REQ_DATA"]; b=>a [label="DATA_BLK,dt_len_Hi,dt_len_Lo,dt0,dt1,..."]; a=>b [label="RESET_COMMS"]; b=>a [label="ACK"]; a=>b [label="RESET_COMMS"]; b=>a [label="ACK"]; } </mscgen>
Descarrega (SC)
<mscgen caption="Descarrega (SC)" uniquifier="DiagramSC" > msc { a [label=Loom],b[label=DataUnit];
a=>b [label="SC_START"]; b=>a [label="ACK"]; a=>b [label="DATA_BLK,dt_len_Hi,dt_len_Lo,dt0,dt1,..."]; b=>a [label="ACK"]; ...; ...; a=>b [label="DATA_BLK,dt_len_Hi,dt_len_Lo,dt0,dt1,..."]; b=>a [label="ACK"]; a=>b [label="DATA_BLK,0,0"]; b=>a [label="ACK"]; a=>b [label="RESET_COMMS"]; b=>a [label="ACK"]; a=>b [label="RESET_COMMS"]; b=>a [label="ACK"]; } </mscgen>
Format (FO)
<mscgen caption="Format (FO)" uniquifier="DiagramFO"> msc { a [label=Loom],b[label=DataUnit];
a=>b [label="FMT_TRACK,0"]; b=>a [label="ACK"]; a=>b [label="FMT_TRACK,1"]; b=>a [label="ACK"]; ...; ...; a=>b [label="FMT_TRACK,79"]; b=>a [label="ACK"]; a=>b [label="RESET_COMMS"]; b=>a [label="ACK"]; } </mscgen> Captura FO MayerDLC
Errors
<mscgen caption="Errors comunicació" uniquifier="DiagramErrs"> msc { a [label="Loom"],b[label="Data Unit"]; ...; ...; --- [label=Timeout]; a -x b [label="PKT SEQ=n"]; a -x b [label="PKT SEQ=n"]; a -x b [label="PKT SEQ=n"]; a -x b [label="PKT SEQ=n"]; a -x b [label="PKT SEQ=n"]; a -x b [label="PKT SEQ=n"]; a -x b [label="RESET_COMMS SEQ=n+1"]; ...; ...; --- [label="SEQ Error"]; a => b [label="PKT SEQ=n"]; b => a [label="RESP SEQ!=n"]; a => b [label="RESET_COMMS SEQ=1"]; ...; ...; --- [label="OP Error"]; a => b [label="PKT"]; b => a [label="ABORT"]; a => b [label="RESET_COMMS"]; b => a [label="ACK"]; } </mscgen>