Stm32 și usb

În ultima parte, i-am spus cum ar trebui să arate proiectul pentru dispozitivul Keil cu USB, a dat o legătură cu proiectul meu și mi-a spus cum să îl configurez pentru aproape orice placă cu STM32.







Proiectul a implementat o interfață cu două puncte finale (intrare și ieșire), cu protocolul meu "personalizat", cu care puteți porni, opri și face LED-urile să clipească cu timpul corect de ardere / non-ardere.

Am stabilit un mic program pentru toate acestea:

Stm32 și usb

În acest articol voi da o scurtă prezentare a instrumentelor care pot fi folosite pentru a simplifica foarte mult viața ta.

Deci, avem pe ordinea de zi următoarele opțiuni:

1) Scrieți driverul personal. Sarcina este complexă, nerecunoscătoare, lungă. Aici puteți trimite imediat, de exemplu, la Driverul de fundal Windows. Există o mulțime de exemple pe care le puteți alege și să vă adaptați sarcinilor.
Avantajul fără îndoială al acestei opțiuni este că soluția se va dovedi a fi frumoasă și compactă. Dar merită timpul ...
Îmi pare rău dacă am dezamăgit pe cei care credeau că voi descrie această opțiune :)

3) Utilizați mijloacele gata. Aici, pe această "opțiune pentru începători și nu numai", vom opri.

Dar mai întâi o mică deviere.

Cum recunoaște Windows dispozitivele noastre USB?
În majoritatea cazurilor, acest lucru este "cablat" în dispozitivul VID (ID furnizor) și PID (Product ID). Există excepții, cum ar fi HID și Mass Storage, unde Windows recunoaște clasa dispozitivelor și alunecă driverul deja pregătit.

Dacă stickem dispozitivul în computer, sistemul îl va detecta, dar, evident, va jura la lipsa unui driver și va oferi să aleagă fișierul .inf.
În acest dosar sunt prescrise, printre altele, VID și PID, precum și calea spre șofer.

Deci, ne întâlnim: libusb-win32 și Jungo WinDriver.

Jungo WinDriver

Un lucru foarte convenabil.
Rulați Expertul, selectați prin VID-PID dispozitivul nostru:

Stm32 și usb

Generează fișierul infoplan, salvează-l, instalează driverul acolo și voila. Aici sunt cei doi utilizatori de nivel + destinație + zero, obiectiv final zero:

Stm32 și usb

Dar dispozitivul nostru a fost definit în managerul de dispozitive:

Stm32 și usb






Dar asta nu e tot. Faceți clic pe butonul magic Generați codul:

Stm32 și usb

Și avem un set cu adevărat uriaș de opțiuni pentru fiecare gust:

Stm32 și usb

Am generat un proiect pentru C # (.NET) și mi-a dat o soluție cu două proiecte: de fapt programul în sine și pentru lucrul cu dispozitivul prin USB. Acesta din urmă are tot ceea ce aveți nevoie, până la evenimentele de deconectare a conexiunii. În general, dacă nu vă deranjezi, atunci totul poate fi redus la scrierea obișnuită în lectură.
Atunci poți să o faci singur? ;-)

Ei bine, acum să vorbim despre neajunsurile.
1) Jungo WinDriver - un lucru foarte plătit. Cine vrea să se superi - prețurile sunt chiar aici.
2) Unele dispozitive USB au mai multe configurații. Acest lucru este rar, dar se întâmplă.
WinDriver nu poate funcționa cu acestea, iar funcția de modificare a configurației este marcată ca Neimplementată încă.

libusb-win32

Despachetați și în tava de bibliotecă este programul inf-wizard.exe. Este, de asemenea, un expert pentru generarea unui fișier info și, în același timp, toate celelalte fișiere necesare instalării driverului.
Rulați, selectați dispozitivul nostru, salvați inf și așa mai departe într-un tata separat:

Stm32 și usb

Ei bine și imediat vom instala.

Stm32 și usb

Acum, pentru a vă crea proiectul, trebuie să colectați toate fișierele necesare de la libusb în lib, includeți folderele și cum să lucrați cu dispozitivul, în dosarul cu exemple. Și pentru a lucra este mai simplu decât simplu (a se vedea bulk.c)


Dar mi sa părut puțin. De când am fost odată pus pe un medicament greu numit C # + .NET, am început să caut soluții care sunt la fel de simple ca Jungo WinDriver.
Și am găsit următoarele:

LibUsbDotNet

Cu acest ajutor am scris programul din articolul precedent. Lucrul cu obiectivele este la fel de ușor.


Ei bine, atunci implementăm un mic protocol, scriem-citește punctele finale și bucurăm LED-urile clipește :)
Doar nu uitați o subtilitate: tot schimbul cu dispozitivul USB are loc la inițiativa gazdei. Prin urmare, datele nu vor intra în gazdă până când gazda nu vrea să le citească.
Asta e tot.

Aici, în principiu, tot ceea ce este necesar pentru a crea un dispozitiv USB primitiv pe STM32. Întregul schimb este redus la citire și scriere la obiectivele finale și la analizarea a ceea ce sa întâmplat acolo și a ceea ce trebuie făcut.
Personal, cred că această opțiune este mai ușoară decât implementarea pe clasa standard a dispozitivului.

Ca întotdeauna, fișierele cu proiectul sunt aici.

Ei bine, data viitoare, când mâinile vor ajunge, vom ridica USB Mass Storage și peste interfața deja realizată pentru LED-uri, adică un dispozitiv USB compozit :)

Lucrul LibUsb este bun, dar clasele standard nu sunt, de asemenea, rele. De exemplu, clasa CDC este văzută în sistem ca un port virtual COM, care nu se poate bucura, ci se implementează foarte simplu. Totuși, lucrul la orice sistem fără a instala driverele merită foarte mult.

Ei bine, da :) Doar o clasă CDC va mai avea nevoie de un fișier inf, precum și de VID-PID. Ei bine linux nu conta.

În general, sarcina a fost următoarea: organizarea schimbului USB cât mai rapid și mai ușor posibil, citirea și scrierea la puncte finale. Și punerea în aplicare chiar CDC este cel puțin unele, dar aprofundarea :)

Vă mulțumim pentru articole, interesante și informative. Apropo, de asemenea, aleg USB. Puțin câte puțin - pentru că până acum nu văd multă problemă în crearea driverelor USB, deoarece există FT232. VCP este totul nostru. )

ft232 costă la fel de mult ca stm32f103. Există un sens. )







Trimiteți-le prietenilor: