Avr287 USB demonstrație gazdă ascuns și de stocare în masă USB, AVR-lucru-cu-USB, programare

Traducerea foaie de date AVR287 [1] a Atmel, care descrie exemplul dispozitivului gazdă pentru HID USB (tastatura, mouse-ul și alte dispozitive de intrare / ieșire) și dispozitive USB Mass Storage (flash drive, hard discuri externe). Alte exemple de gazdă pe cip USB AVR pot fi găsite în biblioteca LUFA [2].

• Exemplul se bazează pe gazdă biblioteca AVR® USB OTG redusă
• Funcționează pe cipuri AT90USB647 / AT90USB1287
• Suportă descărcabil și nu pot fi descărcate mouse-ul standard USB
• Suportă funcția de hub USB (numai pentru USB Mass Storage dispozitive de stocare)
• Stocare în masă:
- procesate comenzile bloc prescurtata (Redus Block Commands, RBC)
- SFF-8020i comandă bloc prelucrate sau MMC-2 (ATAPI)
- de obicei, proiectat pentru UFI, dispozitiv extern dischetă (unitate de dischetă, FDD)
- Unitatea de procesare a comenzilor SFF-8070i
- set de comenzi SCSI transparent

Avr287 USB demonstrație gazdă ascuns și de stocare în masă USB, AVR-lucru-cu-USB, programare

Fig. 1-1. gazdă HID aplicații și Mass Storage

Acum, dispozitive tot mai multe periferice sunt folosite pentru conectarea interfață USB. Disponibilitatea funcțiilor gazdă pentru aplicații embedded le permite să sprijine interacțiunea cu dispozitiv standard USB, iar o astfel de aplicare devine avantaje mari de pe piață. Scopul acestui document - pentru a descrie modul de a începe punerea în aplicare a aplicațiilor gazdă USB bazate pe USB HID (mouse USB) Clasa și clasa USB Mass Storage (dispozitiv de stocare a datelor, o unitate flash, o unitate externă). La final este un exemplu simplu de control simultan al unui AT90USB microcontroler (seria cipuri Atmel Series-7 cu suport pentru USB) HID clasele de dispozitive USB și USB de stocare în masă, cu suportul sistemului de fișiere (FAT12 / FAT16 / FAT32). Se înțelege că utilizatorul este familiarizat cu cadrul AVR USB firmware Atmel, precum și standardele HID și MassStotage, care pot fi găsite pe site-ul usb.org.

Exemplu Pentru a porni usbkey încărcare recomandată, dar poate fi aplicat la orice alt bord pe care este montat un microcontroler sau AT90USB647 AT90USB1287 (de exemplu userial [3]).

[2.1 O teorie pic: cum HID clasa USB]

2.1.1. Configurația HID. Dispozitiv clasa USB HID necesită un punct final de control (Ctrl endpoint, ep0. Strict vorbind, prezența unui astfel de punct final necesar în orice dispozitiv USB), un punct final de întrerupere IN (pentru transmisia de date de pe dispozitiv USB la gazdă) și un punct final opțional întrerupe OUT (transfer de date de la gazdă la dispozitivul USB). Ep0 de obicei, ea a implicat doar un proces de dispozitiv de enumerare USB. Punct final Întrerupere IN IN este proiectat pentru a transmite raportul de pe dispozitivul USB la gazdă (mouse-ul principal de trafic care descrie cursorul și făcând clic pe butonul). Endpoint Întrerupere OUT este utilizat pentru a transmite raportul OUT (de exemplu, pentru echipe la lumină dorit LED NumLock, CapsLock, ScrollLock pe tastatura) de la gazdă la dispozitivul USB. În conformitate cu standardul USB mouse-ul necesar pentru a avea un control al punctului final Ctrl punct final, ep0 și un punct final al întreruperilor.

2.1.2. Transferul de date. HID USB Anexă (mouse-ul USB) utilizează un simplu schimb de date între gazdă și mouse-ul. Gazdă sondaje mouse-ul la intervale regulate P (timp de votare interval, intervalul de votare) pentru prezența unor date noi, iar mouse-ul ca răspuns trimite datele, dacă sunt disponibile, în caz contrar trimite token-ul NAK (nr Confirmare) pentru a spune gazdei că datele încă. Datele trimise la gazdă, numit Raport. De fapt, este doar un bloc de octeți dintr-un anumit format. Structura acestui raport este prezentat mai jos:

[2.2. Un pic de teorie: modul în care clasa de stocare în masă USB]

2.2.1. Configurarea de stocare în masă. Aplicația utilizează un Mass Storage 2 obiective de tip vrac (unul IN, altul OUT) pentru punerea în aplicare a transmisiei de date și starea. Endpoint 0 (Ctrl endpoint, ep0) este utilizat numai pentru enumerare, eroare de manipulare, precum și pentru a determina valoarea LUN (Logic Unit Number).

