Documente Academic
Documente Profesional
Documente Cultură
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
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.
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
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).
- HID
- Mass storage devices
- Printers
- Audio devices
- Imaging devices
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.
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.
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.