Cap resum de modificació |
|||
| Línia 136: | Línia 136: | ||
</div> | </div> | ||
La part pintada en cyan (<div style="border:2px solid black;border-radius:1px;background-color:cyan; | La part pintada en cyan (<div style="border:2px solid black;border-radius:1px;background-color:cyan;width:1em;height:1em;"> </div>) | ||
{|class=wikitable | {|class=wikitable | ||
|- | |- | ||
Revisió del 11:49, 28 oct 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 protocol és innecessàriament complexe i és més similar a un protocol de xarxa que no a un enllaç de dades entre 2 aparells.
Nivell físic
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. En concret :
- L' '1' (Space) es senyalitza mantenint la línia a 0V
- El '0' (Mark) es senyalitza alternativament amb +5V o -5V
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
Una trama del protocol té el següent aspecte:
<aafigure scale=0.4 "Trama MayerDLC" >
-+ +-----------------------+ +---+ +---+ +---+ +-------+ +---+ +-------------------+ +-----------+ +-----------------------+ +------------------------------------------
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" +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+ +---+
\ / \ / \ / \ / \ / \ / \
------------ -------------- ------------ -------------- ------------- ------------- ------------- ------------- ---------------- -------------- -------------- ------------ -------------- ------------------------
\ / \ / \ / \ / \ / \ / \ /
+ + + + + + +
| Byte 1 (0x02) Byte 2 (0x53) Byte 3 (0x01) Byte 4 "(0xff)" | |
Sync IN ---------------+ \ / | |
------------------------------------------------ -------------------------------------------------------- | |
\ / | |
+ | |
| | |
DATA --------------------------------------------------------------------------------------------------+ | |
| |
| |
Sync OUT -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
|
|
IDLE -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
</aafigure>
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)
Nivell d'enllaç
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
Nivell d'apliacació
| 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 |
Decodificació d'un paquet
A continuació hi ha un exemple de com és a nivell de senyal un paquet.
En concret aquest paquet s'ha capturat amb un DSO conectat a una unitat de dades a la qual s'ha forçat a transmetre via el menu de test integrat.
<img src="/./media-files/LDST/CommBox2/Captures/scope/capt-deco.png" style="width:100%" />
La part pintada en cyan (
)
| Bitstream | 01111110 | 01000000 | 00000000 | 01000000 | 10000000 | 01001001 | 11100111 | 01111110 |
|---|---|---|---|---|---|---|---|---|
| Data(Hex) | - | 02 | 00 | 02 | 01 | 81 | e7 | - |
| Field | FLAG * 240 | DST_ADDR | SEQ_NO | SRC_ADDR | OP_CODE | FCS (CRC) | FLAG * 40 | |
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>