| (Hi ha 23 revisions intermèdies que no es mostren del mateix usuari) | |||
| Línia 1: | Línia 1: | ||
___TOC__ | |||
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. | 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ó. | S'utilitza un sol parell diferencial tan per la recepció com la transmissió. | ||
| Línia 10: | Línia 10: | ||
La impedància de la línia és de 120 Ohms. | La impedància de la línia és de 120 Ohms. | ||
=== Codificació de bits === | ==== Codificació de bits ==== | ||
S'utilitza una codificació AMI. | S'utilitza una codificació AMI. En concret : | ||
* L' '1' es senyalitza mantenint la línia a 0V | * L' '1' (Space) es senyalitza mantenint la línia a 0V | ||
* El '0' es senyalitza alternativament amb +5V o -5V | * 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. | S'utilitza el mateix bit-stuffing que el HDLC. És a dir: s'inserta un '0' cada cop que es troben 5 '1' seguits. | ||
| Línia 31: | Línia 22: | ||
La velocitat de transmissió és de 1024Kbits/s | La velocitat de transmissió és de 1024Kbits/s | ||
Una trama del protocol té el següent aspecte: | |||
<aafigure scale=0.4 "Trama MayerDLC" > | |||
<aafigure scale=0.4> | |||
-+ +-----------------------+ +---+ +---+ +---+ +-------+ +---+ +-------------------+ +-----------+ +-----------------------+ +------------------------------------------ | -+ +-----------------------+ +---+ +---+ +---+ +-------+ +---+ +-------------------+ +-----------+ +-----------------------+ +------------------------------------------ | ||
Data | | | | | | | | | | | | | | | | | | | | | Data | | | | | | | | | | | | | | | | | | | | | ||
| Línia 48: | Línia 37: | ||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ||
Line --+ +-----------------------+ | +---+ | | | | | +---+ +---+ +-------+ | +---+ | | | | | | +-------------------+ +-----------+ +-----------------------+ + | Line --+ +-----------------------+ | +---+ | | | | | +---+ +---+ +-------+ | +---+ | | | | | | +-------------------+ +-----------+ +-----------------------+ +------------------------------------------ | ||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ||
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ||
| Línia 55: | Línia 44: | ||
\ / \ / \ / \ / \ / \ / \ | \ / \ / \ / \ / \ / \ / \ | ||
------------ -------------- ------------ -------------- ------------- ------------- ------------- ------------- ---------------- -------------- -------------- ------------ -------------- ----------------- | ------------ -------------- ------------ -------------- ------------- ------------- ------------- ------------- ---------------- -------------- -------------- ------------ -------------- ------------------------ | ||
\ / \ / \ / \ / \ / \ / \ / | \ / \ / \ / \ / \ / \ / \ / | ||
+ + + + + + + | + + + + + + + | ||
| Byte 1 (0x02) Byte 2 (0x53) Byte 3 (0x01) Byte 4 ( | | Byte 1 (0x02) Byte 2 (0x53) Byte 3 (0x01) Byte 4 "(0xff)" | | | ||
Sync IN ---------------+ \ / | | | Sync IN ---------------+ \ / | | | ||
------------------------------------------------ -------------------------------------------------------- | | | ------------------------------------------------ -------------------------------------------------------- | | | ||
| Línia 74: | Línia 63: | ||
</aafigure> | </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: | Els paquets tenen l'estructura: | ||
| Línia 107: | Línia 101: | ||
* init-val:0x84cf | * init-val:0x84cf | ||
=== | === Nivell d'apliacació === | ||
{|class=wikitable | {|class=wikitable | ||
| Línia 131: | Línia 125: | ||
|- | |- | ||
|0x81||-||ABORT||Aborta operació en curs | |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. | |||
<div> | |||
{{MediaImgFile|LDST/CommBox2/Captures/scope/capt-deco.png|width:100%}} | |||
</div> | |||
S'ha resaltat en cyan (<div style="border:2px solid black;border-radius:1px;background-color:cyan;width:1em;height:1em;display:inline-block;"> </div>) la part de la senyal que conté realment les dades. | |||
Com es pot veure, les sequències de sincronització són realment llargues en comparació al missatge. | |||
Finalment la següent taula mostra la decodificació del paquet: | |||
{|class=wikitable | |||
|- | |||
!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 | |||
|colspan=2|FCS (CRC) | |||
|| FLAG * 40 | |||
|- | |||
|} | |} | ||
| Línia 234: | Línia 256: | ||
</mscgen> | </mscgen> | ||
=== Anàlisis === | |||
Eficiència del protocol: | |||
En el millor cas , es a dir , assumint capçaleres mínimes, detecció de linia inactiva a 8 bits a '1' , el bit-stuffing no causa expansió i tots els paquets de dades s'utilitzen al 100% de capacitat: | |||
Ef(%)=100*bits dades/bits transmesos=100*(640*8)/(bits_paquet_dades+detect_idle+bits_paquet_ack+detect_idle)=100*(640*8)/((220+4+2+640+2+30)*8+8+(220+4+2+30)*8+8)=55.36% | |||
Per tant la velocitat màxima efectiva és de: | |||
Vef=Vmax * Ef = 566886.4 bits/s => 70861 Bytes/s | |||
Cosa que és més que suficient, ja que la velocitat efectiva màxima d'un floppy de 3.5" (1440KBytes 80 tracks 2 sides 300 rpm) és: | |||
t_minim_lectura=num_tracks*track_read_time=(tracks*sides)*(60sec/rpm)=(80*2)*(60/300)=32 secs | |||
capacitat=1440*1024bytes | |||
v_max=capacitat/t_minim_lectura=46080 Bytes/sec | |||
Comparativa: | |||
{|class=wikitable | |||
!Medi||Velocitat màxima Bytes/sec | |||
|- | |||
|RS232||style="text-align:right;" |960 | |||
|- | |||
|Floppy||style="text-align:right;" |46080 | |||
|- | |||
|CommBox 2.0||style="text-align:right;" |63000 | |||
|- | |||
|MayerDLC||style="text-align:right;" |70861 | |||
|} | |||
[[Category:LDST]] | [[Category:LDST]] | ||
[[Category:Hardware]] | [[Category:Hardware]] | ||
Revisió de 16:33, 21 abr 2017
_
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%" />
S'ha resaltat en cyan (
) la part de la senyal que conté realment les dades.
Com es pot veure, les sequències de sincronització són realment llargues en comparació al missatge.
Finalment la següent taula mostra la decodificació del paquet:
| 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>
Anàlisis
Eficiència del protocol:
En el millor cas , es a dir , assumint capçaleres mínimes, detecció de linia inactiva a 8 bits a '1' , el bit-stuffing no causa expansió i tots els paquets de dades s'utilitzen al 100% de capacitat:
Ef(%)=100*bits dades/bits transmesos=100*(640*8)/(bits_paquet_dades+detect_idle+bits_paquet_ack+detect_idle)=100*(640*8)/((220+4+2+640+2+30)*8+8+(220+4+2+30)*8+8)=55.36%
Per tant la velocitat màxima efectiva és de:
Vef=Vmax * Ef = 566886.4 bits/s => 70861 Bytes/s
Cosa que és més que suficient, ja que la velocitat efectiva màxima d'un floppy de 3.5" (1440KBytes 80 tracks 2 sides 300 rpm) és:
t_minim_lectura=num_tracks*track_read_time=(tracks*sides)*(60sec/rpm)=(80*2)*(60/300)=32 secs
capacitat=1440*1024bytes
v_max=capacitat/t_minim_lectura=46080 Bytes/sec
Comparativa:
| Medi | Velocitat màxima Bytes/sec |
|---|---|
| RS232 | 960 |
| Floppy | 46080 |
| CommBox 2.0 | 63000 |
| MayerDLC | 70861 |