2.2.2. Transferul de date. Comunicare prin USB Mass Storage pentru aplicații se bazează pe comenzile SCSI. Cu alte cuvinte, aplicarea de stocare în masă este controlată de un set de comenzi SCSI trimise de gazdă pentru a controla transferul de fișiere. Datorită clasei LUN Mass Storage permite ca un singur dispozitiv pentru a sprijini mai multe unități de stocare.

Avr287 USB demonstrație gazdă ascuns și de stocare în masă USB, AVR-lucru-cu-USB, programare

Fig. 2-2. Prezentare generală de aplicare USB Mass Storage. În calitate de gazdă prezentate, de obicei, de calculator, dar, în același exemplu, gazda va opera o demonstrație de bord cu AVR microcontroler.

Din păcate, protocolul SCSI este prea complicat, astfel încât să poată fi luate în considerare în temeiul prezentului articol. Pentru mai multe informații, se referă la standardul „USB Mass Storage Class caietul de sarcini de transfer de volum numai“ pe site-ul usb.org.

[3. Software-ul Arhitectura Atmel]

Figura de mai jos prezintă arhitectura HID firmware-ului gazdă și de stocare în masă, în cazul în care fișierele de cod afișate utilizate într-un proiect.

Avr287 USB demonstrație gazdă ascuns și de stocare în masă USB, AVR-lucru-cu-USB, programare

Fig. 3-1. Arhitectura gazdă HID și stocare în masă.

HID clasa de management (mouse-ul) este implementat în modulul host_mouse_task.c, în timp ce clasa de suport de stocare în masă implementat modulul host_ms_task.c. Planificatorul (o procedură numită în mod continuu într-o buclă fără sfârșit principal) provoacă periodic usb_task subrutina (void), host_mouse_task (void) și host_ms_task (void). Funcționarea acestor trei funcții descrise mai jos.

• usb_task (void)
- Modul de detectare USB.
- Enumerarea USB dispozitiv gazdă / USB.
• host_mouse_task (void)
- Se verifică dacă mouse-ul este conectat.
- Acesta primește date de la mouse-ul și execută aplicația utilizator.
- Verifică închiderea mouse-ului gazdă.
• host_ms_task (void)
- Verifică dacă dispozitivul de stocare în masă de stocare este conectat.
- Executa aplicația utilizator.
- Controale dezactivare dispozitiv de stocare în masă gazdă.

Atunci când un dispozitiv USB este conectat la gazda procedura de enumerare începe. Scurtă enumerare poate fi descrisă ca un proces de identificare a dispozitivelor USB gazdă. În cazul în care firmware-ul va găzdui interfață USB pentru a conecta dispozitivul la un nivel scăzut, acesta va fi verificat pentru conformitatea cu dispozitivul gestionează lista de interfețe acceptate (lista definită în fișierul conf_usb.h), iar apoi host_mouse_task procedura () și host_ms_task () se va vedea o conexiune de notificare Is_new_device_connection_event () macro ( return true).

