Sunteți pe pagina 1din 7

Interfata USB a microcontrollerelor ARM din seria LPC214x

1. Instrumente necesare

a. Hardware
Conectorul USB are 4 pini, din care doi sunt rezervati pentru alimentare, iar ceilalti
doi sunt un bus diferential bidirectional.
Procesul de “enumerare” a unui periferic USB (prin care se asigneaza dispozitivului o
adresa si se determina o serie de caracteristici de configurare ale acestuia) este
declansat de HOST, la detectarea unui nivel de tensiune HIGH pe linia DATA+.
Controlul acestui mecanism se face, de obicei, cu un tranzistor (Q3 in figura 1),
conectat la linia de intrare-iesire P0.31

Fig. 1 Interfata fizica USB

Cand tranzistorul Q3 este saturat, rezistenta R29 (1.5K) este conectata intre V+ si
USBD+.
In lipsa acestui tranzistor, se poate conecta direct o rezistenta de 1K5 intre V+ si
USBD+. Daca aceasta lipseste, dispozitivul periferic nu va fi detectat de HOST.

b. Instrumente software de lucru

a. Mediul de dezvoltare Keil uVison


b. USB TRACE – o aplicatie software produsa de SysNucleus
(http://www.sysnucleus.com/) capabila sa capureze dialogul intre un computer
HOST si perifericele USB si sa exporte log-ul intrun fisier. Procesul de captura
poate fi declansat de diverse pachete “Trigger”, iar tipurile de pachete capturate
se pot selecta definint o serie de “Filtre”.
Interfata grafica de dialog cu utilizatorul a acestei aplicatii este prezentata in figura 2.
Fig. 2 Interfata grafica de dialog a aplicatiei USB TRACE de la SysNucleus

c. Mai sunt necesare exemplele de cod sursa oferite de Keil in pachetul uVision:
- USBMem – implementarea unui flash disk generic cu LPC214x
- USBHid – un exemplu de Human Interface Device
- VirtualCOM – un exemplu de implementare a unui port serial USB care foloseste

2. Descrierea protocolului USB

Protocolul este strict Master-Slave, i.e. toate transferurile sunt initiate de MASTER.
La nivelul unui SLAVE, pachetele de date sunt compuse/interpretate de subsistemul
USB controller, sarcina programarii reducandu-se la initializarea interfetei.
La detectarea unui nou device USB conectat la bus, HOST-ul initiaza un proces,
denumit “enumerarea dispozitivului”, care consta in urmatorii pasi:

- Asignarea unei adrese unice pe bus pentru fiecare SLAVE. Asignarea este facuta
de HOST. Inainte de a capata o adresa proprie, toate perifericele USB comunica
cu HOST-ul folosind adresa 0.
- Citirea de catre HOST a unor structuri de date denumite “descriptori”, care contin
informatii despre clasa din care face parte dispozitivul, VendorID si Product ID.
Acestea sunt necesare HOST-ului pentru a identifica si incarca un driver specific,
care sa coordoneze comunicatia cu dispozitivul SLAVE.
- Incarcarea driverului
- Selectarea unei configuratii pentru dispozitivul SLAVE (de exemplu tipul de
power, sau alte caracteristici de functionare).

Procesul de enumerare este transparent pentru utilizator. Odata enumerat,


dispozitivul este adaugat in “device manager”.
Tipuri de transferuri USB

1. Transferul de tip “interrupt”. Exemplu tipic de astfel de transfer – tastatura si


mouse-ul. Volumul de date transferat este relativ mic, dar este important ca
transferul sa fie asociat cu un eveniment extern.
2. Transferul de tip Bulk. Volumul de date transferat este relativ mare, iar timpul nu
este critic. Exemplu tipic – CD-ROM-ul, printer-ul, sau scanner-ele. Transferul
bulk dispune de mecanisme de verificare a corectitudinii datelor.
3. Transferul izocron. Exemplu – streaming-ul catre sau de la dispozitive cum ar fi
speakers, sau webcams. Transferul are loc in timp real, cu o minima verificare a
erorilor.
4. Control transfer – este asociat cu procesul de enumerare si trebuie sa fie
implementat la toate tipurile de device-uri USB.

Clase de dispozitive USB

Cele mai raspandite clase de dispozitive USb sunt urmatoarele:

- HID
- Mass storage devices
- Printers
- Audio devices
- Imaging devices

Dispozitivele care apartin aceleiasi clase au o serie de trasaturi comune, iar


impartirea pe clase este utila pentru ca faciliteaza standardizarea dezvoltarii software
la nivelul driverelor si al firmware. In multe situatii, nu mai este necesar sa scriem un
driver specific pentru un anume dispozitiv, fiind posibil sa folosim un driver generic,
valabil pentru intreaga clasa din care face parte dispozitivul.

Conceptul de “endpoint”

Definitia unui endpoint conform specificatiilor standardului USB este: "a uniquely
addressable portion of a USB device that is the source or sink of information in a
communication flow between the host and device."
Un endpoint este deci un buffer RAM localizat la nivelul controllerului USB al device-
ului.
Un endpoint este caracterizat de un numar (de la 0 la 15) si o directie (IN sau OUT
din perspectiva HOST).
Un endpoint asociat cu transferuri de tip control trebuie sa permita ambele directii de
transfer.
Endpoint-ul cu numarul 0 este intotdeauna de control.
Pentru fiecare endpoint exista un descriptor – un bloc de informatie care defineste
tipul de transfer, adresa (numarul) endpointului, numarul maxim de octeti de date
care se pot transfera si – in unele cazuri – intervalul de timp dezirabil intre doua
transferuri.
Conceptul de pipe
Un pipe este o conexiune logica intre driverul soft de la nivelul HOSt si un endpoint
aflat la nivelul device-ului USB.
Un pipe nu are asociat nici un suport fizic specific.
Orice device are un default control pipe care foloseste endpoint 0.

Transfer, tranzactie, pachet de date

Orice transfer de date consta din una sau mai multe tranzactii, iar fiecare tranzactie
consta in 1, 2 sau 3 pachete de date.
Tipuri de pachete de date
- Token packet
- Data packet
- Handshake packet

Structura unui pachet consta intr-un PID (Packet ID) o zona de date si un CRC.

Structura aplicatiilor demo de la Keil

Structura aplicatiilor demo de la Keil uVision este data in figurile 3, 4,5.

Fig. 3 Structura proiectului HID


Fig. 4 USBMem extins cu fisierele sursa analog, serial, timer

Fig. 5 USB Virtual Com


Se observa ca fisierele USBHW, USBCORE, USBDESC, USBUSER sunt comune
pentru toate proiectele si sunt chiar identice.

Aceasta permite configurarea proiectelor compiland toate modulele asociate cu


interfata USB intr-o biblioteca (lib) si lasand “la vedere” doar fisierele sursa asociate
cu aplicatia specifica (vezi figura 6).

Fig. 6 Exemplu de proiect care foloseste o biblioteca USb compilata separat

Pentru crearea bibliotecii, se elimina din proiectul demo fisierul startup.s si modulul
care contine functia main() si se configureaza Linker-ul sa genereze fisier de iesire
lib, ca in figura 7.

Fig. 7 Configurarea linker-ului pentru a genera fisier de iesire de tip Lib.

S-ar putea să vă placă și