Sistem de Control Acces
Cuprins
Cuprins 1
1. Introducere 3
2. Considerente teoretice 4
2.1. Portul paralel al Pc-ului 4
2.1.1. IEEE 1284 4
2.1.2. Conectoarele 6
2.1.3. Cablul de conectare la Port 8
2.1.4. Modul de Funcționare Electric 8
2.1.4.1. Modul de Compatibilitate 8
2.1.4.1.1. Liniile de Date 9
2.1.4.2. Modul pe Nibluri 10
2.1.4.3. Modul pe Octeți 11
2.1.4.4. Modul Enhanced Parallel Port (EPP) 12
2.1.4.4.1. Liniile de date 12
2.1.4.5. Modul Extended Capabilities Port (ECP) 13
2.1.4.5.1. Liniile de date 13
2.1.5. Interfața logică 14
2.1.6. Regiștrii Portului Paralel 15
2.1.6.1. Regiștrii Portului Paralel Standard 15
2.1.6.2. Regiștrii Porturilor Paralele Îmbunătățite (EPP) 17
2.1.6.2.1. Handshake EPP 18
2.1.6.3. Porturi cu Capacități Extinse (ECP) 21
2.1.6.3.1. Handshake ECP 22
2.1.6.3.2. Run Length Encoding (RLE) – Comprimarea Datelor 25
2.2. Cartelele telefonice 27
2.2.1. Introducere 27
2.2.2. Cardurile din generația a I-a 27
2.2.2.1. Schema generală a cipului 27
2.2.2.2. Configurația pinilor 28
2.2.2.3. Trăsături / Caracteristici principale 28
2.2.2.4. Diagramele de timp 29
2.2.2.5. Harta de memorie pentru cardurile din Franța și St. Maarten 29
2.2.2.6. Harta de memorie pentru cardurile altor țări 30
2.2.3. Cardurile de generația a II –a 32
2.2.3.1. Introducere 32
2.2.3.2. Configurația pinilor 32
2.2.3.3. Trăsături-caracteristici principale. 32
2.2.3.4. Diagramele de timp 32
2.2.3.5. Harta de memorie pentru 4 sau 5 nivele octale 33
2.2.3.6. Harta de memorie pentru noile carduri de 512 biți: (Grecia, Canada, UK, Sud Africa) 34
2.2.3.7. Generația a II-a pentru cardurile Franțuzești: (TG2) 35
2.2.3.8. Caracteristicile electrice ale cardurilor 36
2.2.3.9. Schemă cititor 38
3. Realizarea practica 39
3.1. Partea hard. 39
3.1.1. Modulul local (modul 1) 39
3.1.1.1. Schema bloc 39
3.1.1.1.1. Referințe 39
3.1.1.2. Placa de bază 40
3.1.1.2.1. Referințe 41
3.1.1.3. Interfața modul 1 – modul 2 41
3.1.1.3.1. Referințe 42
3.1.2. Modulul la distanță (modul 2) 42
3.1.2.1. Schema bloc 42
3.1.2.1.1. Referințe 42
3.1.2.2. Placa de bază 43
3.1.2.2.1. Referințe 44
3.1.2.3. Tastatura numerică 45
3.1.2.3.1. Referințe 45
3.2. Partea soft 46
3.2.1. Prezentarea programului 46
3.2.2. Prezentarea aplicației 46
4. Bibliografie. 46
4. Bibliografie
Spînulescu I. – Circuite Integrate, Editura Științifică, București 1991
Gheorghe Toacșe, Dan Nicula – Electronică Digitală, Teora
Tiberiu Mureșan, Aurel Gontan – Circuite Integrate Numerice. Aplicații, Editura de Vest,
Timișoara 1996
Peter Norton – Secrete PC – Teora
Internet –
Parallel Port Central – parport.htm
Jan Axelson's Parallel Port FAQ – jansfaq.htm
Interfacing to the IBM – PC Parallel Printer Port – par.html
Interfacing the Standard Parallel Port – paralel.htm
Interfacing the Enhanced Parallel Port – paralelp.htm
Parallel Port Complet – ppc1.pdf
Interfacing the Extended Capabilities Port – ecp.htm
IBM Parallel Port FAQ/Tutorial – ibmlpt.htm
Use of a PC Printer Port for Control and Data Acquisition – printer.html
Tehnical Overview – tehnica.htm
ISO7816 (part 1-3) asynchronous smartcard information – Iso-7816.txt
Generation Telecards – Stephane BAUSSON – How_chip.txt
Bălănescu T., Gavrilă S. – Pascal și Turbo Pascal, Vol. I și II, Editura Tehnică, București 1992
Peter Norton – Ghid Complet pentru Delphi 2.0, Teora
Sandor Kovacs – Delphi 3.0 Ghid de Utilizare, Editura Albastră, Cluj Napoca 1998
Valentin Cristea – Tehnici de programare, Teora
=== partea soft ===
3.2. Partea soft
3.2.1. Prezentarea programului
Aplicația a fost scrisă utilizând mediul de programare DELPHI 3 Client/Server deoarece acesta mi-a permis foarte ușor realizarea unei interfețe grafice deosebite, lucrul cu baze de date, realizarea de rapoarte folosind înregistrările unei baze de date, salvarea într-o nouă bază de date a celei în care se înscriu periodic datele despre persoanele care au intrat în încăpere, precum și deschiderea, vizualizarea și tipărirea acesteia, toate sub Windows95/98.
Deoarece mediul DELPHI 3 Client/Server nu are funcții de acces direct la portul paralel al PC-ului, am utilizat pentru aceasta o componentă externă mediului cu numele TVicHW32 creata de un rus.
Metoda Create a componentei alocă memorie pentru crearea componentei TVicHW32, dar nu poate deschide automat driver-ul pentru accesul la nucleul S.O., aceasta realizându-se prin apelul metodei OpenDriver, care încarcă driver-ul vichwXX.vxd pentru accesul direct la port. Dacă driver-ul a fost încărcat cu succes atunci proprietatea ActiveHW a componentei devine True.
Componenta dispune de funcții de citire/scriere direct în registrii portului paralel, precum și de citire/scriere la nivel de pin, cu ajutorul cărora am putut testa orice pin al portului paralel.
Aplicația folosește 2 baze de date, astfel:
o bază de date cu datele despre persoanele cu drept de acces; aceasta a fost dublată cu o listă dublu înlănțuită din următoarele motive:
există permanent o dublură a bazei de date cu persoanele cu drept de acces, deoarece această listă este salvată periodic pe disc sub forma unui fișier binar;
la lansarea în execuție a aplicației se citește fișierul și se încarcă în memorie sub forma unei liste toate datele înregistrate în fișier;
toate operațiile de căutare se execută la nivelul listei și nu la nivelul bazei de date – operația se execută mult mai rapid;
baza de date am folosit-o mai mult pentru afișarea înregistrărilor și pentru tipărirea conținutului acesteia prin folosirea unui program care permite lucru cu baze de date.
o a doua bază de date în care se înscriu datele despre persoanele care au pătruns în încăpere (o voi numi – baza de date de lucru).
Descrierea programului.
Programul îl pot împărții în mai multe blocuri de proceduri și funcții mai importante, astfel:
Blocul procedurilor care primesc mesaje și transmit comenzi parții hard a proiectului;
Procedurile de adăugare, modificare și ștergere a informaților în și din baza de date cu drepturi de acces;
Procedura de citire a cartelelor, realizată corespunzător informațiilor avute despre acestea;
Procedura de realizare a copiilor de siguranță a bazei de date de lucru.
Blocul procedurilor care primesc mesaje și transmit comenzi parții hard a proiectului;
Monitorizarea portului paralel și a părții hard a proiectului am realizat-o cu ajutorul mai multor Timer-e care se activează în funcție de stadiul în care se află partea hard la un moment dat.
Codurile acestor timer-e primesc mesaje de la partea hard prin intermediul portului paralel și transmit răspunsuri sau comenzi acesteia.
La lansarea în execuție a programului, se activează Timer1 care are ca scop citirea valorilor logice ale pinilor portului paralel și apelarea procedurii ProcessMessages prin intermediul căreia se permite windows-ului să proceseze evenimentele aplicației și alte evenimente.
După activarea driver-ului de acces direct la portul paralel, se apasă butonul START care execută următoarele:
creează lista dublu înlănțuită L_Init;
încarcă fișierul binar cu persoanele care au drept de acces în încăpere;
activează Timer3;
dezactivează butonul START.
Codul sursă este:
…
begin
Init(L_Init);
IncarcareListaPersoane(L_Init);
Timer3.Enabled:=true;
BI_Start.Enabled:=false;
end;
…
Lista dublu înlănțuită este creată prin apelul unei proceduri care creează un element de tip persoana:
persoana = record
nume: String[50];
cod_pin:String[16];
cod_acces:String[6];
data_inscrierii:TDate;
end;
și elementul curent devine primul element al listei.
Încărcarea fișierului binar cu persoanele care au drept de acces în încăpere se realizează prin apelul unei proceduri care verifică mai întâi existența fișierului și în caz afirmativ deschide fișierul, citește fiecare element de tip persoana din fișier adăugându-l apoi în lista dublu înlănțuită.
Prin declarația Timer3.Enabled:=true se activează timer-ul 3 care are ca scop – afișarea de către partea hard a mesajului “Acces Blocat”, activarea citirii cartelelor și verificarea dacă s-a introdus o cartelă într-unul din cele două cititoare.
Astfel, prin intermediul codului sursă al procedurii se scrie în registrul de date (378h) valoarea C0h pentru ca partea hard să afișeze ‘Acces Blocat’, se activează citirea cartelelor trecând linia /nLine Feed (pin 14) în starea ‘0’ logic (vezi schema plăcii de bază a modului 1) și se monitorizează starea liniilor Select (pin 13) și /Busy (pin 10) pentru a se verifica dacă s-a introdus o cartelă într-unul din cele două cititoare.
Pentru că citirea cartelei 2 este mai prioritară decât citirea cartelei 1, se verifică mai întâi starea pinului 10 (card 2 yes/no).
Codul sursă este:
…
begin
Port[$378]:=$C0; // Acces blocat
Panel3d3.Color:=clred;
Panel3d3.Font.Color:=clWhite;
// blocheaza citirea cartelelor
Pin[14]:=true;
Pin[1]:=true;
// activeaza citirea cartelelor
Pin[14]:=false;
Bi_Edit4.Text:='OK';
Bi_Edit3.Text:='Aplicatia asteapta introducerea unei cartele intr-un cititor';
if Pin[10] then
begin
Timer3.Enabled:=false;
Timer4.Enabled:=true;
end;
if Pin[13] then
begin
Timer3.Enabled:=false;
Timer6.Enabled:=true;
end;
end;
…
În funcție de starea pinilor 10 sau 13 avem 3 situații:
Pinii 10 sau 13 sunt în starea ‘0’ – se execută în continuare timer-ul 3;
Pinul 10 în starea ‘1’ pinul 13 în starea ‘0’ – se dezactivează timer-ul 3 și se activează timer-ul 4;
Pinul 10 în starea ‘0’ pinul 13 în starea ‘1’ – se dezactivează timer-ul 3 și se activează timer-ul 6;
Descrierea situaților:
Pinii 10 sau 13 sunt în starea ‘0’ – se execută în continuare timer-ul 3 până când se va introduce o cartelă într-un cititor.
Pinul 10 în starea ‘1’ pinul 13 în starea ‘0’ – se dezactivează timer-ul 3 și se activează timer-ul 4;
În momentul când cartela 2 se introduce în cititor, prin intermediul microcontactului cititorului, pinul 10 (card 2 yes/no) al portului trece în starea ‘1’ logic, și astfel se activează timer-ul 4 care are scop citirea cartelei, verificarea existenței seriei cartelei în listă și în funcție de aceasta se va cere utilizatorului introducerea codului sau scoaterea cartelei.
Astfel, prin intermediul codului sursă al procedurii se execută:
se apelează procedura de citire a cartelei (va fi descrisă ulterior);
se verifică în listă dacă seria cartelei introduse există;
– cartela există;
– cartela nu există.
– cartela există – procedura execută următoarele:
se afișează proprietarul cartelei;
se cere utilizatorului introducerea codului prin scrierea în registrul de date al portului paralel a valorii A0h pentru ca partea hard să afișeze mesajul “Introduceți codul” și prin dezactivarea timer-ului 4 și activarea timer-ului 5.
Codul sursă este:
…
Citire_card(2);
Codpin:=d2h(Data[5]) + d2h(Data[6])+ d2h(Data[7])+ d2h(Data[8]);
gasit:=CautaVal(3,Codpin,L_Init);
if gasit then
begin
NumePers2.Caption:=L_Init.curent^.info.nume;
SerialNumber2.Caption:=Codpin;
port[$378]:=$A0; //"introduceti codul" (1010_0000)
Nr_taste:=0;
codul:='';
Timer4.Enabled:=false;
Timer5.Enabled:=true;
end
…
Timer-ul 5 are ca scop memorarea codului de 5 cifre transmis de tastatura numerică a modului 2, verificarea codului introdus cu cel înregistrat în listă corespunzător seriei cartelei și în funcție de aceasta se va permite accesul sau se va cere scoaterea cartelei, anterior afisându-se mesajul “Cod/Pin Incorect”.
Astfel, prin intermediul codului sursă al procedurii se execută:
se verifică dacă numărul cifrelor introduse este mai mare sau egal cu 5 (var. Nr_taste);
– Nr_taste < 5;
– Nr_taste >= 5;
2.1.1. – Nr_taste < 5 – procedura execută următoarele:
se apelează a doua parte a segmentului de cod sursă care citește și memorează codul introdus de utilizator, astfel:
se verifică prezența cartelei în cititor – deoarece partea hard a fost concepută astfel încât în lipsa cartelei 2 tastatura numerică este inactivă se activează citirea cartelelor și se verifică starea pinului 10 al portului paralel;
pinul 10 = ‘0’ logic – cartela a fost scoasă – procedura scrie în registrul de date valoarea C0h pentru afișarea de către partea hard a mesajului “Acces Blocat”, inițializează variabilele folosite și aplicația trece în starea inițială prin dezactivarea timer-ului 5 și activarea timer-ului 3 descris anterior (aplicația așteaptă introducerea unei cartele într-unul dintre cititoare);
pinul 10 = ‘1’ logic – cartelă prezentă în cititor – continuă;
se intră în bucla While …. Do de citire și memorare a celor 5 cifre ale codului de acces, care execută următoarele:
atâta timp cât Nr_taste < 5 execută:
verifică din nou prezența cartelei în cititor :
dacă nu – se iese din ciclul While .. Do și se execută cele descrise mai sus;
dacă da – continuă;
se verifică starea pinului 15 al portului paralel pentru a se determina dacă s-a apăsat o tastă:
pinul 15 = ‘0’ logic – nu s-a apăsat nici o tastă – se reia ciclul While;
pinul 15 = ‘1’ logic – s-a apăsat o tastă – continuă;
se citește registrul de stare (379h) al portului paralel;
se extrage codul tastei apăsate din octetul citit;
se adaugă variabilei “codul” noul cod al tastei;
se afișează codul tastei apăsate;
se verifică din nou starea pinului 15 și se intră într-un nou ciclu While..Do prin care se așteaptă eliberarea tastei apăsate;
dacă tasta a fost eliberată se incrementează cu 1 variabila Nr_taste;
se reia primul ciclu While..Do până când variabila Nr_taste >= 5, deci până când se introduc cele 5 cifre ale codului de acces;
Codul sursă este:
…
begin
//blocheaza introducerea codului
pin[1]:=true;
pin[14]:=true;
//activeaza citirea cartelelor
Pin[14]:=false;
//verifica prezenta cartelei
cardp:=Pin[10];
while (cardp and (Nr_taste<5)) do
begin
cardp:=Pin[10];
if cardp=false then break;
//blocheaza citirea cartelelor
Pin[14]:=true;
pin[1]:=true;
//activeaza introducerea codului
pin[1]:=false;
val3:=pin[15];
if val3 then
begin
val4:=(port[$379] and $F0) div $F;
tasta[Nr_taste]:=test(val4);
codul:=codul+IntToStr(tasta[Nr_taste]);
Cod.Caption:=codul;
val3:=pin[15];
while (val3) do
begin
val3:=pin[15];
if val3=false then Nr_taste:=Nr_taste + 1;
Timer2.Enabled:=true;
end;
Nrtast.Caption:=IntToStr(Nr_taste);
end;
//blocheaza introducerea codului
pin[1]:=true;
pin[14]:=true;
//activeaza citirea cartelelor
Pin[14]:=false;
Timer2.Enabled:=true;
end;
if cardp=false then
begin
//acces blocat
port[$378]:=$C0; //acces blocat 1100_0000
Panel3D5.Color:=clBtnFace;
Panel3D5.Font.Color:=clBlack;
Panel3D3.Color:=clRed;
Panel3D3.Font.Color:=clWhite;
AhmLed2.LedOff;
Image2.Picture.LoadFromFile('c:\sistemac\bmp\card.bmp');
ProgressBar2.Position:=0;
NumePers2.Caption:='';
SerialNumber2.Caption:='';
DataAcces.Caption:='';
Cod.Caption:='';
Nrtast.Caption:='';
Timer5.Enabled:=false;
Timer3.Enabled:=true;
end;
end;
…
– Nr_taste >= 5 – procedura execută următoarele:
se apelează prima parte a segmentului de cod care compară codul introdus cu codul existent în listă, astfel:
se verifică egalitatea dintre codul introdus, memorat în variabila “codul” și codul înregistrat în listă corespunzător seriei cartele introduse în cititor și în funcție de rezultatul comparației avem două situații:
adevărat:
se scrie în registrul de date valoarea 30h prin care partea hard activează releul și afișează mesajul “Acces Permis”;
se adaugă la baza de date de lucru o nouă înregistrare care cuprinde:
numele proprietarului cartelei;
data intrării;
ora intrării;
se activează citirea cartelelor;
se dezactivează timer-ul 5 ;
se cere utilizatorului scoaterea cartelei prin activarea timer-ului 7;
fals:
se scrie în registrul de date valoarea 80h prin care partea hard afișează mesajul “Cod/Pin Incorect”;
se activează citirea cartelelor;
se dezactivează timer-ul 5 ;
se cere utilizatorului scoaterea cartelei prin activarea timer-ului 7.
Codul sursă este:
…
begin
if Nr_taste >= 5 then
begin
Panel3D5.Color:=clBtnFace;
Panel3D5.Font.Color:=clBlack;
//se extrage codul
if codul=L_Init.curent^.info.cod_acces then
begin
//acces permis;
port[$378]:=$30; //se activeaza releul 0011_0000
Panel3D5.Color:=clBtnFace;
Panel3D5.Font.Color:=clBlack;
Panel3D4.Color:=clGreen;
Panel3D4.Font.Color:=clWhite;
DataAcces.Caption:=DateToStr(date);
with DataModule2 do
begin
Table1.Insert;
Table1NumelePersoanei.Value:=L_Init.curent^.info.nume;
Table1DataIntrarii.Value:=Date;
Table1OraIntrarii.Value:=Time;
Table1.Post;
end;
Timer2.Interval:=2000;
Timer2.Enabled:=true;
Timer2.Interval:=500;
end
else
begin
port[$378]:=$80; //cod/pin incorect 1000_0000
Panel3D5.Color:=clBtnFace;
Panel3D5.Font.Color:=clBlack;
Panel3D7.Color:=clRed;
Panel3D7.Font.Color:=clWhite;
end;
//blocheaza introducerea codului
pin[14]:=true;
pin[1]:=true;
//activeaza citirea cartelelor
Pin[14]:=false;
Timer5.Enabled:=false;
//scoaterea cartelei
Nr_card:=2;
Timer7.Enabled:=true;
end
end;
– cartela nu există – procedura execută următoarele:
se scrie în registrul de date valoarea 80h prin care partea hard afișează mesajul “Cod/Pin Incorect”;
se dezactivează timer-ul 4;
se cere utilizatorului scoaterea cartelei prin activarea timer-ului 7.
Codul sursă este:
…
begin
//Persoana nu are acces. Nu se introduce codul.
NumePers2.Caption:='???';
Bi_Edit4.Text:='EROARE';
Bi_Edit3.Text:='Nu exista nici o persoana cu acest card';
port[$378]:=$80; //cod/pin incorect 1000_0000
Panel3D3.Color:=clBtnFace;
Panel3D3.Font.Color:=clBlack;
Panel3D7.Color:=clRed;
Panel3D7.Font.Color:=clWhite;
Timer4.Enabled:=false;
Nr_card:=2;
Timer7.Enabled:=true;
end;
…
Timer-ul 7 are ca scop afișarea mesajului “Scoateți Cardul”, verificarea dacă acesta a fost scos din cititor și în caz afirmativ inițializarea tuturor variabilelor, dezactivarea timer-ului 7 și activarea timer-ului 3 descris anterior (aplicația așteaptă introducerea unei cartele într-un cititor);
Astfel, prin intermediul codului sursă al procedurii se execută:
pentru cardul 2:
se scrie în registrul de date valoarea 90h pentru ca partea hard să afișeze mesajul “Scoateți Cardul”;
se verifică prezența cartelei 2 în cititor prin testarea pinului 10 al portului paralel:
pinul 10 = ‘0’ logic – cartela 2 a fost scoasă din cititor – procedura:
inițializează variabilele folosite cu cartela 2;
aplicația trece în starea inițială prin dezactivarea timer-lui 7 și activarea timer-ului 3 descris anterior (aplicația așteaptă introducerea unei cartele într-unul dintre cititoare);
pinul 10 = ‘1’ logic – cartelă 2 prezentă în cititor – procesul se reia;
Codul sursă este:
…
if Nr_card=2 then
begin
port[$378]:=$90; //"scoateti cardul" (1001_0000)
Panel3D3.Color:=clBtnFace;
Panel3D3.Font.Color:=clBlack;
Panel3D4.Color:=clBtnFace;
Panel3D4.Font.Color:=clBlack;
Panel3D7.Color:=clBtnFace;
Panel3D7.Font.Color:=clBlack;
Panel3D6.Color:=clRed;
Panel3D6.Font.Color:=clWhite;
scos:=Pin[10];
if scos=false then
begin
//Cardul 2 a fost scos din cititor.
Panel3D6.Color:=clBtnFace;
Panel3D6.Font.Color:=clBlack;
AhmLed2.LedOff;
Image2.Picture.LoadFromFile('c:\sistemac\bmp\card.bmp');
ProgressBar2.Position:=0;
NumePers2.Caption:='';
SerialNumber2.Caption:='';
DataAcces.Caption:='';
Cod.Caption:='';
Nrtast.Caption:='';
Timer7.Enabled:=false;
Timer3.Enabled:=true;
end;
end;
…
Pinul 10 în starea ‘0’ pinul 13 în starea ‘1’ – se dezactivează timer-ul 3 și se activează timer-ul 6;
În momentul când cartela 1 se introduce în cititor, prin intermediul microcontactului cititorului, pinul 13 (card 1 yes/no) al portului trece în starea ‘1’ logic, și astfel se activează timer-ul 6 care are scop citirea cartelei, verificarea existenței seriei cartelei în listă și în funcție de aceasta se va activa sau nu butoanele Adaugare, Modificare sau Ștergere.
Astfel, prin intermediul codului sursă al procedurii se execută:
se apelează procedura de citire a cartelei (va fi descrisă ulterior);
se verifică în listă dacă seria cartelei introduse există;
– cartela există;
– cartela nu există.
3.1. – cartela există – procedura execută următoarele:
se afișează proprietarul cartelei;
NU se permite Adaugarea unei noi persoane în baza de date deoarece există o persoană cu această cartelă; Butonul Adăugare inactiv;
SE permite Modificarea numai a codului de acces; Butonul Modificare activ;
NU se permite Ștergerea din baza de date a unei înregistrări decât în cazul în care cartela introdusă aparține operatorului legal al aplicației, în cazul de față al realizatorului programului; Butonul Ștergere activ sau inactiv;
se dezactivează timer-ul 6;
se activează timer-ul 7 pentru ca aplicația să poată sesiza scoaterea cartelei 1 din cititor.
În acest caz Timer-ul 7 are ca scop pe lângă verificarea scoaterii cartelei 1 din cititor și verificarea dacă, pe timpul cât cartela 1 se află în cititor, s-a introdus cartela 2, caz în care aplicația blochează operațiile cu cartela 1, inițializând toate variabile folosite, dezactivând timer-ul 7 și activând timer-ului 4 descris anterior (se reiau operațiile cu cartela 2);
Astfel, prin intermediul codului sursă al procedurii se execută:
pentru cardul 1:
se verifică prezența cartelei 2 în cititor prin testarea pinului 10 al portului paralel:
pinul 10 = ‘0’ logic – cartela 2 nu a fost introdusă în cititor
se verifică scoaterea cartelei 1 din cititor prin testarea pinului 13
(card 1 yes/no) al portului paralel:
pinul 13 = ‘0’ logic – cartela 1 a fost scoasă din cititor – procedura inițializează variabilele folosite și aplicația trece în starea inițială prin dezactivarea timer-lui 7 și activarea timer-ului 3 descris anterior (aplicația așteaptă introducerea unei cartele într-unul dintre cititoare);
pinul 13 = ‘1’ logic – cartela 1 prezentă în cititor – procesul se reia;
pinul 10 = ‘1’ logic – cartela 2 s-a introdus în cititor – procedura:
inițializează variabilele folosite la operațiile cu cartela 1;
blochează operațiile cu cartela 1;
dezactivează timer-ul 7;
activează timer-ul 4 descris anterior (reia operațiile cu cartela 2);
Codul sursă este:
…
if Nr_card=1 then
begin
card2:=Pin[10];
if card2 then
begin
scos:=false;
Timer4.Enabled:=true;
end
else scos:=Pin[13];
if scos=false then
begin
//Cardul 1 a fost scos din cititor.;
AhmLed1.LedOff;
Image1.Picture.LoadFromFile('c:\sistemac\bmp\card.bmp');
SerialNumber1.Caption:='';
AHMLabel1.Caption:='Nume Persoana:';
NumePers1.Caption:='';
Panel3D6.Color:=clBtnFace;
Panel3D6.Font.Color:=clBlack;
BI_Adaugare.Enabled:=false;
BI_Modificare.Enabled:=false;
BI_Stergere.Enabled:=false;
ProgressBar1.Position:=0;
if card2 then Timer7.Enabled:=false
else
begin
Timer7.Enabled:=false;
Timer3.Enabled:=true;
end;
end;
…
3.2. – cartela nu există – procedura execută următoarele:
SE permite Adaugarea unei noi persoane în baza de date deoarece nu există nici o persoană cu această cartelă; Butonul Adăugare activ;
NU se permite Modificarea codului de acces; Butonul Modificare inactiv;
NU se permite Ștergerea din baza de date a unei înregistrări; Butonul Ștergere inactiv;
se dezactivează timer-ul 6;
se activează timer-ul 7 descris anterior, pentru ca aplicația să poată sesiza scoaterea cartelei 1 din cititor.
Procedurile de adăugare, modificare și ștergere a informaților în și din bazele de date, cu care programul lucrează;
Adaugarea unei persoane
Procedura permite adăugarea unei noi persoane atât în listă cât și în baza de date cu persoanele care au drept de acces.
Prin apelul procedurii, se activează butoanele Salvare și Renunțare de pe formul corespunzător meniului Drepturi de Acces.
După introducerea numelui persoanei, a codului de acces atribuit, a confirmări acestuia și prin apăsarea butonului Salvare, se apelează procedura corespunzătoare acestuia care execută:
verifică dacă numele introdus mai există în listă;
în caz afirmativ procedura afișează un mesaj corespunzător și cere introducerea unui alt nume de persoană;
verifică dacă codul de acces atribuit mai există în listă;
în caz afirmativ procedura afișează un mesaj corespunzător și cere introducerea unui alt cod de acces și de confirmare;
verifică dacă codul de acces este identic cu cel de confirmare;
în caz negativ procedura afișează un mesaj corespunzător și cere introducerea din nou a codului de acces și a celui de confirmare;
în caz afirmativ procedura:
salvează atât în listă cât și în baza de date datele introduse;
dezactivează butoanele Salvare, Renunțare și Adăugare pentru a nu mai permite introducerea unei noi înregistrări.
Modificarea unui cod de acces
Procedura permite modificarea codului de acces, atât în listă cât și în baza de date cu persoanele care au drept de acces, al unei persoane existente în baza de date.
Prin apelul procedurii, se activează butoanele Salvare și Renunțare de pe formul corespunzător meniului Drepturi de Acces.
După introducerea noului cod de acces, a confirmări acestuia și prin apăsarea butonului Salvare, se apelează procedura corespunzătoare acestuia care execută:
verifică dacă noul cod de acces atribuit mai există în listă;
în caz afirmativ procedura afișează un mesaj corespunzător și cere introducerea unui alt cod de acces și de confirmare;
verifică dacă codul de acces este identic cu cel de confirmare;
în caz negativ procedura afișează un mesaj corespunzător și cere introducerea din nou a codului de acces și a celui de confirmare;
în caz afirmativ procedura:
salvează atât în listă cât și în baza de date noul cod de acces introdus;
dezactivează butoanele Salvare, Renunțare și Modificare pentru a nu mai permite schimbarea codului de acces.
Ștergerea unei persoane
Procedura permite ștergerea unei noi persoane atât din listă cât și din baza de date cu persoanele care au drept de acces.
Prin apelul procedurii, se activează butoanele Renunțare și Șterge de pe formul corespunzător meniului Drepturi de Acces.
După introducerea numelui persoanei și prin apăsarea butonului Șterge, se apelează procedura corespunzătoare acestuia care execută:
verifică dacă numele introdus există în listă;
în caz negativ procedura afișează un mesaj corespunzător;
în caz afirmativ procedura:
afișează un mesaj corespunzător;
șterge persoana atât din listă cât și din baza de date;
dezactivează butoanele Șterge și Renunțare, dar lasă activ butonul Ștergere pentru a permite ștergerea unei noi înregistrări.
Prin apăsarea butonului Renunțare se șterg câmpurile Nume persoană, Cod acces și Confirmare Cod acces și se dezactivează toate butoanele implicate în operațiile de adăugare, modificare sau ștergere, practic se renunță definitiv la aceste operații.
Procedura de citire a cartelelor, realizată corespunzător informațiilor avute despre acestea;
La începutul procedurii am respectat algoritmul de resetare a numărătorului de adrese al cipului cartelei descris în partea teoretică a lucrării.
În continuare printr-un ciclu for se citesc cei 32 de octeți ai cartelei care vor fi memorați în variabila data[]. Pentru citirea fiecărui bit al cartelei am folosit un ciclu for de 8 pași prin care se citește valoarea registrului de stare al imprimantei, se determină starea bitului 5 al acestui registru și prin adăugarea noi valori citite la valoarea veche a variabilei value*02 se determină în final valoarea unui octet. Pentru citirea fiecărui bit, numărătorul de adrese al cipului trebuie incrementat cu 1, astfel această incrementare se face prin bascularea semnalului de Clock al cipului.
Este prezentat în continuare codul sursă pentru citirea cartelei 1 a proiectului. Pentru citirea cartelei 2, procedura este identică cu excepția pinilor care se adresează pentru clock și reset și a pinului pe care vin datele de la cartelă.
Codul sursă este:
…
begin
Port[$378]:=$C2; {"ACCES BLOCAT", Reset Card 1 (1100_0010) }
Port[$378]:=$C3; {"ACCES BLOCAT", Reset + Clock (1100_0011) }
Port[$378]:=$C2; {"ACCES BLOCAT", Reset Card 1 (1100_0010) }
Port[$378]:=$C0; {"ACCES BLOCAT", (1100_0000) }
y:=1;
for i:=1 to 32 do
begin
value:=0;
for j:=1 to 8 do
begin
a:=Port[$379];
card[y]:=a;
value:=value*$02 + ((a and $20) div $20);
Port[$378]:=$C1; {1100_0001} Clock=1
Timer2.Enabled:=True;
Port[$378]:=$C0; {1100_0000} Clock=0
Timer2.Enabled:=True;
y:=y+1;
end;
data[i]:=value;
Progressbar1.Stepit;
end;
end;
…
Procedura de realizare a copiilor de siguranță a bazei de date de lucru.
La sfârșitul fiecărei luni sau an calendaristic baza de date de lucru se copiază într-un fișier cu numele lunii și a anului care a trecut (Ex: 5_1999, 1_2000) după care baza de date de lucru se golește.
Pentru realizarea acestui lucru la lansarea în execuție a aplicației, se memorează în variabila Year anul curent, în variabila Month luna curentă și se activează timer-ul 8 al proiectului.
Acesta citește data curentă, o decodifică și apoi compară luna și anul prin variabilele Luna și An determinate prin decodificarea datei, cu luna și anul memorat în variabilele Month și Year.
Dacă Luna > Month atunci se execută copierea bazei de date într-un fișier după care golirea ei. La sfârșit variabilele Month și An i-au ca valori luna și anul curent.
Codul sursă pentru timer-ul 8 este:
…
begin
data:=date;
DecodeDate(data, An, Luna, Zi);
if An > Year then Month:=0;
if Luna > Month then
begin
if Month=0 then Month:=12;
CopyFisier('c:\sistemac\acces.db',PChar('c:\sistemac\backup\' + IntToStr(Month) + '_'+ IntToStr(Year) + '.db'));
DataModule2.Table1.Close;
DataModule2.Table1.EmptyTable;
DataModule2.Table1.Open;
Month:=Luna;
Year:=An;
end;
end;
…
Procedura CopyFisier are codul următor:
begin
CopyFile(FromFile, ToFile, true)
end;
=== proiect stat ===
Cuprins
Cuprins 1
1. Introducere 3
2. Considerente teoretice 4
2.1. Portul paralel al Pc-ului 4
2.1.1. IEEE 1284 4
2.1.2. Conectoarele 6
2.1.3. Cablul de conectare la Port 8
2.1.4. Modul de Funcționare Electric 8
2.1.4.1. Modul de Compatibilitate 8
2.1.4.1.1. Liniile de Date 9
2.1.4.2. Modul pe Nibluri 10
2.1.4.3. Modul pe Octeți 11
2.1.4.4. Modul Enhanced Parallel Port (EPP) 12
2.1.4.4.1. Liniile de date 12
2.1.4.5. Modul Extended Capabilities Port (ECP) 13
2.1.4.5.1. Liniile de date 13
2.1.5. Interfața logică 14
2.1.6. Regiștrii Portului Paralel 15
2.1.6.1. Regiștrii Portului Paralel Standard 15
2.1.6.2. Regiștrii Porturilor Paralele Îmbunătățite (EPP) 17
2.1.6.2.1. Handshake EPP 18
2.1.6.3. Porturi cu Capacități Extinse (ECP) 21
2.1.6.3.1. Handshake ECP 22
2.1.6.3.2. Run Length Encoding (RLE) – Comprimarea Datelor 25
2.2. Cartelele telefonice 27
2.2.1. Introducere 27
2.2.2. Cardurile din generația a I-a 27
2.2.2.1. Schema generală a cipului 27
2.2.2.2. Configurația pinilor 28
2.2.2.3. Trăsături / Caracteristici principale 28
2.2.2.4. Diagramele de timp 29
2.2.2.5. Harta de memorie pentru cardurile din Franța și St. Maarten 29
2.2.2.6. Harta de memorie pentru cardurile altor țări 30
2.2.3. Cardurile de generația a II –a 32
2.2.3.1. Introducere 32
2.2.3.2. Configurația pinilor 32
2.2.3.3. Trăsături-caracteristici principale. 32
2.2.3.4. Diagramele de timp 32
2.2.3.5. Harta de memorie pentru 4 sau 5 nivele octale 33
2.2.3.6. Harta de memorie pentru noile carduri de 512 biți: (Grecia, Canada, UK, Sud Africa) 34
2.2.3.7. Generația a II-a pentru cardurile Franțuzești: (TG2) 35
2.2.3.8. Caracteristicile electrice ale cardurilor 36
2.2.3.9. Schemă cititor 38
3. Realizarea practica 39
3.1. Partea hard. 39
3.1.1. Modulul local (modul 1) 39
3.1.1.1. Schema bloc 39
3.1.1.1.1. Referințe 39
3.1.1.2. Placa de bază 40
3.1.1.2.1. Referințe 41
3.1.1.3. Interfața modul 1 – modul 2 41
3.1.1.3.1. Referințe 42
3.1.2. Modulul la distanță (modul 2) 42
3.1.2.1. Schema bloc 42
3.1.2.1.1. Referințe 42
3.1.2.2. Placa de bază 43
3.1.2.2.1. Referințe 44
3.1.2.3. Tastatura numerică 45
3.1.2.3.1. Referințe 45
3.2. Partea soft 46
3.2.1. Prezentarea programului 46
3.2.2. Prezentarea aplicației 46
4. Bibliografie. 46
1. Introducere
În contextul generalizat al tranziției societății românești apare tot mai pregnant necesitatea introducerii sistemelor automatizate și informatizate, ca instrumente ale managementului resurselor umane, precum și pentru protecția și gestionarea strictă a informațiilor, elemente importante în realizarea obiectivului general al firmelor – realizarea de profit.
Sistemele automatizate și informatizate oferă o serie de facilități echipelor manageriale care scurtează substanțial lanțul informațional atât pe verticală cât și pe orizontală, deciziile luate de acestea având în cazul folosirii acestor sisteme un caracter realist și oportun.
Printre aceste sisteme se încadrează și Sistemul de Control Acces.
Un asemenea sistem oferă o serie de avantaje în funcție de modul și utilitatea pentru care a fost proiectat:
Sistemul poate efectua automat pontajul. Rezultatul poate fi un fișier care poate fi preluat de programul de calcul al salariilor.
Poate permite controlul accesului în spațiu: angajații vor avea acces cu ajutorul cartelelor doar în încăperile/zonele programate.
Poate permite accesul în timp: se poate programa perioada în care angajatul are acces în zona/încăperea respectivă.
Toate evenimentele din sistem pot fi înregistrate. În cazul unor evenimente nedorite se pot vizualiza înregistrările.
În sistemele de control acces identificarea utilizatorilor se poate face cu ajutorul cititoarelor de cartelă. Acestea se fabrică în tehnologii diferite, fiecare având avantaje și dezavantaje. Astfel există diferite tipuri de cititoare cum ar fi:
Cititoare de cod de bare – codul de bare este prezent pe cartela de acces.
Avantaje: preț redus;
Dezavantaje: copiere ușoară, durata de viață redusă (6-12luni).
Cititoare magnetice
Avantaje: cartele ieftine;
Dezavantaje: durată de viață limitată (500-1000 mii citiri), duplicare posibilă.
Cititoare de proximitate
Avantaje: grad de securitate înalt, imposibil de sabotat, se pot monta ascuns;
Dezavantaje: preț ridicat.
În lucrarea de față nu am folosit nici unul dintre aceste tipuri de cititoare deoarece nu am avut posibilitatea procurării lor.
Astfel sistemul de control acces proiectat folosește pentru identificarea persoanelor seria internă a cartelei telefonice (nouă sau veche) și un cod numeric de 5 cifre.
Cartelele telefonice:
Avantaje:
seria internă a cartelei nu poate fi modificată deoarece acesta este memorată într-o zonă a cartelei protejată la scriere din fabrică;
cartela poate fi folosită și după consumarea tuturor unităților financiare înscrise.
Dezavantaje:
preț ridicat în cazul folosirii cartelelor noi;
deteriorare ușoară.
Sistemul de control acces proiectat asigură următoarele avantaje și dezavantaje:
Avantaje:
în cazul furtului cartelei, cartela nu poate fi folosită deoarece nu se cunoaște codul de acces aferent sau vechiul proprietar poate fi eliminat din baza de date.
datele se înregistrează lunar și pot fi păstrate o lungă perioadă de timp.
Dezavantaje:
sistemul nu asigură înregistrarea datelor și la ieșirea din încăpere.
În concluzie cu un asemenea sistem se pot obține date vitale chiar în diferite situații.
2. Considerente teoretice
2.1. Portul paralel al Pc-ului
2.1.1. IEEE 1284
Caracteristica definitorie a portului paralel se regăsește chiar în numele său. Portul este paralel deoarece folosește pentru transferul semnalelor opt fire separate, incluse într-un singur cablu – câte un fir pentru fiecare bit dintr-un octet de date.
Teoretic, lucrul cu opt fire înseamnă că se pot muta datele de opt ori mai repede printr-o conexiune paralelă decât printr-un singur fir. Dacă toate fenomenele implicate ar respecta teoria, această afirmație ar fi adevărată.
Primul său adversar, portul serial RS-232, s-a declarat învins, viteza sa maximă de 115,2 kbit/s fiind depășită, chiar și în modelele mai vechi de PC-uri, de vitezele de două până la cinci ori mai mari obținute prin portul paralel. Ultimele modele de interfețe proiectate pe baza tehnologiei paralele oferă viteze de transfer de până la 100 de ori mai mari decât viteza de transfer prin portul serial simplu.
La fel ca orice mare invenție, portul paralel a apărut datorită unei probleme care trebuia să fie rezolvată – legarea calculatorului la o imprimantă, care să elimine problemele și costurile de fabricație ale unui port serial. Astfel firma IBM a modificat ușor conexiunea paralelă simplă creată inițial de firma de imprimante Centronics Data Computer Corporation, a înlocuit conectorul de 36 de pini cu unul mai mic și a adăugat acest echipament primelor PC-uri. Datorită scopului bine definit, acest port a căpătat curând supranumele de "port de imprimantă", pentru că erau singurele echipamente periferice care puteau fi cuplate la primele porturi de acest tip.
În plus, IBM a adăugat două semnale noi pentru a da PC-ului un control sporit asupra imprimantei și a corecta frecvența semnalelor transmise prin interfață.
În timp, portul paralel al calculatorului personal a început să aspire la ceva superior. Își făcea treaba, și o făcea bine, trimițând date de la PC la imprimantă (într-o singură direcție) cu viteze cuprinse între 50 și 150 kiloocteți pe secundă. A devenit foarte răspândit, putem spune chiar universal.
Totuși, în 1987, proiectanții firmei IBM au analizat modelul portului paralel și l-au făcut să lucreze în ambele direcții, creând astfel un port paralel bidirecțional. Datorită legăturii intime cu calculatorul PS/2, acest port este numit uneori port paralel PS/2.
Pentru realizarea transferurilor bidirecționale de date prin vechile porturi unidirecționale era nevoie de redefinirea semnalelor. Programatorii au schimbat destinația a patru semnale din conectorul paralel, care aveau inițial funcția de a transmite informații de stare de la imprimantă la PC. Aceste semnale erau deja orientate în direcția corectă. Tot ce au avut de făcut programatorii a fost să preia controlul direct al portului și să utilizeze semnalele conform noilor lor definiții. Desigur, cele patru semnale nu formau un octet. Ele nu făceau decât să transmită prin port patru biți de informație în direcția inversă. Deoarece patru biți formează un niblu, noul mod de lucru al portului paralel a primit curând numele modul prin nibluri.
Transferul pe patru biți a avut implicații mai mari, astfel jumătate din numărul normal de biți înseamnă, de asemenea, jumătate din viteză. Modul pe nibluri operează la aproximativ jumătate din viteza normală a portului paralel – mai rapid decât porturile seriale care lucrează pe o singură linie, însă nu la viteza maximă permisă de portul paralel.
Inginerii de la firma producătoare de adaptoare de rețea Xircom Incorporated, au decis să facă ceva pentru a îmbunătăți performanțele portului paralel și s-au aliat cu producătorul de calculatoare notebook Zenith Data Systems în scopul găsirii unei metode mai bune de utilizare a legăturii paralele. În timp, li s-a adăugat puternica firmă Intel Corporation, împreună cu care au format un triumvirat denumit Enhanced Parallel Port Partnership (parteneriatul pentru obținerea portului paralel extins). Ei au testat două metode pentru creșterea vitezei transferului de date printr-un port paralel. Au raționalizat interfața logică încât PC-ul avea nevoie de o suprasarcină (overhead) mai mică pentru a deplasa octeții prin port. În plus, au definit cu atenție sincronizarea semnalelor transferate prin port, reducând la minimum timpul pierdut și împiedicând astfel apariția erorilor de întârziere. Rezultatul cercetărilor a fost denumit Enhanced Parallel Port (port paralel extins).
În luna martie 1992, cele trei firme au supus spre aprobare comitetului IEEE (Institute of Electrical and Electronic Engineers) versiunea 1.7 a specificației pentru a fi adoptată ca standard industrial.
Deși versiunea EPP a portului paralel permitea creșterea performanțelor conexiunii de aproape zece ori, nu a fost suficient pentru a-i mulțumi pe toți. Astfel firma Hewlett-Packard s-a aliat cu firma Microsoft pentru a transforma portul paralel într-un standard de extensie universal, denumit Extended Capabilities Port (sau ECP). În luna noiembrie 1992, cele două companii au lansat pe piață prima versiune a specificației ECP, aplicabilă la calculatoarele care foloseau magistrala de extensie ISA. Această primă implementare adaugă la modelul EPP două noi moduri de transfer – un mod de comunicație rapid, pe două canale, între un PC și echipamentele sale periferice și un alt mod pe două canale, cu performanțe mult îmbunătățite prin aplicarea unei operații simple de comprimare totală a datelor – și definește un sistem complet de control software.
Inovația ECP se bazează pe un protocol pentru schimbarea datelor printr-o legătură paralelă de mare viteză. Dispozitivele de la cele două capete ale fiecărei conexiuni ECP negociază viteza și modul de deplasare a datelor. PC-ul poate interoga orice dispozitiv ECP pentru a determina capacitățile de lucru ale acestuia. De exemplu, calculatorul poate determina limbajul folosit de imprimantă și configura corespunzător programul driver al acesteia. În plus, dispozitivele ECP transmit PC-ului viteza la care pot efectua transmisia de date și formatul datelor cu care lucrează. Specificația ECP include detectarea erorilor și dialogul de confirmare între dispozitive. De asemenea, permite utilizarea comprimării de date pentru creșterea vitezei de transfer.
În 30 martie 1994, IEEE Standards Board a aprobat standardul pentru portul paralel, IEEE-1284-1994. Standardul includea toate modurile de bază și modelele de porturi paralele, incluzând atât ECP, cât și EPP. A fost propus spre aprobare și Institutului Național American pentru Standarde (American Național Standards Institute) și a fost aprobat ca standard în 2 septembrie 1994.
Standardul IEEE 1284 definește (sau redefinește) toate aspectele conexiunii paralele, de la interfața software din PC și până la componentele electronice de control din imprimanta. Porturile paralele sunt împărțite în două categorii: dispozitive compatibile IEEE 1284, care recunosc și operează cu noua interfață, și care include, de fapt, aproape tot ce s-a produs în domeniul porturilor și dispozitivelor paralele, și dispozitive conforme cu standardul IEEE 1284, care înțeleg și folosesc noul standard. Această deosebire s-a făcut în principal între porturile anterioare și cele ulterioare standardizării.
Înainte de apariția standardului IEEE 1284, porturile paralele puteau fi împărțite în patru categorii: porturi paralele standard (Standard Parallel Ports), porturi paralele bidirecționale (Bi-directional Parallel Ports, cunoscute și ca porturi paralele PS/2), porturi paralele extinse (Enhanced Parallel Ports) și porturi cu capacități extinse(Extended Capabilities Ports). Specificația IEEE redefinește diferențele dintre porturi, clasificându-le după modelul de transfer folosit. Tipul standard (Standard Parallel Port) este cel capabil să realizeze numai transferuri în modul pe nibluri. Un port PS/2 (port paralel bidirecțional) mai vechi este unul care poate efectua și transferuri în modul pe octeți. Porturile EPP și ECP sunt cele care folosesc modurile EPP și ECP, așa cum sunt descrise de specificația IEEE 1284.
EPP și ECP rămân standarde separate de IEEE 1284, deși ele au fost refăcute astfel încât să se bazeze pe această specificație. Atât EPP cât și ECP operează în modurile proprii, dar conform specificației IEEE pentru conexiunile fizice și semnalele electrice. Cu alte cuvinte, IEEE 1284 descrie caracteristicile fizice și electrice ale unei categorii de porturi paralele. Celelalte standarde descriu modul în care porturile operează și se leagă în alte aplicații.
2.1.2. Conectoarele
Înainte de toate, conectorul este cel care pune portul la lucru. Este modul în care portul paralel își face simțită prezența. Este singura componentă din interfață cu care majoritatea utilizatorilor au avut vreodată de-a face. O dată cunoscând intrările și ieșirile conectoarelor paralele, se pot conecta majoritatea imprimantelor pentru PC-uri și o mulțime de alte dispozitive.
În spatele calculatorului, este dispus un conector mamă trapezoidal cu 25 de pini, iar la imprimantă se găsește un conector mamă cu 36 de pini, de tip panglică, copiat după modelul original Centronics.
Comisia IEEE a standardizat cele doua conectoare astfel: conectorul 1284-A – cel de PC și 1284-B – cel de la imprimantă.
În continuare mă voi referi numai la conectorul 1284-A al Pc-ului.
Acesta este de tip trapezoidal cu 25 de pini.
Vedere din față
Figura 2.1. Conectorul IEEE 1284 A, o mufă trapezoidală cu 25 de pini,
tip mamă și diagrama pinilor.
Din cele 25 de contacte ale acestui conector de port paralel, 17 sunt atribuite unor semnale individuale pentru transfer de date și control. Cei opt pini rămași sunt folosiți pentru masă, câte unul pentru fiecare linie de date. În tabelul 2.1 sunt prezentate funcțiile atribuite fiecăruia dintre aceste semnale, așa cum au fost implementate în modelul original IBM de port paralel pentru PC și pentru majoritatea calculatoarelor compatibile, până la adoptarea standardului IEEE 1284. În modul de operare de tip compatibilitate, standardul IEEE folosește, în principiu, aceleași atribuiri de semnale.
În specificația IEEE 1284, definiția fiecărui semnal de pe fiecare pin este dependentă de modul de operare al portului. Numai definițiile se modifică în interiorul PC-ului, cablarea nu suferă schimbări – dacă nu ar fi așa, comutarea modurilor nu s-ar mai face atât de ușor. Definițiile modificate determină schimbarea protocolului, adică a dialogului de confirmare a semnalelor care controlează fiecare transfer.
Conectorul fizic aflat în spatele PC-ului poate opera în oricare dintre cele cinci moduri de lucru, iar definițiile semnalelor și modurile lor de operare se vor modifica în mod corespunzător. În tabelul 2.2 sunt prezentate cele cinci moduri de lucru împreună cu semnalele atribuite fiecăruia.
Tabelul 2.1. Funcțiile pinilor în portul paralel original al calculatorului IBM PC
Tabelul 2.2. Semnificațiile semnalelor pentru conectorul IEEE 1284-A în toate modurile de lucru
Pe lângă alocările standardizate, IEEE 1284 ne oferă și un nomenclator standard pentru descrierea semnalelor. În tabelul 2.2 și în toate tabelele care se referă la standard, numele semnalelor care au în față litera “n” indică faptul că semnalul este negativ când este activ – ceea ce înseamnă că absența tensiunii semnifică prezența semnalului.
Schimbările de mod sunt negociate între PC și imprimantă sau alt echipament periferic conectat la portul paralel. Cum este și normal, ambele capete ale conexiunii comută modurile simultan, astfel încât semnificațiile semnalelor rămân aceleași la cele două capete.
2.1.3. Cablul de conectare la Port
Natura semnalelor portului paralel reprezintă cel mai mare pericol. Semnalele interacționează între ele și cu celelalte fire din cablu, în detrimentul tuturor. Fronturile semnalelor digitale se degradează. Cu cât este mai mare lungimea cablului, cu atât semnalele care îl parcurg suferă o deformare mai mare. Din acest motiv, lungimea maximă recomandată a unui cablu de imprimantă este de zece picioare (aproximativ 3 metri). Nu toate cablurile cu o lungime mai mare vor determina o funcționare defectuoasă – experiența a dovedit deseori contrariul – însă în unele situații, anumite cabluri devin nesigure când sunt întinse pe distanțe lungi.
Modurile de operare la viteză mare permise de porturile paralele moderne le fac și mai pretențioase. Când portul paralel operează în modul EPP sau ECP, calitatea cablului devine o problemă esențială, chiar și pentru distanțe scurte. Viteza de semnalizare prin una dintre aceste interfețe poate ajunge în gama megahertzilor.
Spre deosebire de cablarea paralelă standard, liniile de date din cablurile IEEE 1284 trebuie să fie dublu ecranate pentru a preveni afectarea semnalelor prin interferență. Fiecare fir de semnal trebuie să fie răsucit împreună cu perechea sa legată la masă. Chiar dacă unele conectoare standard nu conțin pini separați pentru fiecare dintre aceste semnale de masă, firele legate la masă trebuie să fie prezente și să aibă lungimea corespunzătoare cablului respectiv.
2.1.4. Modul de Funcționare Electric
În fiecare dintre cele cinci moduri, portul paralel IEEE 1284 funcționează ca și cum ar fi un tip diferit de aparat electronic.
În modul de compatibilitate, portul IEEE 1284 operează aproape la fel ca un port de imprimantă obișnuit, folosit la primele modele de calculatoare personale. Acest mod de lucru permite datelor să circule într-o singură direcție, de la PC la imprimantă.
Modul pe nibluri oferă imprimantei (sau echipamentului periferic legat la port) posibilitatea de a răspunde, permițându-i să converseze cu calculatorul. În modul pe nibluri, datele pot fi transferate în oricare dintre cele două sensuri, însă asimetric. Informația circulă mai repede de la calculator către imprimantă, decât în sens invers.
Modul pe octeți realizează transferul complet simetric.
În modul EPP, portul paralel a devenit o adevărată magistrală de extensie. O metodă nouă de conectare la magistrala de date a calculatorului a oferit acestei interfețe o viteză mult îmbunătățită în ambele sensuri. Multe sisteme pot lucra cu porturile paralele în modul EPP la viteze de zece ori mai mari decât în modurile de compatibilitate, pe nibluri sau pe octeți.
Modul ECP reprezintă ultima etapă în evoluția portului paralel, care oferă nu numai o viteză mare, ci și un control îmbunătățit. Modul ECP poate efectua aproape orice operație caracteristică unei alte interfețe de extensie (inclusiv SCSI).
2.1.4.1. Modul de Compatibilitate
Elementul comun al diferitelor tipuri de porturi paralele este modelul clasic introdus de firma IBM în primul PC. Acest model a fost conceput strict ca o interfață pentru transferul de informații într-o singură direcție. PC-ul trimite date la imprimantă, dar nu așteaptă nici un răspuns de la acesta. Imprimanta are nevoie de o metodă de a transmite PC-ului un semnal prin care să îl avertizeze în cazul unor potențiale supraîncărcări cu date. În termeni electronici, interfața are nevoie de un fel de conexiune inversă (feedback) – trebuie să primească de la imprimantă informații pe care PC-ul să le poată folosi pentru a controla fluxul de date.
Pentru a oferi conexiunea inversă necesară pentru controlul fluxului de date, atât în modelul original de port Centronics, cât și în adaptarea acestuia realizată de firma IBM, sunt prevăzute câteva semnale de control. Acestea au fost proiectate în scopul de a permite PC-ului să monitorizeze modul de lucru al imprimantei – dacă datele sunt recepționate corect, dacă imprimanta are suficientă hârtie sau bandă cu tuș și chiar dacă imprimanta este pornită. PC-ul poate folosi aceste informații pentru a controla fluxul de date sau pentru a vă trimite un mesaj de avertizare asupra unui aspect necorespunzător. În plus, portul paralel original includea semnale de control transmise de la PC la imprimantă, prin care perifericul era anunțat când dorea calculatorul să transfere date și se putea cere imprimantei să facă o inițializare. Standardul IEEE 1284 a păstrat toate aceste funcții în modul de compatibilitate.
Fiecare semnal transmis prin portul paralel în modul de compatibilitate are propria sa funcție. Toate aceste semnale sunt prezentate în paragrafele următoare.
2.1.4.1.1. Liniile de Date
Cele opt linii de date ale interfeței paralele transferă datele în toate modurile de operare. În modul de compatibilitate, ele transferă datele de la calculatorul gazdă la echipamentul periferic prin intermediul pinilor de la 2 la 9. Pinii cu numere mai mari sunt cei mai nesemnificativi pentru codul digital. Pentru a trimite date la un echipament periferic, calculatorul gazdă plasează pe liniile de date o configurație de tensiuni digitale.
Linia nStrobe (pin 1)
PC-ul activează linia Strobe pentru a comunica imprimantei că setul de biți de pe liniile de date reprezintă un singur caracter valid, pe care imprimanta ar trebui să îl citească și să îl accepte. Linia Strobe este activată numai după ce au fost plasate semnalele pe liniile de date. Cele mai multe porturi paralele întârzie semnalul Strobe cu aproximativ 0,5s pentru a asigura că semnalele de date au fost plasate pe liniile respective. Semnalul Strobe durează cel puțin 0,5s, astfel încât imprimanta să îl poată recunoaște. Semnalele de pe liniile de date trebuie să aibă o valoare constantă în această perioadă și puțin după, astfel încât imprimanta să aibă timp să le citească.
Semnalul Strobe este folosit în logică negativă. În specificația IEEE 1284, acest semnal poartă numele nStrobe.
Linia Busy (pin 11)
Imprimanta activează semnalul Busy imediat ce detectează semnalul Strobe și păstrează semnalul activ până când este pregătită să accepte caracterul următor. Semnalul Busy poate dura o fracțiune de secundă (poate chiar 1s) sau poate fi menținut de imprimantă pentru o perioadă nedefinită, până când buffer-ul imprimantei se golește. Semnalul Busy folosește logica pozitivă.
Linia Acknowledge (pin 10)
Acest semnal transmite PC-ului că totul a decurs normal în operația de tipărire a caracterului sau în operația de transfer în bufferul intern. Acest semnal este opusul semnalului Busy, pentru că înștiințează calculatorul că imprimanta este gata de un alt transfer. Când pe linia Busy se strigă "Mai stai puțin!", pe linia Acknowledge se aude "Sunt gata să primesc informație!". Semnalul Acknowledge lucrează în logică negativă.
Semnalul Acknowledge durează aproximativ 8s, astfel că ciclul de transfer al unui singur caracter printr-un port paralel convențional ajunge 10s. Dacă se ia în calcul o durată medie obișnuită a acestui semnal pentru un port paralel convențional, viteza maximă de transfer este în jur de 100.000 de caractere pe secundă. În specificația IEEE 1284, acest semnal este denumit nAck.
Linia Select (pin 13)
Activarea acestui semnal indică PC-ului faptul că imprimanta este on-line. Semnalul Select este folosit în logică pozitivă, fiind un impuls de +5V, care în modul de compatibilitate din specificația IEEE 1284 rămâne activ întreaga perioadă de timp în care imprimanta este on-line.
Linia Paper Empty (pin 12)
Semnalul Paper Empty avertizează calculatorul că are nevoie de hârtie. Cele mai multe imprimante activează semnalul Busy când nu sunt alimentate cu hârtie. Acest semnal permite sistemului de operare să afișeze pe monitorul calculatorului un mesaj de avertizare, în care se cere alimentarea imprimantei cu hârtie. În specificația IEEE 1284, acest semnal este denumit PError, prescurtare de la "Paper Error.
Linia nError (pin 15)
Al treilea semnal de stare transmis de la imprimantă la PC este Fault (Error), un semnal general de avertizare pentru orice eroare de imprimantă. Când apare o problemă pe care trebuie să o indice, linia nError trece în starea ‘low’. În același timp, imprimanta poate activa și alte semnale pentru a opri fluxul de date, inclusiv Busy și Select. Deoarece acest semnal este folosit în logică negativă, a fost denumit în specificația IEEE nFault.
Linia nInitialize Printer (pin 16)
Pe lângă cele trei semnale pe care imprimanta le utilizează pentru a avertiza calculatorul asupra stării în care se găsește, portul paralel a fost prevăzut cu alte trei semnale de control, pe care PC-ul le poate folosi pentru a comanda imprimanta fără a adăuga nimic în fluxul de date.
Semnalul Initialize Printer are funcția de inițializare a imprimantei, ajutând calculatorul și imprimanta să se sincronizeze.
În timpul unei operații normale, calculatorul plasează pe linia Initialize Printer o tensiune constantă. Anularea acestei tensiuni reprezintă pentru imprimantă comanda de reinițializare. În specificația IEEE 1284, acest semnat, care lucrează în logică negativă, este denumit nInit.
Linia Select Input
Acest semnal forțează trecerea în starea on-line a imprimantei, când este trecut în starea ‘low’. Comutarea în starea ‘high’ deselectează imprimanta.
În specificația IEEE 1284 este denumit nSelectIn.
Linia Auto Feed Xt
Semnal are rolul de a cere imprimantei să facă un salt la o linie nouă.
Prin menținerea semnalului în starea ‘low’, PC-ul cere imprimantei să acționeze în modul IBM (mașină de scris), făcând un salt la o linie nouă la fiecare caracter Carriage Return primit. Prin trecerea semnalului în starea ‘high’, calculatorul cere imprimantei să interpreteze caracterul Carriage Return literal și să se limiteze doar la mutarea capului de tipărire.
În specificația IEEE 1284, acest semnal este denumit nAutoFd.
2.1.4.2. Modul pe Nibluri
Primele porturi paralele foloseau circuite unidirecționale pentru liniile de date.
Oricum, fiecare port paralel trebuia să aibă cinci semnale care să circule de la imprimantă la PC. Acestea sunt nAck, Busy, PError, Select și nFault. Patru dintre aceste semnale se pot folosi pentru a transmite date în sens invers, de la imprimantă la PC. Informația ar circula cu jumătate din viteza normală, adică patru biți simultan. Această metodă de transfer al datelor constituie principiul de bază al modului pe nibluri, denumit astfel deoarece în limbajul calculatoarelor o jumătate de octet este numită niblu. Utilizând modul pe nibluri, orice port paralel poate opera bidirecțional – cu viteză normală de la calculator la imprimantă, însă cu doar jumătate din viteză în sens invers.
În modul pe nibluri, calculatorul determină dacă este cazul să trateze semnalele de stare ale imprimantei ca date care circulă în sens invers. Desigur, acest sistem presupune ca și dispozitivul periferic situat la celălalt capăt al legăturii portului paralel – imprimanta, sau orice alt echipament – să cunoască faptul că este comutat în modul pe nibluri și să înțeleagă ce semnale să plaseze, pe ce linii și când.
Specificația IEEE 1284 definește un protocol special pentru comutarea în modul pe nibluri și pentru modul de tratare a semnalelor în modul pe nibluri de către PC și echipamentele periferice.
Procesul este complex și presupune mai multe etape.
Calculatorul determină dacă echipamentul periferic conectat la el recunoaște standardul IEEE. În cazul unui răspuns negativ, acest standard nu poate fi folosit.
PC-ul transmite echipamentului periferic comanda de comutare a modului.
După comutare în modul pe nibluri, semnalele de pe interfață capătă funcții noi.
Modul pe nibluri include două moduri de operare, iar semnalele de pe liniile portului paralel se comportă diferit în fiecare fază.
Aceste faze sunt:
faza de așteptare a operării inverse (reverse idle phase);
faza de transfer a datelor în sens invers (reverse data transfer phase).
În faza de așteptare a operării inverse, semnalul PtrClk (nAck în modul de compatibilitate) operează ca un semnal de avertizare de la echipamentul periferic conectat la portul paralel. Activarea acestui semnal solicită portului paralel lansarea unei cereri de întrerupere, prin care să anunțe că echipamentul periferic are date disponibile pentru transfer. PC-ul confirmă că este nevoie de date și acceptă transferul acestora prin trecerea semnalului HostBusy (nAutoFd în modul de compatibilitate) în starea ‘low’ și astfel sistemul este comutat în faza de transfer a datelor în sens invers.
După terminarea transferului unui octet complet de date, PC-ul comută din nou semnalul HostBusy. Când echipamentul periferic are din nou pregătire date pentru transfer și PC-ul trece semnalul HostBusy în starea ‘low’, începe un alt transfer. În cazul în care calculatorul scade semnalul amintit înainte ca echipamentul periferic să aibă date disponibile pentru transfer, se trece din nou prin faza de așteptare a operării inverse.
În timpul fazei de transfer a datelor în sens invers, informațiile sunt plasate prin două transferuri, după cum este prezentat în tabelul 2.3. Ca urmare, fiecare ciclu de transfer presupune două semicicluri în care sunt transferați câte patru biți. În primul semiciclu echipamentul periferic transferă cei mai puțin semnificativi patru biți, și apoi biții cei mai semnificativi.
Tabelul 2.3. Definițiile biților de date în modul pe nibluri
Singurul avantaj al modului pe nibluri este compatibilitatea universală. Chiar și înainte de apariția specificației IEEE 1284, acest mod de operare permitea oricărui port paralel să opereze bidirecțional. Însă datorită vitezei reduse la transferul invers, modul pe nibluri ar fi ultima alegere.
2.1.4.3. Modul pe Octeți
Spre deosebire de modul pe nibluri, modul pe octeți are nevoie de componente hardware speciale. Schema de bază pentru circuitele care operează în modul pe octeți a apărut când firma IBM a dezvoltat linia de calculatoare PS/2 și a produs Data Migration Facility. Prin încorporarea bufferelor bidirecționale în toate cele opt linii de date ale portului paralel, firma IBM a permis și transmisia și recepția de informații la ambele capete ale conexiunii. Înainte de apariția standardului IEEE, aceste porturi erau cunoscute ca porturi paralele PS/2 sau porturi paralele bidirecționale.
Ca și modul pe nibluri, un echipament periferic aflat în modul pe octeți folosește semnalul PtrClk pentru a cere o întrerupere în calculatorul gazdă, anunțând astfel că are date disponibile pentru transfer. Când PC-ul tratează întreruperea, verifică semnalul de port nDataAvail, un semnal care folosește logica negativă pentru a indica faptul că un octet este pregătit pentru transfer. PC-ul poate dezactiva semnalul HostBusy pentru a declanșa transferul cu ajutorul semnalului HostClk (nStrobe), care are rolul de citire a datelor. După aceasta, PC-ul activează din nou semnalul HostBusy prin punerea în starea ‘high’, pentru a indica reușita transferului unui octet de date. Ciclul poate fi repetat pentru toți octeții care trebuie transferați.
Deoarece modul pe octeți este complet simetric, transferurile au loc la aceeași viteză, indiferent de direcție. Limita de viteză este dată de performanța componentelor hardware ale portului, de viteza cu care calculatorul gazdă tratează datele transferate prin port și de lungimea ciclurilor repetitive stabilită în specificația IEEE 1284. Teoretic, schema ar trebui să transfere un octet în cel mult 4s, însă sistemele reale ajung aproape la aceleași performanțe ca și porturile paralele convenționale, adică 100.000 octeți pe secundă.
2.1.4.4. Modul Enhanced Parallel Port (EPP)
Principalul avantaj al acestuia este performanța mult îmbunătățită, datorită unui model care a crescut viteza la care PC-ul putea împacheta date în interiorul portului. Modelul EPP a modificat structura hardware a portului, astfel că în loc să folosească registre de dimensiunea unui octet pentru transmiterea datelor prin port, PC-ul putea expedia un cuvânt format din 32 de biți de date direct de pe magistrală în port. După această operație, portul trebuia să conducă tot protocolul necesar pentru a reîmpacheta datele pentru patru transferuri de câte un octet. Reducerea suprasarcinii PC-ului și schema hardware mult mai eficientă au permis o îmbunătățire de zece ori a performanței în sistemele reale. Această creștere de viteză a determinat necesitatea stringentă de adoptare a unor specificații pentru cablurile de imprimantă. Specificația IEEE 1284 nu include detalii tehnice referitoare la legarea portului paralel la PC, astfel încât nu poate garanta că un port aflat în modul EPP va beneficia de această îmbunătățire de viteză. Mai mult decât atât, specificațiile pentru cablu din standardul IEEE 1284 nu sunt la fel de stricte ca mai vechile specificații EPP.
Modul de operare EPP prezentat de specificația IEEE 1284 folosește doar șase semnale în plus față de cele opt linii de date pentru a controla transferurile de date. Alte trei conexiuni din interfață sunt rezervate pentru anumiți producători individuali și nu sunt definite în standard.
Întru-un ciclu al modului EPP, interfața poate efectua una dintre următoarele patru operații:
scrierea unei adrese;
citirea unei adrese;
scrierea unor date;
citirea unor date.
Adresa corespunde unui registru al echipamentului periferic. Operațiile cu date se referă la adresa respectivă. După un semnal de adresă pot urma mai mulți octeți de date, realizându-se astfel o formă a modului în rafale (burst).
2.1.4.4.1. Liniile de date
Linia nWRITE
Printr-o conexiune EPP, datele pot circula în ambele direcții. Valoarea semnalului nWrite ne arată sensul de deplasare a datelor. Când semnalul nWrite este în starea ‘low’, indică faptul că datele sunt destinate echipamentului periferic. Când semnalul este în starea ‘high’, indică faptul că datele sunt transmise de la echipamentul periferic spre PC.
Linia nDStrobe
Ca și în cazul altor transferuri prin portul paralel, PC-ul are nevoie de un semnal care să indice momentul în care biții de pe liniile de date sunt valizi și corecți. Modul de operare EPP folosește pentru această funcție un semnal în logică negativă, denumit nDStrobe. Deși acest semnal are aceeași funcție ca și semnalul nStrobe al unui port paralel standard, a fost mutat pe un pin diferit, folosit anterior de semnalul nAutoFd (în modul de compatibilitate).
Linia nAStrobe
Sistemul EPP folosește semnalul nAStrobe pentru a identifica o adresă validă pe magistrala intefeței. Acest semnal folosește aceeași conexiune ca semnalul nSelectIn în modul de compatibilitate.
Linia nWAIT
Pentru a confirma recepția corectă a unui transfer de date, echipamentul periferic dezactivează semnalul în logică negativă nWait (mărește tensiunea pe magistrală). Prin menținerea în starea ‘high’, echipamentul periferic transmite calculatorului gazdă să aștepte. Dacă semnalul trece în starea ‘low’, este indicat faptul că echipamentul periferic este pregătit pentru un alt transfer.
Linia Intr
Pentru a semnala PC-ul gazdă că un echipament periferic conectat la interfața EPP are nevoie de un serviciu imediat, este transmis semnalul Intr. Tranziția acestui semnal din starea ‘low’ în starea ‘high’ indică o cerere de întrerupere (ceea ce înseamnă că semnalul este sesizat pe front). În modul de operare EPP nu este alocat nici un semnal pentru a confirma recepționarea cererii de întrerupere.
Linia nInit
Comanda de ieșire din modul EPP este semnalul nInit. La activarea acestui semnal prin trecerea în starea ‘low’, sistemul este forțat să iasă din modul EPP și să revină în modul de compatibilitate.
2.1.4.5. Modul Extended Capabilities Port (ECP)
Modul capacităților mărite a fost creat de Hewlett Packard și Microsoft pentru a fi introdus ca Extended Capabilities Port Protocol și Standard de Interfață ISA. Acest protocol utilizează hadware adițional pentru a genera/realiza semnale de cooperare (Handshaking) etc. la fel ca și modul EPP, deci funcționând la aproximativ aceeași viteză ca modul EPP. Este posibil ca acest mod să funcționeze mai bine sub Windows deoarece poate utiliza canale DMA pentru a-și muta / transfera datele. De asemenea utilizează un buffer FIFO pentru transmiterea sau recepționarea de date.
O altă caracteristică a ECP este compresia datelor în mod real. Se utilizează Run Length Encoding (RLE) pentru a realiza o medie de compresie a datelor de 64:1. Acest lucru este util în cazul Scannerelor și Imprimantelor.
Când operează în modul ECP, portul IEEE 1284 folosește șapte semnale pentru a controla fluxul de date prin cele opt linii de date standard. Modul ECP definește două protocoale de semnalizare a transferurilor de date – unul pentru transferuri în sens direct (de la PC la echipamentul periferic) și celălalt pentru transferuri inverse (de la echipamentul periferic la PC) – și trecerea de la unul la celălalt. Transferurile sunt controlate printr-un dialog de confirmare în buclă închisă, care garantează că toți octeții ajung la destinația stabilită, chiar în cazul în care conexiunea este întreruptă temporar.
Datorită faptului că toate porturile paralele sunt inițializate în modul de compatibilitate, PC-ul și echipamentele sale periferice trebuie să negocieze în prima fază între ele pentru a realiza comutarea în modul ECP. Calculatorul și programul software dedicat inițiază negocierea comutării (precum și a gestionării tuturor aspectelor legate de transferurile de date). După negocierea cu succes a intrării în modul ECP, conexiunea intră în faza de așteptare a operării directe (forward idle phase).
2.1.4.5.1. Liniile de date
Linia HostCLK
Pentru a transfera informații sau comenzi prin interfața paralelă, PC-ul pornește din faza de așteptare a operării directe și plasează semnalele corespunzătoare pe linia de date. Pentru a semnala imprimantei sau unui alt echipament periferic faptul că valorile de pe liniile de date sunt valide și pot fi transferate, calculatorul activează semnalul HostClk , trecându-l în în starea ‘high’.
Linia PeriphACK
Transferul nu are loc până când imprimanta sau echipamentul periferic conectat la PC nu confirmă semnalul HostClk prin trecerea semnalului PeriphAck în starea ‘high’. Ca răspuns, calculatorul trece linia semnalului HostClk în starea ‘low’. Primind această informație, imprimanta sau echipamentul periferic conectat la portul paralel știe că trebuie să citească semnalele de pe liniile de date. După ce termină operația de citire a semnalelor de date, echipamentul periferic trece semnalul PeriphAck în starea ‘low’. Această operație încheie transferurile de date. Semnalele HostClk și PeriphAck revin la valorile normale din faza de așteptare a operării directe, fiind pregătite pentru un alt transfer.
Linia nPeriphRequest
Când un echipament periferic trebuie să transfere informații către calculatorul gazdă sau către un alt echipament periferic, cere acest lucru trecând linia nPeriphRequest în starea ‘low’ care solicită o întrerupere în calculatorul gazdă pentru a face cunoscută cererea echipamentului periferic.
Linia nReverseRequest
Pentru a permite unui echipament periferic să transmită date înapoi la calculatorul gazdă sau la un alt dispozitiv conectat la interfață, PC-ul activează semnalul nReverseRequest trecândul în starea ‘low’, practic anulând tensiunea care apare în mod normal pe linia respectivă. Prin această modificare, echipamentul periferic află că PC-ul gazdă va permite efectuarea transferului.
Linia nACKReverse
Pentru a confirma faptul că a recepționat semnalul nReverseRequest și că este pregătit pentru un transfer în direcție inversă, echipamentul periferic activează semnalul nAckReverse trecândul în starea ‘low’. După aceasta, echipamentul periferic poate transmite informații și comenzi prin cele opt linii de date și semnalul PeriphAck.
Linia PeriphCLK
Pentru a începe un transfer în sens invers, adică de la echipamentul periferic la PC, echipamentul periferic încarcă în prima etapă biții corespunzători pe liniile de date. Apoi, trecând semnalul PeriphClk în starea ‘low’, transmite calculatorului gazdă faptul că are date pregătite pentru transfer.
Linia HostACK
Calculatorul răspunde la semnalul PeriphClk comutând valoarea semnalului HostAck de la valoarea de așteptare (zero logic) la valoarea unu logic. Echipamentul periferic răspunde trecând semnalul PeriphClk în starea ‘high’. După ce calculatorul gazdă acceptă datele, răspunde prin trecerea semnalului HostAck în starea ‘low’. Această ultimă operație încheie transferul curent și readuce interfața în faza de așteptare a operării inverse.
Liniile de date (Date 0 – 7)
În modul ECP este prevăzut un semnal suplimentar care are rolul de a indica dacă liniile de date conțin date sau o comandă. Semnalul folosit pentru a crea un sistem de informații pe nouă biți se modifică în funcție de direcția de transfer a datelor. Când modul ECP transferă date de la calculatorul gazdă la un echipament periferic (transfer direct), este folosit semnalul HostAck pentru a specifica prezența unei comenzi sau a unor date. Dacă echipamentul periferic este sursa datelor care urmează să fie transferate (transfer invers), rolul de a specifica existența unei comenzi sau a unor date revine semnalului PeriphAck.
2.1.5. Interfața logică
În arhitectura unui PC, circuitele portului paralel sunt legate cu microprocesorul printr-un set de porturi de intrare/ieșire (I/O) interne calculatorului.
Schema tradițională pentru un port paralel folosea trei astfel de porturi de intrare/ieșire. Modurile de operare EPP și ECP folosesc mai multe.
Întregul interval de porturi de intrare/ieșire folosite de o conexiune paralelă este identificat în mod obișnuit prin adresa primului port (cel cu numărul sau adresa cea mai mică). Acest număr este denumit adresa de bază a portului paralel. Fiecare port paralel dintr-un calculator trebuie să aibă o adresă de bază unică.
Schema constructivă a primului PC conținea resurse pentru configurarea a trei porturi paralele într-un singur sistem, iar această caracteristică a fost păstrată pentru toate calculatoarele personale compatibile IBM. Fiecare dintre aceste porturi are propria sa adresă de bază. Pentru primul PC, firma IBM a ales trei valori pentru aceste adrese de bază și acestea au rămas valorile folosite de marea majoritate a producătorilor de componente hardware. Aceste adrese de bază sunt 03BCh, 0378h și 0278h.
Prima dintre aceste adrese, 03BCh, este folosită foarte rar de producători. IBM a atribuit inițial această adresă de bază portului paralel care făcea parte din învechita placă MDA (Monochrome Display Adapter). Firma IBM a continuat să folosească această adresă și în linia PS/2 de calculatoare, atribuind-o portului paralel al acestor sisteme. Deoarece placa MDA nu putea fi instalată în calculatoarele PS/2, nu exista nici o posibilitate de conflict.
Cel mai des este folosită adresa de bază 0378h pentru astfel de porturi interne.
Cele mai multe programe și sisteme de operare se referă la porturile paralele cu ajutorul unor nume de porturi. Aceste nume sunt: LPT1, LPT2 și LPT3. În plus, portul cu numele LPT1 mai poate folosi și numele PRN.
Sistemul atribuie numele de dispozitiv la pornire. În codul BIOS al PC-ului, există o rutină de program care caută porturile paralele la fiecare dintre cele trei adrese de bază definite, într-o ordine prestabilită. Ordinea de căutare este 03BCh, 0378h și apoi 0278h. Setul de porturi de intrare/ieșire găsit la prima adresă de bază primește numele LPT1; al doilea, LPT2; al treilea, LPT3.
Valorile adreselor de bază sunt stocate în BIOS, într-o zonă specială de memorie, denumită zona de date BIOS, sub forma unor adrese absolute. Fiecărei adrese de bază îi sunt alocați doi octeți de memorie. Adresa de bază a portului paralel cu numele LPT1 este stocată la locația de memorie absolută 0000:0408; LPT2, la 0000:040A; LPT3, la 0000:040C.
În schema originală a unui PC, sunt prevăzute două întreruperi care pot fi folosite de porturile paralele. Întreruperea hardware 07h este rezervată pentru primul port paralel, iar întreruperea hardware 05h este rezervată pentru al doilea port paralel.
În mod normal, sistemele de operare DOS, Windows, precum și majoritatea aplicațiilor nu folosesc întreruperile hardware pentru a controla imprimantele.
2.1.6. Regiștrii Portului Paralel
2.1.6.1. Regiștrii Portului Paralel Standard
Cele trei porturi paralele ale unui PC sunt legate la microprocesorul calculatorului prin trei porturi I/O separate, fiecare dintre ele fiind controlat de propriul său registru. Adresa primului dintre regiștrii are rolul de adresă de bază a portului paralel. Celelalte două adrese au următoarele valori în ordine crescătoare.
Registrul de la adresa de bază a portului paralel este numit registru de date pentru imprimantă (printer data register) și funcția sa este de a păstra temporar valorile transferate prin port de microprocesorul calculatorului. Acest registru funcționează în mod obișnuit doar în mod scriere. Dacă se citește din el, se va obține ultimul octet transmis. Dacă portul este bidirecțional, se pot recepționa date la această adresă. Mod pe care îl voi explica ulterior. Fiecare dintre cei opt biți ai acestui port este legat la una dintre liniile de date ale conectorului portului paralel. (vezi Tabelul 2.4)
Tabelul 2.4 – Regiștrii portului paralel și pinii alocați acestora
Următorul registru al portului paralel, corespunde adresei de bază +1, pentru a verifica starea imprimantei. Denumit registru de stare a imprimantei (printer status register), acesta funcționează doar în mod citire și conține mesajele transmise de imprimantă. Orice date scrise în acest registru vor fi ignorate. Acest registru este alcătuit din 5 linii de citire (pinii 10,11,12,13 și 15), o linie de stare IRQ și 2 biți rezervați. De notat e faptul că bitul 7 (Busy) este activ în starea ‘low’.
De ex.: dacă bitul 7 este în starea “0”, aceasta înseamnă că există +5V la pinul 11 (Busy). La fel și pentru bitul 2 (Not IRQ). Dacă acest bit este în starea “1”, atunci nu a avut loc nici o întrerupere. (vezi Tabelul 2.4)
Pentru controlul imprimantei, PC-ul folosește un al treilea registru situat la adresa de bază +2. Denumit registrul de control al imprimantei (printer control register), acesta transmite comenzi prin intermediul celor mai puțin semnificativi cinci biți.
El este alcătuit din 4 linii de control: /nStrobe, /nAuto-Linefeed, nInitialize și /nSelect Printer; toate sunt inversate cu excepția lui nInitialize.
Aceste 4 linii de control pot funcționa și în mod citire și în mod scriere. Prin urmare aceste linii sunt cu colector în gol (“Open Drain” – pentru dispozitive CMOS). Registrul de control trebuie setat la xxxx0100 pentru a se putea citi datele.(vezi Tabelul 2.4)
Pentru a permite imprimantei să solicite întreruperi, PC-ul folosește bitul 4 al registrului de control al imprimantei. Dacă acest bit are valoarea “1” logic, semnalul Acknowledge de la imprimantă declanșează o întrerupere de imprimantă. În timpul unei operații normale, imprimanta, după ce primește și procesează un caracter, schimbă valoarea semnalului Acknowledge de la “1” la “0” logic. Dacă setați bitul 4, PC-ul va detecta modificarea apărută pe linia Acknowledge în registrul de stare al imprimantei și va executa întreruperea hardware atribuită portului respectiv. Întreruperea va cere microprocesorului să trimită un alt caracter la imprimantă.
Bitul 5 din registrul de control activează sau dezactivează funcția bidirecțională a portului paralel. Această funcție există doar în adevăratele porturi bidirecționale. Când acest bit este setat în starea logică “1”, pinii 2 la 9 trec în starea de înaltă impedanță. Odată trecuți în acestă stare, pe aceste linii se pot scrie/citi date din registrul de date (adresa de bază). Orice date care sunt scrise în registrul de date vor fi stocate, dar nu pot fi disponibile la pini. Pentru a dezactiva modul bidirecțional se setează bitul 5 din registrul de control la “0” logic.
Unele porturi nu acționează în mod asemănător (una din problemele nestandardizării, înainte de apariția standardului IEE-1284). Alte porturi pot cere setarea bitului 6 din registrul de control pentru activarea modului bidirecțional și setarea bitului 5 din același registru pentru dezactivarea modului bidirecțional. Fiecare producător poate implementa porturile bidirecționale în mod diferit.
Imprimanta primește instrucțiuni referitoare la ce are de la BIOS. Cele mai multe dintre aceste funcții sunt executate de rutinele vectorului de întrerupere 017h. În mod normal, aplicația dvs. apelează întreruperea 017h după ce încarcă valorile corespunzătoare în regiștrii microprocesorului, iar microprocesorul transmite valorile respective către imprimantă. Aceste operații solicită foarte mult microprocesorul. În timpul tipăririi, ele pot ocupa un procent substanțial din puterea microprocesorului (mai ales când cipurile sunt mai vechi și mai lente).
2.1.6.2. Regiștrii Porturilor Paralele Îmbunătățite (EPP)
EPP reprezintă o adăugare recentă adăugată modurilor de funcționare a porturile paralele standard și PS/2. Ca și în cazul acestor modele, transferurile compatibile trebuiau să utilizeze cei trei regiștri de port paralel la adrese de porturi I/O consecutive. Dar noul model adaugă cinci regiștri noi la cei trei de bază. Deși proiectanții sunt liberi să plaseze acești regiștri unde doresc (deoarece ei sunt accesați prin intermediul unor programe driver), în implementările obișnuite, acești regiștri ocupă consecutiv următoarele cinci adrese de porturi I/O. (vezi Tabelul 2.5)
Ele au o medie obișnuită de transfer între 500K și 2 Mbyte/s. aceasta se realizează prin permiterea hardware-ului din port să se realizeze handshaking (cooperare), această operație nu se va face prin software.
Tabelul 2.5. – Registrele Porturilor Paralele Îmbunătățite (EPP)
În cele de mai sus este prezentată o listă a registrelor EPP. După cum se vede, primele 3 adrese sunt exact aceleași cu cele ale portului Standard Parallel Port (SPP) și se comportă la fel. Prin urmare, dacă se utilizazează un port paralel îmbunătățit, datele se pot scrie la adresa de bază + 0 în același mod ca la SPP.
Dacă se dorește să se comunice cu un dispozitiv compatibil EPP, tot ceea ce trebuie să se facă este să se scrie datele în registrul de date EPP la adresa de bază + 4, iar cardul portului paralel va genera cooperarea necesară.
În mod asemănător, dacă se dorește să se trimită o adresă unui dispozitiv conectat la portul paralel, atunci va trebui să se utilizeze registrul de adrese EPP de la adresa de bază + 3.
Atât registrul adreselor EPP cât și registrul datelor EPP lucrează în mod citire / scriere, deci pentru a citi datele trimise de un dispozitiv conectat la portul paralel, se pot utiliza aceleași registre. Card-ul EPP trebuie să inițieze (să înceapă) un ciclu de scris deoarece atât Data Strobe cât și Address Strobe sunt ieșiri. Dispozitivul poate semnaliza o cerere de citire prin intermediul utilizării întreruperii.
Primul registru nou (adresa de bază + 3) este denumit registrul de adresă EPP. Acest registru pune la dispoziție un canal direct prin care PC-ul poate specifica adrese ale dispozitivelor cuplate la sistem prin conexiunea EPP. Încărcând adresa corespunzătoare în acest registru, PC-ul poate selecta oricare dintre dispozitivele atașate la un singur port paralel, imediat după ce dispozitivele paralele care folosesc modul de adresare EPP devin disponibile.
2.1.6.2.1. Handshake EPP
Mod de operare al registrului de adresă EPP în mod scriere:
– programul scrie adresa în registrul de adrese EPP (baza +3);
– nWrite este în starea ‘low’ (‘low’ indică operația de scriere);
– adresa este pusă pe liniile de date 0-7;
– nAddr Strobe este impus dacă Wait este în starea ‘low’ (O.K.- începe ciclul);
– gazda așteaptă confirmarea prin Wait care crește în starea ‘high’ (O.K. se termină ciclul);
– nAddr Strobe nu mai este impus;
– ciclul se încheie.
Figura 2.2. – Ciclul de scriere în registrul de adrese EPP.
Mod de operare al registrului de adresă EPP în mod citire:
– programul citește din registrul de adrese EPP (baza +3);
– nAddr Strobe este impus dacă Wait este în starea ‘low’ (O.K.- începe ciclul);
– gazda așteaptă confirmarea prin Wait care crește în starea ‘high’;
– data este citită de pe pinii portului paralel;
– nAddr Strobe nu mai este impus;
– ciclul se încheie.
Figura 2.3. – Ciclul de citire din registrul de adrese EPP.
Următoarele patru porturi ale interfeței de sistem EPP (începând de la adresa de bază + 4) sunt legate la registrul de date EPP, care pune la dispoziție un canal pe 32 de biți pentru transmiterea datelor în bufferul de date EPP. Circuitele portului EPP preiau datele din buffer, le împart în patru octeți separați și apoi trimit cei patru octeți, secvențial, pe liniile de date EPP. Prin apariția a patru porturi de intrare/ieșire care îl înlocuiesc pe cel folosit de porturile paralele standard, operația de conversie este mutată în zona hardware a portului, eliberând astfel sistemul de responsabilitatea de a forma datele. Mai mult, PC-ul poate scrie simultan în cei patru regiștri de date EPP cu ajutorul unui singur cuvânt dublu de 32 de biți, într-un singur ciclu de ceas – în cazul calculatoarelor care au magistrale de date de 32 de biți. Și în mașinile mai lente, specificația EPP permite operații de scriere în regiștrii de date EPP pe un octet sau pe un cuvânt (16 biți).
Spre deosebire de porturile paralele standard, care cer ca microprocesorul să conducă datele din port, portul paralel îmbunătățit operează automat. După încărcarea datelor, acest tip de port nu are nevoie de semnale suplimentare de la microprocesor pentru a efectua un transfer de date. Circuitele EPP generează semnalul stroboscopic de date pe magistrală aproape imediat după ce microprocesorul scrie în regiștrii de date EPP. După ce microprocesorul citește datele din regiștrii de date EPP, circuitele portului declanșează semnalul stroboscopic de date pentru a comunica dispozitivului care transmite date prin conexiunea EPP că PC-ul este pregătit să recepționeze și alte date. Acest model de transfer optimizat este unul dintre cele mai importante elemente care permit unui port EPP să opereze atât de repede comparativ cu porturile standard.
Mod de operare al registrului de date EPP în mod scriere:
– programul scrie în registrul de date EPP (baza +4);
– nWrite este pus în starea ‘low’; (‘low’ indică operație de scriere);
– data este pusă pe liniile de date 0-7;
– nData Strobe este impus dacă Wait este în starea ‘low’ (O.K.- începe ciclul);
– gazda așteaptă confirmarea prin Wait care crește în starea ‘high’; (O.K.- termină ciclul);
– nData Strobe nu mai este impus;
– ciclul se încheie.
Figura 2.4. – Ciclul de scriere în registrul de date EPP.
Mod de operare al registrului de date EPP în mod citire:
– programul citește din registrul de date EPP (baza +4);
– nData Strobe este impus dacă Wait este în starea ‘low’ (O.K.- începe ciclul);
– gazda așteaptă confirmarea prin Wait care crește în starea ‘high’;
– data este citită de pe pinii portului paralel;
– nData Strobe nu mai este impus;
– ciclul se încheie.
Figura 2.5. – Ciclul de citire din registrul de date EPP.
Cu toate că producătorii de componente pot folosi orice schemă doresc, majoritatea respectă modelul stabilit pentru cipurile SL. Firma Intel a adăugat setului de cipuri un registru de control pentru portul paralel rapid, care este controlabil software. Acest registru corespunde cu biții nefolosiți ai registrului standard de control al imprimantei conectate la portul paralel.
Dacă cel mai semnificativ bit (bitul 7) al registrului de control pentru portul paralel rapid este trecut în ‘1’ logic, este activat modul de operare EPP. Dacă bitul respectiv este trecut în zero logic (valoarea prestabilită), portul este forțat să lucreze în modul standard. Un alt bit are rolul de a controla operațiile bidirecționale. Dacă bitul 6 al registrului de control pentru portul paralel rapid are valoarea ‘1’ logic, este activat modul de operare bidirecțional. Dacă are valoarea zero, este menținut modul de lucru unidirecțional al portului.
În majoritatea PC-urilor, modul de operare EPP nu este activat automat. Simpla conectare a imprimantei la interfața EPP nu garantează transferuri de viteză mare. Activarea modului de lucru EPP se realizează cu ajutorul unui program driver care asigură legătura dintre software și componentele hardware ale portului.
2.1.6.3. Porturi cu Capacități Extinse (ECP)
ECP este compatibil cu SPP și EPP. Când operează în modul SPP, liniile individuale operează în exact același mod ca și SPP și deci sunt etichetate Strobe, Auto Linefeed, Init., Busy etc. Când operează în modul EPP, pinii funcționează conform metodei descrise la protocolul EPP și au o metodă diferită de cooperare. Când portul operează în modul ECP, atunci sunt atribuite alte etichete fiecărui pin.(vezi Tabelul 2.2)
Liniile Host Ack și PeriphAck ne arată, că semnalele de pe liniile de date reprezintă date sau o comandă. Dacă aceste linii sunt în starea ‘1’, atunci datele sunt poziționate pe liniile de date (pinii 2-7). Dacă un ciclu de comenzi este în desfășurare, linia corespunzătoare va fi trecută în starea ‘0’, adică dacă gazda transmite o comandă, atunci Host Ack va fi trecut în starea ‘0’, sau dacă dispozitivul / perifericul transmite o comandă, linia Periph Ack va fi trecută în starea ‘0’.
Un ciclu de comenzi poate însemna fie o numărare a RLE, fie o adresă. Aceasta este determinată de bit-ul 7 (MSB) al liniilor de date, adică pin-ul 9. Dacă bitul 7 este ‘0’, atunci restul datelor (biții 0-6) sunt o “run length count” (numărare în lungime) care se utilizează cu schema de compresie a datelor. Dacă bitul 7 este ‘1’, atunci datele prezentate prin biții 0-6 reprezintă o adresă de canal cu o valoarea de la 0 la 127 (Dec).
Ca și în cazul diferitelor versiuni ale portului paralel de bază, PC-ul controlează un port cu capacități extinse printr-un set de regiștrii. Pentru a menține compatibilitatea cu produsele mai vechi, care au nevoie de acces la un port paralel standard, primii trei regiștri de bază ai modelului ECP sunt identici cu cei ai modurilor precedente. Oricum, datele portului paralel sunt redefinite în fiecare dintre modurile de operare ale portului. În tabelul 2.6. sunt prezentați regiștrii folosiți de modelul ECP, denumirile mnemonice și modurile de funcționare ale acestora.
Tabelul 2.6. Definițiile regiștrilor pentru portul cu capacități extinse
Modelul ECP mai include pe lângă cei trei regiștri de bază ai portului paralel un set suplimentar de regiștri la adresele de port cu ofsetul 0400h față de registrul de bază. Unul dintre aceștia, registrul de control extins controlează modul de operare al portului ECP. Microprocesorul stabilește modul de operare prin scriere la adresa acestui port, care are ofsetul 0402h față de registrul de bază al portului. Portul ECP folosește regiștrii suplimentari pentru a monitoriza și controla alte aspecte ale transferului de date.
Ca și în cazul altor modele de porturi paralele îmbunătățite, modelul ECP se comportă inițial exact ca un port paralel standard. Pentru a trimite biți pe liniile de date ale conexiunii paralele, programele trebuie să scrie informațiile dorite în registrul de date al portului (care se găsește la adresa de bază a portului, exact ca la portul paralel standard). Comutând în modul EPP sau ECP, programele pot scrie cu viteză mare într-un registru a cărui lungime poate ajunge până la 32 de biți. Modelul ECP oferă proiectanților de hardware posibilitatea de a opta pentru transferuri pe 8, 16 sau 32 biți.
Pentru a permite mai multor dispozitive să folosească în comun o singură conexiune paralelă, modelul ECP include propria sa schemă de adresare, care permite PC-ului să identifice separat și să trimită date la maximum 128 de dispozitive. Când calculatorul dorește să ruteze un pachet sau un șir de date prin conexiunea paralelă la un anumit echipament periferic, trimite prin portul paralel o comandă de adresă de canal. Comanda include o adresă de dispozitiv. Dispozitivele paralele ECP care recepționează comanda compară adresa cu propriile lor adrese de configurare. Dacă cele două adrese nu se potrivesc, dispozitivul ignoră datele care circulă prin conexiunea paralelă până când calculatorul trimite următoarea comandă de adresă de canal prin port. Când calculatorul uită să indice o adresă de canal, datele sunt difuzate tuturor dispozitivelor legate la conexiunea paralelă.
2.1.6.3.1. Handshake ECP
Cooperarea ECP este diferită față de cooperarea SPP. Cea mai evidență diferență este că ECP are oricând posibilitatea de transmisie a datelor în orice direcție, deci este necesară semnalizare suplimentară. Mai jos este prezentată cooperarea ECP pentru ambele direcții (înainte și înapoi).
ECP Forward Data Cycle (datele din Host (gazdă) sunt transmise la un periferic):
– datele sunt poziționate pe liniile de date de Host;
– host-ul indică apoi startarea unui ciclu de date prin poziționarea lui Host Ack în ‘1’;
– host-ul indică datele valide prin trecerea lui Host CIK în starea ‘0’;
– perifericul transmite confirmarea datelor valide prin Periph Ack;
– host-ul setează Host CIK în starea ‘1’; datele sunt mutate în registrele perifericului pe
frontul pozitiv al semnalului;
– perifericul transmite confirmarea primirii octetului prin Periph Ack.
Figura 2.6. – Ciclul cum datele de la host (gazdă) sunt transmise la un periferic.
ECP Reverse Data Cycle (datele de la periferic sunt transmise la Host):
– host-ul setează nReverseRequest în starea ‘0’ pentru a cere un canal de întoarcere;
– perifericul confirmă cererea pentru un canal de întoarcere prin punerea lui nAck Reverse
în starea ‘0’;
– datele sunt poziționate pe liniile de date de către periferic;
– startarea unui ciclu de date este anunțată de periferic prin poz. lui PeriphAck în starea ‘1’;
– datele valide sunt indicate prin setarea de către periferic a PeriphCIK în starea ‘0’;
– host-ul transmite confirmarea datelor valide prin Host Ack punîndu-l în starea ‘1’;
– perifericul setează Periph CIK în starea ‘1’; datele sunt mutate în registrele host-ului pe frontul pozitiv al semnalului;
8. – host-ul transmite confirmarea primirii octetului prin punerea lui Host Ack în starea ‘0’.
Figura 2.7. – Ciclul cum datele de la periferic sunt transmise la host (gazdă).
ECP Forward Command Cycle (comenzile de la Host (gazdă) sunt transmise la un periferic):
– datele sunt poziționate pe liniile de date de Host;
– host-ul indică apoi startarea unui ciclu de comenzi prin Host Ack;
– host-ul indică datele valide prin trecerea lui Host CIK în starea ‘0’;
– perifericul transmite confirmarea datelor valide prin Periph Ack;
– host-ul setează Host CIK în starea ‘1’; datele sunt mutate în registrele perifericului pe
frontul pozitiv al semnalului;
– perifericul transmite confirmarea primirii octetului prin Periph Ack.
Figura 2.8. – Ciclul cum comenzile de la host (gazdă) sunt transmise la un periferic.
ECP Reverse Command Cycle (comenzile de la periferic sunt transmise la Host):
– host-ul setează nReverseRequest în starea ‘0’ pentru a cere un canal de întoarcere;
– perifericul confirmă cererea pentru un canal de întoarcere prin punerea lui nAck Reverse
în starea ‘0’;
– datele sunt poziționate pe liniile de date de către periferic;
– startarea unui ciclu de comenzi este anunțată de periferic prin punerea lui PeriphAck în starea ‘0’;
– datele valide sunt indicate prin setarea de către periferic a PeriphCIK în starea ‘0’;
– host-ul transmite confirmarea datelor valide prin Host Ack punîndu-l în starea ‘1’;
– perifericul setează Periph CIK în starea ‘1’; datele sunt mutate în registrele host-ului pe frontul pozitiv al semnalului;
– host-ul transmite confirmarea primirii octetului prin punerea lui Host Ack în starea ‘0’.
Figura 2.9. – Ciclul cum comenzile de la periferic sunt transmise la host (gazdă).
2.1.6.3.2. Run Length Encoding (RLE) – Comprimarea Datelor
Opțional, sistemul ECP permite utilizatorilor să comprime datele transmise prin interfața paralelă, pentru a îmbunătăți viteza de transfer. Chiar și circuitele portului sunt capabile să efectueze operații de comprimare și decomprimare, invizibile pentru calculator și pentru aplicațiile software, ca și pentru echipamentele periferice de la celălalt capăt al conexiunii. Efectul care se obține în transferurile de date este similar cu îmbunătățirea vitezei semnalelor prin cablul paralel, dar fără nici un fel de problemă electrică.
Modelul ECP folosește o formă simplă de comprimare, denumită Run Length Encoding (codificarea lungimii) sau RLE. Repetițiile dese ale aceluiași model digital pot fi reduse la o singură apariție a modelului însoțit de un număr care indică de câte ori se repetă. Algoritmul RLE folosit de sistemul ECP operează la nivel de octet. Când același octet este repetat de mai multe ori într-o succesiune de date, sistemul transformă succesiunea respectivă într-un șir de doi octeți: unul indică codul original și celălalt coeficientul de multiplicare.
De ex., dacă un fascicul de 25 “A” trebuie transmis, atunci coeficientul de multiplicare egal cu 24 va fi transmis primul, urmat de codul literei “A”. Perifericului la recepționarea coeficientul de multiplicare va extinde (repeta) codul literei “A” de un număr de ori stabilit prin coeficientul de multiplicare.
Desigur, în cazul în care octeții nu se repetă, forma de bază a algoritmului RLE nu este eficientă. Utilizând doi octeți pentru a codifica unul singur, numărul de octeți transmiși pentru un set dat de informații crește. Pentru a minimiza impactul acestei creșteri, algoritmul RLE folosit de sistemul ECP face un compromis. Jumătate din valorile posibile ale octeților sunt lăsate nemodificate și sunt folosite de cod pentru a reprezenta aceleași valori singulare ale octeților la fel ca în secvența de date. Celelalte valori de octeți sunt folosite ca multiplicatori. Dacă una dintre valorile rezervate pentru multiplicatori apare în secvența de date, trebuie reprezentată prin doi octeți: valoarea octetului și un multiplicator cu valoarea unu. Acest sistem permite codificarea prin doi octeți a unor șiruri de caractere repetitive de până la 128 de octeți.
Cea mai bună performanță a acestui sistem este obținerea unei rate de comprimare de 64 : 1 în cazul unor repetiții lungi ale unei singure valori. În cel mai rău caz, sistemul extinde datele cu o proporție de 1:2. În cazuri reale, sistemul obține o rată generală de comprimare de aproximativ 2 : 1, dublând efectiv viteza interfeței paralele, indiferent care este rata de transfer de bază calculată în biți pe secundă.
Comprimarea datelor cu algoritmul RLE poate fi eficientă mai ales în cazul transferurilor de imagini grafice de la calculator la imprimantă. Imaginile grafice conțin deseori secvențe lungi de octeți identici, care reprezintă zone de culoare uniformă. Codificarea RLE oferă avantaje mici transferurilor de texte.
2.2. Cartelele telefonice
2.2.1. Introducere
De la mijlocul anilor ‘80 a apărut o nouă generație de carduri (așa numitele carduri inteligente sau carduri cu cipuri) care a înlocuit majoritatea aplicațiilor utilizatorilor de carduri magnetice de importanță notabilă la plata telefoanelor și în cărțile de credit. Aceste noi carduri, sunt cu mult mai sigure și au un domeniu mai larg de aplicabilitate / aplicații. Cele mai simple carduri sunt cele cu memorie simplă (Simple Memory Cards) – cum ar fi cele utilizate ca telecarduri – cartele telefonice utilizate pentru convorbirile telefonice din cabinele publice. În general conținutul memoriei poate fi citit și există o zonă marcată (worker area) care nu poate fi scrisă; apoi există și carduri mai sofisticate.
Există 2 tipuri de carduri:
Cardurile cu memorie în care o parte este protejată la citire de o tastă caracter (key) – aceste carduri pot conține unele informații particulare, private, în zona protejată.
Cardurile cu microprocesoare (care utilizează protocolul ISO –7816) – care sunt cele mai sigure, deoarece au sistem propriu de operare internă care previne citirea/scrierea dacă PIN (numărul personal de identificare) nu a fost introdus anterior pe card. (Aceste carduri se utilizează pentru confidențialitate, cum ar fi: cardurile de credit bancar, carduri cifrate pentru acces TV, carduri de sănătate, carduri SIM pentru GSM etc. ..)
Referitor la cardurile telefonice, deși sunt cele mai puțin sigure, nu se poate telefona pe gratis. Toate datele pot fi citite, din moment ce nu există date confidențiale, dar sunt alcătuite astfel încât convorbirea să fie plătită.
Dar ce este un cartelă telefonică? În general este un EEPROM de 256 biți (cardurile franțuzești) sau un EEPROM de 128 biți (cardurile germane) cu un dispozitiv serial de ieșire și alte dispozitive de control.
Aceste carduri nu pot fi reutilizate. Pentru a reutiliza cardul, acesta trebuie reîncărcat. Pentru aceasta, cipul de SI al cardului trebuie șters cu raze ultraviolete (dar cipul de SI este acoperit cu plastic opacizat, care previn razele ultraviolete să ajungă la el); chiar dacă s-ar reuși ștergerea, va trebui reprogramată zona de fabricație, dar aceasta a fost protejată la scriere printr-o siguranță înscrisă după programarea cipului în fabrică.
Cardurile franțuzești de telefon au fost create în 1984 și constructorii s-au decis să utilizeze tehnologie NMOS, dar din 1994 ei sau hotărât să le modifice în CMOS. De asemenea constructorii intenționează să utilizeze EEPROM pentru a securiza cardurile și pentru a adăuga multe informații utile.
Aceste carduri se numesc Second Generation Telecards (Telecarduri de generația a 2-a).
Deoarece proiectul folosește cardurile telefonice, în continuare mă voi referi numai la acestea.
2.2.2. Cardurile din generația a I-a
2.2.2.1. Schema generală a cipului
2.2.2.2. Configurația pinilor
ISO – Cardul cu contactele în sus
Notă: doar poziția cipului este ISO –standardizată, nu pinout-ul.
PIN OUT: 1 : Vcc = 5V 5 : Gnd
2 : R/W 6 : Vpp = 21V (*)
3 : Clock 7 : I/O
4 : RAS 8 : Fus (*)
(*) Nu se utilizează cu noile carduri G+D compatibile cu cardurile cu memorie de 256 biți. De exemplu cardurile G+D spaniole.
2.2.2.3. Trăsături / Caracteristici principale
modul de lucru sincron;
tehnologie NMOS sau CMOS pentru cele mai noi;
organizare 256×1 bit;
primii 96 de biți sunt protejați la scriere de o siguranță de închidere;
putere redusa 85mW în modul citire;
tensiune de programare 21V;
timp de acces 500ns;
temperatura de operare –10C – +70C;
datele se păstrează timp de 10 ani.
2.2.2.4. Diagramele de timp
a – Cardurile de la Schlumberger, Solaic, Gemplus
+21V _____________
+5V ____________________________________| |_________________ VPP
: :
+5V ___________________:_____________:_________________ ___
0V ________________| : : RST
: : :
+5V ____ : ____ : ______:______
0V ___| |_______:_____| |________:______| : |__________ CLK
: : : : : : : : :
+5V : : : : : :______:______: : _
0V ___:____:_______:_____:____:________| : |______:__________ R/W
: : : : : : : : :
+5V : : :_____: :________: : : :__________
0V XXXXXXXXXXXXXXXXX_____XXXXXX________XXXXXXXXXXXXXXXXXXXXXX__________ OUT
: : : : : :<––><–->: :
: : : : : :10 to 10 to :
: : : : : :50 ms 50ms :
Reset Bit 1 Bit2 Bit 3
card reading reading Bit2 writing to 1 reading
NOTĂ: Vpp se conectează la Vcc pentru citirea cardului.
b – Cardurile de la G+D (cardurile Spaniole au octetul 5 = 30h)
+5V ___________________________________________________ ___
0V ________________| RST
+5V ____ ____ _____________
0V ___| |_____________| |_______________| |__________ CLK
: : : : : :
+5V : : : : ______:______ : _
0V ___:____:_____________:____:________| : |______:__________ R/W
: : : : : : :
+5V :____:_____________:____:_______________:______:______:__________
0V XXXX X_____________X X_______________X : X__________ OUT
: : : : :<–->: :
: : : : : 1 ms :
: : : : : :
Reset Bit 1 Bit 2 Bit 2 Bit 2
card reading reading writing to 1 reading
2.2.2.5. Harta de memorie pentru cardurile din Franța și St. Maarten
Octet (Bit) Hexa
+––+
1 (1..8) | | –> Suma de control pentru octeții 2, 3, 4 (*)
+––+
| $03 |
| $04 | –> telecarduri franceze
| $05 | Numărul Serial (octet 1)
| $06 |
+ – – +
| $80 | –> St Maarten
+––+
3 (17..24) | | –> Numărul Serial (octet 2)
+––+
4 (25..32) | | –> Numărul Serial (octet 3)
+––+
5 (33..40) | | –> suma de control pentru octeții 6, 7, 8 (*)
+––+
6 (41..48) | | –> Numărul Serial (octet 4)
+––+
7 (49..56) | | –> Numărul Serial (octet 5)
+––+
8 (57..64) | | –> ?
| $FF | –> St Maarten
+––+
9 (65..72) | | –> suma de control pentru octeții 10, 11, 12 (*)
+––+
10 (73..80) | | –> ?
| $FF | –> St Maarten
+––+
11 (81..88) | $10 | –> Franța și Monaco
| $14 | –> St Maarten
+––+
12 (33..40) | $13 | –> 120 unități
| $06 | –> 50 unități
| $05 | –> 40 unități
| $02 | –> 5 unități
+––+
13 (97..104) | | –> Zona unităților: de fiecare dată când o unitate este
. | | utilizată, bitul este setat la ‘1’; de obicei primele
. | | 10 unități sunt legate din fabricație pentru testare.
. | |
. | |
31 (241..248) | |
+––+
32 (249..256) | $FF | –> FFh este setată când toate unitățile au fost utilizate.
+––+
(*) suma de control se calculează folosind expresia:
max | min=32*(j-1) + 9
$E3 – 4 * Sum b(i) unde | max=32*j
i=min | și j este numărul sumei de control(1, 2 sau 3)
Notă: Numărul cardului se calculează prin concatenarea într-un singur șir a celor 5 octeți scriși în hexazecimal.
2.2.2.6. Harta de memorie pentru cardurile altor țări
Octet(Bit) Hexa
+––+ 96
1 (1..8) | | –> Suma de control = $D8 – Sum b(i)
+––+ i=9
2 (9..16) | $83 | –> Telecard
| $80 | –> Alte aplicații
| $9A | –> PIAF card
| $C0 | –> AVANT card
+––+––+
3-4 (17..32) | $1x | $xx | –> Unități+2 (0x1152 : exemplu ptr. 150u pe card).
+ – – – – – +
| $10 | $00 | –> In cazul cardurilor Argentiniene speciale
| $3D | $13 | –> 80u (Maroc)
| $DB | $B5 | –> 40u (Maroc)
+––+––+
ARGENTINA
+––+––+––+––+
5..8 (33..64) | $Ta | $bc | $de | $fg | T=Producător (4 Gemplus, 0 Schlumberger)
| | | | | S.N. = a*64 + b*32 + c*16 + d*8 + e*4 + f*2 + g
+––+––+––+––+
9..10 (65..80) | | | –> Necunoscut
+––+––+
UNGARIA
+––+––+––+––+
5..8 (33..64) | $Ta | $B | $C | $D | T=Producător (4 Gemplus, C ODS)
| | | | | S.N. = a*2^21 + B*2^17 + C*2^9 + D
+––+––+––+––+
9..10 (65..80) | | | –> Valoare unități: 0103h ptr. 120u; 010Ah ptr. 50u
+––+––+
PORTUGALIA
+––+––+––+––+
5..8 (33..64) | $00 | $A | $B | $C | S.N. = A*2^17 + B*2^9 + C
+––+––+––+––+
9..10 (65..80) | | | –> Certificare
+––+––+
ALTELE
+––+
5 (33..40) | $Tx | –> T = Producător 0 –> Schlumberger
| | –> 1 –> Solaic
| | –> 3 –> Gemplus
| | –> 4 –> Gemplus
+––+–-+–-+–-+–-+
6..10 (41..80) | | | | | | –> Numărul Serial
+––+–-+–-+–-+–-+
+––+––+
11-12(81..96) | $10 | $15 | –> Djibouti
| | $16 | –> French Polynesia
| $11 | $1D | –> French Cincarte
| | $1E | –> Suedia
| | $30 | –> Norvegia
| | $31 | –> Noua Caledonie
| | $32 | –> Camerun
| | $33 | –> Andora
| | $39 | –> Luxemburg
| | $3C | –> Irlanda
| | $3D | –> Gambia
| $11 | $47 | –> Portugalia
| | $54 | –> Malta
| | $55 | –> Cehia / Yugoslavia
| | $5C | –> Argentina
| | $5D | –> Burkina Faso
| | $5E | –> Mali
| | $5F | –> Gabon
| | $65 | –> Finlanda
| | $86 | –> Slovacia
| | $E0 | –> Ungaria
| | $E1 | –> Camerun (CamTel)
| | $E2 | –> Maroc
| $1E | $5C | –> Argentina (Carduri Speciale)
+––+––+
13 (97..104) | | –> Zona unităților: de fiecare dată când o unitate este
. | | utilizată, bitul este setat la ‘1’;
. | |
. | | Primele 2 unități sunt setate din fabricație pentru
. | | testare.
. | |
. | | Ungaria: Fiecare bit setat la ‘1’ în această zonă
. | | reprezintă o unitate utilizată;
. | | 10 unități sunt setate în fabrică, când
. | | cardul este nou.
32 (249..256) | |
+––+
ARGENTINA SPECIAL
+––+
13 (97..104) | $C0 | –> Primele 2 unități sunt setate din fabricație pentru
. | | testare.
. | |
21-22(161..176)|$XXXX| –> Număr utilizator de Ex. $2456
23-24(177..192)|$XXXX| $1252 –> 2456 1252 6578
25-26(193..208)|$XXXX| $6578
. | |
. | |
31 (241..248) | |
+––+
2.2.3. Cardurile de generația a II –a
2.2.3.1. Introducere
Aceste carduri conțin 128 biți și sunt fabricate în tehnologie NMOS, cu următoarea organizare:
64 biti EPROM protejați la scriere;
40 biți EPROM;
24 biți setați pe “1”.
2.2.3.2. Configurația pinilor
ISO 7816-2
PIN OUT:
1 : VCC=5V 5 : Gnd
2 : Reset 6 : n.c.
3 : Clock 7 : I/O
4 : n.c. 8 : n.c.
(n.c. : neconectat)
2.2.3.3. Trăsături-caracteristici principale.
ISO 7816 – 1 / 2 compatibile;
tensiunea de alimentare de 5V;
putere consumată redusă;
tehnologie NMOS.
2.2.3.4. Diagramele de timp
RESET
Numărătorul de adrese este resetat la 0 pe frontul pozitiv al semnalului de CLK în timp ce semnalul Reset este “1”. Numărătorul de adrese nu poate fi resetat între valorile 0..7.
__________________
_____| |_____________________________________________ Reset
: :
: _____ : _____ _____ _____ _____
_____:_______| |____:_| |_____| |_____| |_____| |_ Clk
: : : : : : : : : : :
_____:_______:__________:_:_____:_____:_____:_____:_____:_____:_____:_
_____:___n___|_____0____:_|_____1_____|_____2_____|_____3_____|___4_:_(Address)
: : : : : :
_____: :_______:___________:___________:___________:_
_____XXXXXXXXXXXXXXXXXXXX_______|___________|___________|___________|_ Data
Bit n Bit 0 Bit 1 Bit2 Bit3
Numărătorul de adrese este incrementat cu o unitate pe fiecare front pozitiv al semnalului de CLK, atâta timp cât semnalul de Reset este “0”. Datele din memorie vor fi prezente la ieșire, pe pinul I/O, pe frontul negativ al semnalului de CLK. Numărătorul de adrese nu poate fi decrementat pentru a citi un bit adresat anterior. Pentru accesul la acesta, numărătorul de adrese va fi mai întâi resetat și apoi incrementa până la adresa corespunzătoare bitului respectiv.
2.2.3.5. Harta de memorie pentru 4 sau 5 nivele octale
Octet (Bit) Hexa
+––+––+––+––+
1-4 (1..32) | $92 | $3B | $FF | $7B | –> Grecia (G+D)
| $94 | | | | –> Grecia (G+D)
+ – – + – – + – – + – – +
| $92 | $3B | $FF | $06 | –> Sud Africa (G+D)
| | | | $09 | –> Sud Africa (G+D)
+ – – + – – + – – + – – +
| $10 | $2B | $FF | $7B | –> Grecia (Gemplus)
| $E8 | $2B | $FF | $7B | –> Grecia (Gemplus)
| $98 | $35 | $1D | $7B | –> Grecia (Solaic)
+ – – + – – + – – + – – +
| $99 | $28 | $1C | $02 | –> Canada (G+D) / $5
| | | | $03 | –> Canada (G+D) / $10
| | | | $04 | –> Canada (G+D) / $20
+––+––+––+––+
| $F2 | $2F | $FF | $mm | –> Germania ($mm : producător)
| $F4 | $2F | $FF | |
| $D8 | $2F | $FC | | $mm : $1A : Orga
| $C0 | $8F | $FF | | $2A : Solaic
| $80 | $6F | $FF | | $4A : ODS
+––+––+––+––+ $8A : G+D
| $80 | $37 | $FF | $mm | $AA : Orga
| $80 | $77 | $FF | | $CA : Gemplus
| $F0 | $37 | $FF | |
| $D8 | $37 | $FF | | –> Olanda ($mm : producător)
+––+––+––+––+
| $10 | $2B | $2F | | –> România
+––+––+––+––+
5 (33..40) | | –> Olanda : $2A: 10G; $4A: 5G; $6A: 25G
6 (41..48) | | –> Numărul Serial / Zona producătorului
7 (49..56) | |
8 (57..64) | |
+––+
GRECIA, CANADA (4 nivele octale)
+––+––+––+––+––+
9..13 (65..104)|c512 | c64 | c8 | c0 | | –> 4 nivele octale
| | | | | $00 | –> Grecia
| | | | | $FF | –> Canada
+––+––+––+––+––+
GERMANIA, OLANDA, SUD AFRICA
+––+––+––+––+––+
9..13 (65..104)|c4096|c512 | c64 | c8 | c0 | –> 5 nivele octale
+––+––+––+––+––+
+––+
14 (105..112) | $FF |
15 (113..120) | $FF | –> zona biților setați pe "1"
16 (120..128) | $FF |
+––+
Numărul Serial pentru cardurile din Grecia:
Numărul Serial = B(8)*2^24 + B(7)*2^16 + B(6)*2^8 + B(5)
i=8
cu B(I) = Sum {b((I-1)*8+j)}^(8-i)
i=1
(Octeți inversați: MSB stânga, LSB dreapta)
Numarul Serial cardurile germane:
Octet 4 Octet 5 Octet 6 Octet 7 Octet 8
,––,––, ,––,––, ,––,––, ,––,––, ,––,––,
| <– | 1010 | | <– | <– | | <– | <– | | <– | <– | | <– | <– |
'––'––' '––'––' '––'––' '––'––' '––'––'
| | | | | | | |
| | | | | | | |
digit 1 digit 2 | digit 9 | digit 7 | digit 5
S.N. S.N. | S.N. | S.N. | S.N.
| | |
digit 4 digit 8 digit 6
S.N. S.N. S.N.
Nota 1: “<––” – caracterul (digit) este scris în cod binar întors.
(MSB dreapta, LSB stânga)
Nota 2: Numărul Serial este cel înscris pe verso-ul cardului.
Ultimele 2 caractere (digits) nu sunt codate în memorie.
2.2.3.6. Harta de memorie pentru noile carduri de 512 biți: (Grecia, Canada, UK, Sud Africa)
De curând au apărut cardurile noi, fabricate de Gemplus, având o memorie de 512 biți. Nu este explicat clar modul de funcționare al zonei unităților.
Octet (Bit) Hexa
RUSIA
+––+––+––+
1..3 (1..24) | $83 | $AB | $01 | –> Rusia (Gemplus)
+––+––+––+
4 (25..32) | | –> Spre definire
+––+––+––+
5..7 (33..56) | $A | $B | $C | –> S.N. = A*2^17 + B*2^9 + C
+––+––+––+
8 (57..64) | $VV | –> $VV = Valoare unități:$02=20u; $05=50u
+––+
ALTELE
+––+––+––+
1-3 (1..16) | $93 | $AB | $FF | –> Grecia (Gemplus)
| $93 | $AB | $8F | –> Croația
| $93 | $AB | $BF | –> Canada (Gemplus)
| $93 | $AB | $1C | –> Canada (Gemplus)
| $93 | $0B | $AF | –> Bulgaria
| $A8 | $22 | $F7 | –> UK
| $B8 | $3E | $FF | –> Sud Africa (Solaic)
| $E8 | $20 | $FF | –> Grecia (Schlumberger)
| $E9 | $30 | $FF | –> Grecia (Schlumberger)
+––+––+––+––+
| $E8 | $39 | $13 | $41 | –> Lituania (50u)
+––+––+––+––+
4 (25..32) | $7B | –> Grecia : (100u ?)
| $77 | –> Croația (100u)
| $58 | –> Bulgaria : 200u
| $54 | –> Bulgaria : 50u
| $50 | –> Bulgaria : 100u
| $02 | –> $5 (Canada)
| $03 | –> $10 (Canada)
| $04 | –> $20 (Canada)
| $5E | –> Marea Britanie
+––+
5 (33..40) | | –> Numărul Serial (Vezi 2.2.3.5)
6 (41..48) | |
7 (49..56) | | Sud Africa : 16 + "B(5)*0x10000 + B(6)*0x100 + B(7)"
8 (57..64) | |
+––+
9 (65..72) | | –> c512
10 (73..80) | | –> c64 4 nivel octale
11 (81..88) | | –> c8
12 (89..96) | | –> c1
+––+––+––+––+
13-16 (97..128) | $FF | $FF | $FF | $FF | –> zona biților setați pe "1"
| $00 | $FE | $AF | $FF | –> Marea Britanie
| | | | | –> Bulgaria: Nr. octal de sute de u.
+––+––+––+––+
17 (129..136) | $xx | –> Zonă neutilizată
. | |
. | | Grecia : 0A 00 0A 00 0A 00 0A 00 .. 00 (Gemplus)
. | | FF FF FF FF FF FF FF FF .. FF (Schlumberger)
. | |
. | | Marea Britanie : FF .. FF
. | |
. | | Bulgaria: B(17), B(18) certificare
. | | B(19) .. B(32) = FF
. | | B(33) .. B(64) = 0A 00 A0 00 0A 00 0A 00..00
64 (137..512) | $xx |
+––+
2.2.3.7. Generația a II-a pentru cardurile Franțuzești: (TG2)
Octet (Bit) Harta de memorie
+––+––+
1-2 (1..16) | $81 | $40 | –> Franța TG2
+––+––+
3..8 (17..64) | $NN |
| $NN | –> N: Numărul Serial
| $NN |
| $NN |
| $NV | –> V: Valoare unități –> $005 : 50u
| $VV | $012 : 120u
+––+
9..13 (65..104) | $xx | –> 4 nivele octale de numărare
| $xx | (9 unități setate din fabrică [$00 $00 $01 $01])
| $xx |
| $xx |
| $xx | –> $7F când cardul nu este gol; $FF când este gol
+––+
14 (105..112) | $FF | –> Neutilizat (Zonă setată la ‘1’)
+––+––+
15..16 (113..128) | $.. | $.. |–>Certificare(Setați la "0" când cardul este gol)
+––+––+––+––+
17..24 (129..192) | $.. | $.. | $.. | $.. | –> Cod secret de autentificare
| $.. | $.. | $.. | $.. |
+––+––+––+––+
25..32 (193..256) | $00 | $00 | $00 | $00 | –> Neutilizați
| $00 | $00 | $00 | $00 |
+––+––+––+––+
33..36 (257..288) | $*3 | $FF | $00 | $00 | –> Primii 4 biți '*' = Semnătura
+––+––+––+––+
37..40 (289..320) | $.. | $.. | $.. | $.. | –> Anti Tearing Flags
+––+––+––+––+––+––+––+
41..47 (321..448) | $.. | $.. | $.. | $.. | $.. | $.. | $.. | –> Zona definită
+––+––+––+––+––+––+––+ Utilizatorului
NOTĂ : Numărătorul de adrese restartează la 000 când se atinge adresa 511. Toți biții între 448 și
511 sunt 0.
Numărătorul în octal
Zona de numărare memorează unitățile cardului. Valoarea sa inițială este specificată de editorul cardului și setată din fabricație.
Zona de numărare este divizată în 5 sau 4 nivele de numărare. Valoarea octală a fiecărui nivel este definită de numărul biților de ‘1’, iar valoarea acestui nivel trebuie înmulțită cu coeficientul 8^n (unde n este cuprins între [4..0] sau [3..0]).
Exemplu: Pentru 5 nivele octale de numărare cu 15818 de unități.
Octet 9 Octet 10 Octet 11 Octet 12 Octet 13
–––––––––––––––––––––
00000111 – 00111111 – 01111111 – 00000001 – 00000011
–––––––––––––––––––––
(3)octal (6)octal (7)octal (1)octal (2)octal
–––––––––––––––––––––
Valoare = 3*8^4 + 6*8^3 + 7*8^2 + 1*8^1 + 2*8^0
–––––––––––––––––––––
TOTAL = 15818 Unități
De notat este că numărătorul poate doar să scadă și nu este permisă scrierea în numărător a unei valori mai mare decât vechea valoare.
În realitate majoritatea unităților cardului nu reprezintă unități de telecomunicații, ci unități financiare; de ex. în cardurile germane fiecare unitate de telecomunicații reprezintă 30 pfenigi.
2.2.3.8. Caracteristicile electrice ale cardurilor
Valori maxime:
DC caracteristici:
AC caracteristici:
2.2.3.9. Schemă cititor
Următoarea schemă este foarte simplă și va permite citirea diferitelor tipuri de carduri telefonice și a unor carduri cu memorie.
| +5V
| C=200uF; R=2.2k
Centronic / ____
Port ,/ ,–|____|–,
Prezența *–––-*–-||–-*–––––,
cardului | ,––––-+––––-, |
Pin10 (Ack) –<–––*––| 1 | 5 |–*–,
R/W | RST +––-\ | /––-+ |
Pin4 (d2) –>–––––| 2 +–-+ + 6 |––|– Vcc
Clock +–––| |–––+ |
Pin3 (d1) –>–––––| 3 +–-+–-+ 7 |–, |
RAZ | RFU +––-/ | \––-+ | |
Pin2 (d0) –>–––––| 4 | 8 |–|–*
'––––-+––––-' | |
I/O | |
Pin 11 (Busy) –<–––––––––––––––-' |
Gnd |
Pin 25 –––––––––––––––––-'
3. Realizarea practica
3.1. Partea hard.
3.1.1. Modulul local (modul 1)
3.1.1.1. Schema bloc
3.1.1.1.1. Referințe
După cum se observă din schema bloc, modulul 1 conține 5 blocuri:
placa de bază cu buffer-ele pentru portul de imprimantă;
interfața modul 1 – modul 2;
cititorul de cartelă;
comanda releului pentru acționarea deschiderii uși;
sursa de alimentare a celor două module;
conectorul cu 25 pini;
conectorul cu 15 pini.
Placa de bază conține buffer-ele de tip 74LS244 pentru interfațarea modulului 1 cu portul paralel al PC-ului.
Interfață modul 1 – modul 2 face legătura dintre modului 1 și modulul 2 prin conectorul cu 15 pini și un cablu de 10m.
Cititorul de cartelă este dispozitivul unde se va introduce cartela. Acesta conține 3 elemente:
1 dispozitiv cu 6 contacte;
1 microîntrerupător;
1 conector cu 6 pini.
În momentul introducerii cartelei, pinii din sârmă oțelită ai dispozitivului cu 6 contacte, se suprapun peste cele 6 contacte ale cipului cartelei. Deoarece programul realizează numai citirea cartelei, doar 4 pini ai dispozitivului sunt conectați la montaj. Astfel pinii 4 (n.c.) și 6 (Vpp) nu sunt conectați.
Prin închiderea microîntrerupătorului, atunci când se introduce cartela, se alimentează cipul cartelei pe pinul 1 (Vcc) cu o tensiune de 5Vcc și se transmite programului un “mesaj – cardul 1 prezent” prin trecerea pinului SELECT (pin 13) în starea “1”. Când cartela este scoasă din cititor starea acestui pin devine “0”.
Prin intermediul conectorului cu 6 pini se realizează legătura cititorului cu placa de bază a modului 1. După cum se observă din schemă, prin intermediul acestei legături se realizează alimentarea cipului cartelei (pin 1 – +5V, pin 5 – Gnd), comanda acestuia cu ajutorul semnalelor de Clock (pin 3) și Reset (pin 2), verificarea prezenței cartelei în cititor, precum și citirea datelor memorate în cip pe pinul 7 (I/O) al acestuia.
Comanda releului (pentru acționarea electromagnetului de deschidere a ușii – neimplementat) cuprinde un circuit simplu, comanda sa realizându-se prin intermediul pinului 9 al portului paralel. Prin trecerea acestui pin în starea “0” releul se închide.
Sursa de alimentare este o sursă stabilizată de +5Vcc realizată cu un stabilizator de tensiune de tipul 7805. Deoarece schema este simplă, nu am mai prezentat-o în lucrare.
Prin intermediul conectorului cu 25 pini partea hard se conectează la portul paralel al PC-ului, iar cu ajutorul conectorului cu 15 pini se realizează legătura dintre modul 1 și 2.
3.1.1.2. Placa de bază
3.1.1.2.1. Referințe
Placa de bază a modului 1 conține 2 circuite buffer 74LS244 cu trei stări și conectorul cu 25 de pini pentru conectarea modulului 1 la portul paralel al PC-ului, prin intermediul unui cablu cu conexiuni pin la pin. Ambele circuite realizează o protecție a portului paralel și o adaptare a nivelelor de tensiune și curent cu acesta.
Circuit U1 se conectează la registrul de date al portului paralel și permite transferul nivelelor logice de la port către partea hard. Pinii 1 și 19 ai circuitului (care comandă trecerea în înaltă impedanță a ieșirilor celor 2 module interne) sunt conectate la masă și astfel permanent la ieșirile circuitului vor fi prezente nivelele logice ale celor 8 pini de date ai portului paralel.
Circuitul U2 se conectează la cei 4 pini ai registrului de stare al portului paralel, astfel el realizând o multiplexare a semnalelor de la intrare. Pinii 1 și 19 ai circuitului sunt conectați la pinii 1 (/nSTROBE) respectiv 14 (/nLINE FEED) ai registrului de control al portului paralel. Prin intermediul acestor doi pini se realizează trecerea în starea de înaltă impedanță a ieșirilor celor 2 module interne ale circuitului. Tabelul de adevăr al circuitului folosit în montaj este:
Astfel prin activarea pe rând a ieșirilor celor două module interne ale circuitului la pinii registrului de stare al portului vor fi prezente biții corespunzători codului tastei apăsate sau informațiile despre cartele 1 sau 2.
Pinii 1 și 2 ai conectorului J3 nu sunt folosiți. Prin intermediul conectorilor J5, J7 și J6, J8 se poate aduce îmbunătățiri montajului. În conectorii J2 și J4 se înfige interfața dintre modulul 1 și 2.
3.1.1.3. Interfața modul 1 – modul 2
3.1.1.3.1. Referințe
Această interfață adună sub forma unui conector standard cu 15 pini toate semnale de pe placa de bază a modului 1. Prin folosirea unui cablu de 10m cu 16 fire se face legătura dintre modulul 1 și modulul 2. Acest cablu se conectează la modulul 1 sau 2 prin intermediul conectorilor cu 15 pini.
Printr-o simplă analiză a schemelor care conțin respectivii conectori cu 15 pini se observă că, conexiunile din cablu sunt pin la pin.
Pentru realizarea cablului cu 15 fire am folosit 2 bucăți de cablu torsadat de 8 fire de tip UTP.
La conectorul J1 se conectează cititorul de cartelă al modului 1.
Prin intermediul conectorilor J2 și J4 acest modul face legătura cu placa de bază, astfel J2 cu J2 și J4 cu J4.
3.1.2. Modulul la distanță (modul 2)
3.1.2.1. Schema bloc
3.1.2.1.1. Referințe
După cum se observă din schema bloc, modulul 2 conține 4 blocuri:
placa de bază;
tastatura;
cititorul de cartelă;
blocul de afișare a mesajelor;
Placa de bază are rolul de transmitere sau recepționare a semnalelor la sau de la modulul 1, de codificare a tastaturii și de afișare a mesajelor pe panoul frontal al modulului.
Tastatura conține 10 taste și este de tipul cu contact normal deschis din cele folosite calculatoarele DAF2010.
Cititorul de cartelă este dispozitivul unde se va introduce cartela. Acesta conține 3 elemente:
1 dispozitiv cu 6 contacte;
1 microîntrerupător;
1 conector cu 6 pini.
În momentul introducerii cartelei, pinii din sârmă oțelită ai dispozitivului cu 6 contacte, se suprapun peste cele 6 contacte ale cipului cartelei. Deoarece programul realizează numai citirea cartelei, doar 4 pini ai dispozitivului sunt conectați la montaj. Astfel pinii 4 (n.c.) și 6 (Vpp) nu sunt conectați.
Prin închiderea microîntrerupătorului, atunci când se introduce cartela, se alimentează cipul cartelei pe pinul 1 (Vcc) cu o tensiune de 5Vcc și se transmite programului un “mesaj – cardul 2 prezent” prin trecerea pinului nACK (pin 10) în starea “1”. Când cartela este scoasă din cititor starea acestui pin devine “0”.
Prin intermediul conectorului cu 6 pini se realizează legătura cititorului cu placa de bază a modului 1. După cum se observă din schemă, prin intermediul acestei legături se realizează alimentarea cipului cartelei (pin 1 – +5V, pin 5 – Gnd), comanda acestuia cu ajutorul semnalelor de Clock (pin 3) și Reset (pin 2), verificarea prezenței cartelei în cititor, precum și citirea datelor memorate în cip pe pinul 7 (I/O) al acestuia.
Blocul de afișare a mesajelor conține 5 circuite simple de comandă a câte 3 leduri roșii conectate în paralel. Comanda pentru cele 5 circuite este dată de ieșirile decodificatorului 74LS138.
3.1.2.2. Placa de bază
3.1.2.2.1. Referințe
Placa de bază conține:
codificatorul de tastatură;
circuitul de blocare al tastaturii;
circuitul de clock al latch-ului pentru tastatură;
circuitul de memorare al codului tastei apăsate;
decodificatorul pentru mesaje;
conectorul cu 15 pini.
Codificatorul de tastatură este format din circuitul U1 și porțile U2D, U2A, U3A și U3B.
Astfel circuitul U1 decodifică primele 8 taste iar poarta U2D decodifică ultimele 2 taste, deoarece nu am avut posibilitatea procurării unui codificator 10:4.
Porțile U2A, U3A și U3B realizează o negare a codului emis de circuitul U1 astfel încât la ieșirea lor, împreună cu ieșirea porții U2D, să avem codul binar real al tastei apăsate.
Circuitul de blocare al tastaturii este format din porțile U2B și U2C și are rolul de blocare al tastaturii atâta timp cât nu este introdusă o cartelă în cititor. Astfel, cele două porți setează pinul 5 (EI) al circuitului U1 pe “1” invalidând practic ieșirile acestui circuit.
Circuitul de clock al latch-ului pentru tastatură se compune din porțile U3F, U3E și circuitul monostabil format din porțile U6A, U6C și R9, C1.
U3F și U3E împreună realizează o întârziere de 20ns a semnalului de clock față de timpul când codul este valid la ieșirile circuitului U1, iar întârzierea provocată de U3E este de numai 10ns față de momentul când codul binar corect este valid pe intrările circuitului de memorare.
Dar deoarece circuitele latch de tip D (74LS175) memorează datele prezente la intrare nu numai pe frontul crescător al tactului ci și pe timpul când tactul este activ s-a impus introducerea unui circuit monostabil care să reducă frontul pozitiv al tactului egal cu timpul cât tasta este apăsată la o valoare foarte mică (20s).
Circuitul de memorare al codului tastei apăsate este format din circuitul latch de tip D 74LS175 care memorează pe frontul crescător al tactului codul tastei apăsate. Circuitul este resetat atunci când nu este prezentă cartelă în cititor.
Decodificatorul pentru mesaje este format din circuitul 74LS138 (decodificator 3 : 8). Pe intrările circuitului este prezent codul binar al mesajului care se dorește a fi afișat transmis pe pinii de date 6, 7 și 8 ai portului paralel de către program.
Prin intermediul conectorul cu 15 pini se face legătura cu modulul 1.
3.1.2.3. Tastatura numerică
3.1.2.3.1. Referințe
După cum am spus tastatura conține 10 taste și este de tipul cu contact normal deschis din cele folosite calculatoarele DAF2010.
Prin intermediul rezistențelor intrările circuitului codificator 74LS148 sunt ținute la un potențial pozitiv. Când se apasă o tastă intrarea corespunzătoare se pune la masă, iar circuitul codificator prezintă la ieșire codul binar al tastei apăsate.
3.2. Partea soft
3.2.1. Prezentarea programului
3.2.2. Prezentarea aplicației
4. Bibliografie.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Sistem de Control Acces (ID: 148834)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
