Modul de lucru ECP (
a fost propus de Microsoft si Hewlett-Packard in principal pentru comunicatia cu periferice ca imprimanta sau scanner-ul. Pricipalele modificari pe care le introduce acest mod sunt: compresia datelor tip RLE (Run Length cu compresii de pana la 313o1413d 64:1) la ambele capete, transferul tip DMA cu portul si cozile FIFO atat in computer cat si in periferic.
Noua idee de adresare canal creeaza posibilitatea lucrului cu mai multe periferice intr-unul singur (o masina fax/modem/imprimanta) prin adresarea fiecaruia in parte si lucrul nestingherit cu fiecare indiferent de starea lui (de Busy).
Semnificatia semnalelor este diferita si la acest mod: semnalul 1284 subliniaza un transfer compatibil modului extins 1284, nPeriphReq este cererea de transfer invers initiata de periferic (calculatorul nu are nevoie de aceasta pentru a cere un transfer invers, trecand direct la nReverseReq), urmata de nReverseRequest (acceptarea transferului de catre calculator) si de nAckReverse (recunoasterea acceptarii, de catre periferic). Perechile de semnale HostClk-PeriphAck respectiv PeriphClk-HostAck formeaza handshake-ul pentru cele doua directii de transfer. Semnalul HostAck la inceputul ciclului de transfer indica tipul de ciclu ce se executa: pentru 0 un ciclu de comenzi (se transfera un contor RLE sau o adresa de canal in functie de MSB al octetului) iar pentru 1 un ciclu de date.
De exemplu un ciclu de transfer date host-imprimanta ar fi: computerul pune HostAck in 1 pentru un ciclu de date, pune data pe port si o valideaza prin punerea HostClk in 0. Perifericul semnaleaza acceptarea datelor prin PeriphAck in 1, iar calculatorul genereaza frontul crescator pe HostClk (adica il trece in 1) pe care se recomanda sa se faca citirea de catre periferic. Perifericul semnaleaza prin PeriphAck in 0 ca e gata pentru transferul unui nou octet. Pentru transfer invers modul de lucru este asemanator dar fara posibilitatea ciclilor de comenzi, folosindu-se perechea PeriphClk-HostAck si prefatate de negocierea ciclului invers.
La schimbarile de directie evident trebuie asteptate treminarile eventualelor transferuri DMA si golirea cozilor FIFO, pentru directia in curs. Acestea transferuri se pot opri fortat si prin soft, cu golirea cozilor pentru a examina starea transferului in momentul in care a fost intrerupt, dar cu bataie mare de cap (soft).
Implementarea registrilor este mai complicata, folosindu-se de modurile diferite de lucru ECP (ECP transfer/test/configurare). In plus, stim ca vechea magistrala ISA permitea generarea adreselor de porturi doar pe 10 biti (deci maxim 1024=400h porturi de I/O). ECP implementeaza noile porturi de configurare in pagina urmatoare de 1k de porturi de I/O (deci nesuportate de ISA) prin adunarea de 400h la adresa SPP de baza respectiva. Utilizarea portului in mod standard trece registrii in modul lor binecunoscut de lucru. Deci vom avea:
-SPP+0 registru de date normal/FIFO de adrese ECP,
-SPP+1 registru de stare port,
-SPP+2 registru de control port paralel,
-SPP+400 registru de configurare A/FIFO de date/de test,
-SPP+401 registru de configurare B,
-SPP+402 registru extins de control.
Acest mod deci este optimizat pentru transferul blocurilor mari de date prin modalitatea de acces DMA si implementarile FIFO. Cuplarea cu soft-ul este slaba, acesta nestiind in ce stare se afla transferul, fiind constient doar de terminare. Toate semnalele de handshake sunt generate si aici de port direct (hardware).
Toate aceste moduri trebuie negociate intre calculator si periferic, nefiind toate suportate de catre toate perifericele.
Astfel calculatorul pune pe liniile de date un octet ce codifica modul de lucru solicitat si pozitioneaza nSelIn in 1 si nAutoFeed in 0 pentru a valida cererea. Un periferic ce nu suporta 1284 nu face nimic dar unul 1284 raspunde prin nAck in 0 si nErr, PE si Select in 1. Calculatorul trece nStrobe in 0 pentru a valida octetul de cerere, apoi il trece in 1 deodata cu nAutoFeed pentru a semnala recunoasterea perifericului ca 1284 compatibil. Perifericul raspunde cu nErr si PE in 0 daca are canalul invers accesibil, si Select in 1 daca modul cerut este posibil ( in 0 daca nu). Apoi pune nAck in 1 pentru a semnala sfarsitul negocierii si ca semnalele sunt in starile cerute de modul curent. Semnalul Xflag in 1 reprezinta intotdeauna acceptarea modului cerut (exceptia este modul Nibble unde nu este folosit).
Observam ca negocierea poate fi initiata doar de calculator, de obicei la inceputul sesiunii de lucru. In continuare semnalul 1284 va indica un mod de lucru 1284 extins.
Singurul sistem de operare care are suport integrat pentru 1284 este Windoes 95. Acelasi lucru se asteapta de la OS/2 Warp 4, pe cand Warp 3 se descurca cu un driver furnizat tot de IBM. Exista drivere si pentru alte sisteme de operare dar sunt cele furnizate de producatorii de echipamente compatibile 1284. Nota: de fapt Win95 suporta doar negocierea cu perifericul (pentru plug'n'play) si modul de lucru ECP in directia calculator-periferic. Foarte putin mai mult decat nimic.
|