Numărul actual de dispozitive acceptate vor fi returnate Get_nb_device (), în cazul în care este permisă opțiunea conf_usb.h USB_HUB_SUPPORT în fișier, și va fi acceptat numărul de interfețe returnate Get_nb_supported_interface) funcția (. Pentru fiecare interfață a fiecărui dispozitiv posibil acces programatic la codurile de clasa, subclasa și protocolul prin Macro Get_class (i), Get_subclass (i) și Get_protocol (i).

Controalele de program - dacă dispozitivul conectat este sprijinit de interfața clasei, iar în cazul în care dispozitivul de interfață adoptat, programul configureaza funcția de canal sau funcția host_auto_configure_endpoint User_configure_endpoint (), în funcție de faptul dacă, opțiunea HOST_AUTO_CFG_ENDPOINT conf_usb.h în fișierul dacă autorizat sau nu.

Atunci când configurația este completă, gazda trimite SET_CONFIGURATION () cerere către dispozitivul USB, și se duce la starea DEVICE_READY (dispozitiv USB este gata de lucru).

Mouse-ul sarcina gazdă atunci când primește notificarea conexiunii, clasa și protocolul vor fi verificate pentru a se asigura mouse-ul este conectat. În acest caz, problema dezgheța pe canal și al pregăti pentru a transfera date. Mai jos este codul relevant de detectare HID gazdă mouse-ului:

În cazul în care sarcina este un eveniment de stocare în masă se va vedea conectarea noului dispozitiv, pentru a sprijini capacitatea de a sprijini mai multe dispozitive de stocare în masă se pare pentru fiecare interfață pentru fiecare dispozitiv. Dacă interfața curentă aparține de stocare în masă, atunci curentul stocat în dispozitivele matrice dispozitiv index dms de stocare în masă [n] și numărul maxim de dispozitive sunt scrise în variabila dms_connected. După aceea, sarcina configurează canalul și canalul IN OUT, și inițializează toate unitățile USB (Mass Storage) dispozitiv. Mai jos este codul pentru detectarea unui dispozitiv de stocare în masă gazdă.

3.2.1. Sarcina gazdă HID, care lucrează cu mouse-ul. În cazul în care mouse-ul este conectat, atunci problema este de fiecare dată când verifică mai întâi dacă o valabilă în pachet primit. Atunci când sunt disponibile date, programul citește funcția de Host_read_byte de date () și realizează un algoritm pentru acțiuni de utilizator de prelucrare (ce să facă să se ocupe de noile date ale cursorului mouse-ului si intrarile de la tastatura). Ulterior, gazda trimite o funcție de comandă IN-Host_read_byte (), atunci sarcina este gata de a primi următorul pachet de date. Mai jos este codul pentru manipularea datelor gazdă de la mouse-ul. Indicând LED-uri Led3..Led0 indică starea datelor mouse-ului (emulează aplicație utilizator).

mouse-ul operațiunile de prelucrare a datelor sunt puse în aplicare numai în scopuri demonstrative - în funcție de direcția cursorului se va aprinde și se stinge LED-uri indicatoare de diferite la bord usbkey. Utilizatorul poate utiliza această funcție „așa cum este“, dar, de fapt, la acest punct trebuie să fie handler de date de la mouse-ul (aplicația utilizator).

3.2.2. gazdă sarcini de procesare de stocare în masă. Așa cum am menționat anterior, cererea de stocare în masă utilizează un set de comenzi SCSI trimise de către gazdă pentru a sprijini citirea și scrierea de fișiere pe disc MSD. transmisia de bază de date se realizează host_get_data () și host_send_data (). Cererea de utilizator trebuie să pună în aplicare un protocol SCSI codificator, decodor sistem de fișiere (a se vedea. Apnout AVR114 [5]).

Toate această teorie poate părea descurajantă, așa că aici este un exemplu simplu, puteți încerca rapid de punere în aplicare gazdă USB pentru clasa USB HID, și USB Mass Storage.

În această configurație, placa de evaluare este mai întâi conectat la un calculator PC prin interfața USB, care lucrează ca un dispozitiv de dispozitiv de stocare USB de stocare în masă, setarea datelor din eșantion. Apoi, placa de evaluare este deconectat de la PC, și este conectat la dispozitivul de stocare a dispozitivului de stocare în masă (unitate flash USB), pentru a arăta transferul de date de stocare în masă. Ne putem conecta, de asemenea, un mouse USB standard de la bord demo,
pentru a arăta activitatea aplicației gazdă care procesează mouse-ul HID protocolul USB.

Apendicele HID gazdă USB și de stocare în masă pot fi puse în aplicare pe orice AVR, care au o interfață hardware cu funcția de gazdă, utilizând pachetul software disponibil pe site-ul Atmel.

Aproximativ Traducere: în fapt, „pe AVR orice“ prea tare. De fapt, numărul de chips-uri AVR care acceptă funcția de gazdă, este foarte limitat - este doar o familie de AVR USB Series7, care include 2 cip: AT90USB647 și AT90USB1287. Motivul este clar - de a sprijini o serie de caracteristici de calitate necesită mult mai multă memorie și de performanță decât este disponibilă de la AVR clasic.

Ambele pachete software pot fi rulate pe balene de pornire disponibile. La momentul acestei pachete de sprijin scris gazdă HID și gazdă de stocare în masă poate fi rulat pe panourile de STK525 și usbkey (în cazul în care este instalat chips-uri sau AT90USB647 AT90USB1287). Aparatură USB de stocare în masă, care este conectat la gazda de stocare în masă, poate fi orice stick de memorie USB convențional, sau un kit de pornire, care funcționează ca dispozitiv de stocare USB (vezi. [5, 6]).

bord gazdă ar trebui să funcționeze în modul gazdă (conector conectat Minia). Pentru card în modul gazdă necesită configurarea și conectarea o sursă de alimentare externă. Motivul este evident - placa de gazdă care are nevoie de hrană, și dispozitivul USB (HID mouse-ul sau dispozitiv de stocare în masă) necesită o putere de alimentare prin USB.

[4.3. Software-ul]

4.3.1. Descrierea postului. Pentru problema de procesare gazdă mouse-ul HID protocolul USB, dacă vă conectați un mouse USB standard de la placa demo, apoi mutați mouse-ul pentru a afișa aprindere LED demo bord LED3..LED0. După ce a trecut enumerarea, evenimentul a primit în pachetul va fi declanșat de fiecare dată când mouse-ul este mutat, fie atunci când acesta va fi apăsat. Gazdă citește date mouse-ul prin intermediul interfeței USB. Navigarea pe axa X este controlat și ardere LED0 LED1 (dacă X> 0 transformă LED0, când X <0 включится LED1), а по оси Y перемещение будет отображаться горением LED2 и LED3 (при Y> 0 spire pe LED2, când Y <0 включится LED3).

Pentru problema USB Host-gazdă de stocare în masă enumerare o dată a trecut dispozitiv MSD ​​poate fi pentru a face schimb de fișiere între datele înregistrate pe cartela gazdă flash unitate (cip de memorie este montat pe placa), și dispozitivul USB MSD. Poziția din dreapta a joystick-ului vă permite să citiți conținutul folderului „OUT“ de pe dispozitivul USB MSD, și arde-l pe un card de gazdă Flash-drive în dosarul „IN“. Pe de altă parte, poziția din stânga a joystick-ului vă permite să suprascrie datele în direcția inversă, cu disc cip DataFlash pe dispozitivul USB MSD.

4.3.2. Configurare. Anumiți parametri trebuie să fie configurate în mod individual pentru fiecare tip de microcontroler pentru a asigura funcționarea corectă a codului gazdă USB. nu este necesar să se modifice codul de bază al software-ului, acesta va fi configurat la valorile descrise mai jos.

• Configurare USB, în fișierul conf_usb.h:
- ar trebui să li se permită opțiunea USB_HOST_FEATURE pentru funcția de gazdă USB.
- USB_DEVICE_FEATURE ar trebui să aibă posibilitatea de a se conecta la PC-ul computerului.
- în matrice trebuie să conțină valori VID_PID_TABLE VID și PID la dispozitivele acceptate, dacă opțiunea HOST_STRICT_VID_PID_TABLE permisă.
- CLASS_SUBCLASS_PROTOCOL matrice trebuie să includă clasa de clasă HID protocol Mouse. Pentru a sprijini soareci standard USB pentru a fi incluse pot fi descărcate subclase (non-boot) (boot) și pot fi descărcate și pentru a sprijini USB dispozitive MSD trebuie să fie conectate Interfață Mass Storage (clasă Mass Storage, SCSI subclasă, numai în vrac Protocol). Toate aceste elemente sunt clasa / subclasa / protocol trebuie să fie adăugate de către utilizator, dacă doriți să utilizați HUB.
- Ar trebui să li se permită opțiunea USB_HUB_SUPPORT dacă doriți să utilizați mai multe dispozitive USB MSD.
- Opțiunea HOST_STRICT_VID_PID_TABLE poate fi permisă sau interzisă. Pentru a sprijini diferite produse de la diferiți producători, se recomandă să interzică acest macro.
• Configurare USB de stocare în masă:
- Ar trebui să li se permită opțiunea HOST_SYNC_MODE în fișierul config.h pentru a rula programul de exemplu USB gazdă de stocare în masă.

• Produse AVR USB Foaie de date (atmel.com)
• caietul de sarcini HID clasa USB (usb.org)
• specificațiile USB Mass Storage Class (usb.org)

Aici este o transcriere a unor termeni și abrevieri obscure. Definițiile altor termeni referitoare la standardul USB (raport punct final, enumerare, și așa mai departe descrieri. D.), A se vedea. Articolul USB într-o coajă de nucă [4].

ATAPI Advanced Technology Atașamentul Packet Interface, autobuz standard pentru stocare a datelor informatice. Pentru detalii, a se vedea. Wikipedia.

DMS Dispozitiv de stocare în masă, dispozitiv de stocare USB.

-MMC 2 versiunea MultiMedia Card 2, tipul de interfață pentru conectarea memoriei flash-carduri.

Dispozitiv de stocare în masă MSD, dispozitiv de stocare USB, la fel ca DMS.

OTG pe drum, traducerea literală a "on the fly". Denotă o interfață USB care poate fi utilizat în modul gazdă USB și în modul dispozitiv USB.

RBC redus bloc comenzi, un subset de comenzi standard de SCSI.

SCSI Small Computer System Interface, un tip standard de interfață pentru conectarea dispozitivelor de stocare externe, precum și înregistrarea auto-intitulat.

standard de SFF-8020i pentru conectarea dispozitivelor CD-ROM / DVD bazate pe interfața / ATAPI ATA.

standard de SFF-8070i pentru conectarea dispozitive de citire / scriere floppy disk-uri.

UFI universal de fișiere de interfață, un standard pentru conectarea dispozitive de citire / scriere floppy disk-uri.