Lucrul cu dispozitive USB auto-fabricate fără drivere

Lucrați cu dispozitive USB auto-făcute fără drivere

Desigur, de pe deplin apar din utilizarea de drivere atunci când se utilizează mai multe dispozitive USB nu pot solicita organizarea de conectare de autobuz a unei stive de conducător auto, dar în acest caz considerăm utilizarea stivă USB numai driverele standard, incluse implicit în sistemul de operare.







Deci, cele mai frecvente tipuri de dispozitive standard:

  • MSC - Clasa de stocare în masă
  • CDC - Clasa dispozitivelor seriale
  • HID - Dispozitiv de interfață umană
  • CCID - dispozitiv de interfață pentru cartele de circuit

Clasa MSC nu este potrivită pentru organizarea unui schimb convenabil și simplu cu aplicația. Această clasă poate fi utilizată dacă dispozitivul are o cantitate mare de memorie FLASH cu un sistem de fișiere și trebuie să fie accesat.

Clasa USB-CCID este destul de interesant, dacă doriți să creați pentru a asigura schimbul rapid (se poate transmite date mai rapid decât HID și oferă o latenta mai mica decat CDC-clasa), dar destul de specific, deoarece cu aceasta este necesar să lucreze în cadrul parcelelor APDU.

Acum, să analizăm mai detaliat lucrul cu fiecare clasă de dispozitive:

Lucrul cu dispozitivul de clasă MSC

Această clasă nu este foarte convenabilă pentru muncă, deoarece necesită o cantitate mare de cod de procesare și este legat să lucreze cu sistemul de fișiere. Cu toate acestea, cu dispozitivul din această clasă. Devine interesant dacă dispozitivul are propriul sistem de fișiere sau doar o cantitate mare de memorie internă.

În principiu, lucrul cu dispozitive MSC poate fi realizat fără un sistem de fișiere, prin citirea / scrierea directă a unui disc. Pentru a face acest lucru, deschideți direct dispozitivul folosind funcția CreateFile:

Lucrul cu un dispozitiv de clasă CDC

Când se utilizează clasa CDC după conectarea dispozitivului la sistem, este creat un port COM virtual, comunicarea cu care din sistemul de operare este complet diferită de cea a unui port COM fizic. La nivelul WinAPI, lucrul cu un astfel de dispozitiv este redus la apelarea funcțiilor CreateFile, WriteFile, ReadFile și CloseHandle.

Ideal, dacă înainte de acest dispozitiv a fost folosit un port COM pentru a comunica cu PC-ul. În acest caz, nu sunt necesare modificări ale software-ului pe partea PC-ului și, în general, soluția este o soluție șablon. Orice dispozitiv cu un port COM prin intermediul adaptorului poate fi suspendat pe USB. În unele produse de serie (am întâlnit astfel de dispozitive neîntrerupte) trecerea la magistrala USB a fost realizată tocmai prin implementarea unui convertor USB-COM.







De asemenea, opțiunea utilizând clasa CDC este bună deoarece protocolul este asincron și este posibil să se trimită blocuri de date de orice lungime în ea.

Cu toate acestea, merită să ne amintim că standardul de clasă de dispozitiv în Windows pentru a asigura activitatea sa are șofer usbserial.sys, cu toate acestea, același convertor FTDI FT232hh folosește propria punerea în aplicare a protocolului CDC și încă necesită instalarea driver-ului.

Lucrul cu un dispozitiv de clasă HID

Deși dispozitivul HID este destinat interacțiunii cu joystick-urile și tastaturile, ele sunt ușor de configurat pentru a transfera date de utilizator arbitrare. Un dezavantaj destul de grav al HID-urilor este acela că blocurile de date nu pot avea decât o dimensiune fixă, care este stabilită în descriptorul HID.

Principala dificultate atunci când lucrați cu un dispozitiv HID este de a obține numele său în sistem. După obținerea numelui, puteți utiliza funcțiile CreateFile, WriteFile, ReadFile și CloseHandle pentru a lucra cu dispozitivul. Un punct demn de menționat este primul octet în transmisia de citire / WriteFile funcții este identificator de parcelă, în mod tipic 0. Astfel, dacă mărimea blocului de date este de 64 bytes HID, o funcție este necesară pentru a transmite 65 de octeți. Acest octet este folosit în driver și nu intră în dispozitiv.

Cum se obține numele unui dispozitiv HID este cel mai bine văzut în bibliotecă prin referință la sfârșitul articolului.

Lucrul cu un dispozitiv de clasă CCID

Prima caracteristică a activității CCID, trebuie să selectați linia ATR și protocolul T = 0 sau T = 1. Cel mai bine este să alegeți T = 1, deoarece în el există cazul APDU 4. Probabil, deja toți s-au speriat cu o grămadă de cuvinte care nu sunt clare. Protocolul în sine este descris în standardul ISO 7816-12 (există un GOST corespunzător / ISO), sub formă de pachete și formatul APDU pot fi găsite în ISO 7816-3 și ISO 7816-4. Din păcate, aceste standarde sunt bazate pe comision, dar după ce au căutat bine, toate informațiile necesare de la ele pot fi găsite încă în domeniul public.

Comunicarea cu dispozitivul este efectuată utilizând funcțiile SCardConnect, SCardTransmit. Funcția SCardTransmit se ocupă de transmisia directă de date.

APDU constă dintr-un antet și un bloc de date. Trebuie să răspundă neapărat cu cel puțin 2 octeți: codul de returnare, 90 00 în cazul în care totul este OK și o altă valoare (conform standardului 6x xx). Dacă există date pe care le dau la început, iar codul de returnare este atașat de 2 octeți la sfârșitul parcelei. Codurile de bază care pot fi utile atunci când se lucrează sunt descrise în tabel (în realitate, există multe coduri de eroare):

Retur SW1 SW2

Acum, direct formatele parcelelor (T = 1):

  • Cazul APDU 1:
  • Cazul APDU 2:
  • Cazul APDU 3:
  • Cazul APDU 4:

    Ie există 4 clase de comenzi APDU: fără date, date către dispozitiv, cu date returnate de la dispozitiv și cu transfer de date imediat în ambele direcții. CLA - clasa de comandă, codul de comandă INS, parametrii de comandă P1 și P2. De asemenea, atunci când se dezvoltă, merită luat în considerare faptul că sistemul de operare în sine poate încerca în unele cazuri să trimită dispozitivului un set de comenzi standard APDU.

    Selectarea VID și PID

    În cele din urmă, problema de a alege VID și PID. Pentru aceste valori, șoferul este legat de dispozitiv în cazul în care dispozitivul nu aparține clasei standard. Dacă încercați să conectați dispozitive de diferite clase cu același PID și VID, este posibil să aveți probleme cu driverele. Se presupune că fiecare dispozitiv are un VID unic și PID.

    O selecție de articole și rapoarte privind diverse experimente matematice și electronice.







    Articole similare

    Trimiteți-le prietenilor: