USB ma kilka warstw, które są opisane w specyfikacji USB 2.0 . Jeśli znasz warstwowy model sieci OSI, możesz pomyśleć o tym w następujący sposób:
- Warstwa sesji = Rozdział 10 Sprzęt i oprogramowanie hosta USB (sterowniki urządzeń)
- Warstwa transportowa = Rozdział 9 Struktura urządzenia USB
- Warstwa sieci = Rozdział 8 Warstwa protokołu (strumień bitów)
- Warstwa łącza danych = rozdział 7 elektryczny (obwód)
- Warstwa fizyczna = Rozdział 6 Mechaniczny (kabel i złącze)
Koncepcyjnie USB opiera się na strumieniach danych, zwanych punktami końcowymi , które mogą być IN (do hosta) lub OUT (z hosta). Każde urządzenie ma punkt końcowy 0, który służy do kontroli i statusu. Urządzenie może mieć dodatkowe punkty końcowe dla danych aplikacji. Każdy punkt końcowy zachowuje się jak bufor FIFO.
Dane są przesyłane na punkt końcowy albo jako Bulk (jak TCP / IP, co gwarantuje, że każdy bajt przybywa i we właściwej kolejności), lub Isochronous (jak UDP / IP, gwarantuje, że jest świeży, ale może upuszczać pakiety). Istnieje myląco nazwany typ przesyłania „ Przerwanie ”, który tak naprawdę jest odpytywany przez hosta.
USB 2.0 używa pary różnicowej dla łącza danych. Nie będę wchodził w szczegóły, ponieważ jest to omówione w rozdziale 7 specyfikacji USB 2.0. Ogólnie w układzie PCB traktujemy to jako parę różnicową o dopasowanej długości i wkładamy rezystory szeregowe wymagane przez dowolny USB PHY (fizyczny Interfejs) jest używany. Urządzenie peryferyjne USB wykorzystuje rezystor o wysokiej wartości na jednej z linii D + lub D-, aby powiadomić hosta, że jest to urządzenie peryferyjne o dużej lub niskiej prędkości.
Wkrótce po tym, jak host USB odkryje, że urządzenie jest obecne, host żąda od urządzenia kilku deskryptorów . Zajmuje się to za kulisami układ FTDI. Deskryptory opisano w rozdziale 9.5 . Należą do nich urządzenia deskryptora , konfiguracja deskryptora , interfejsu deskryptorów , Endpoint deskryptorów , String deskryptorów , może nawet HID Zgłoś deskryptorów .
Device Descriptor zawiera USB VID (Vendor Identification) i PID (Identyfikacja produktu) liczb. System operacyjny wykorzystuje tę parę liczb, VID_PID, do ustalenia, który sterownik urządzenia będzie używany dla tego urządzenia. Pamiętaj, że numer VID jest wydawany przez członkostwo w forum implementatorów USB, więc jest to pewien problem, jeśli jesteś indywidualnym wynalazcą.
Ponadto istnieje sterownik klasy HID (Human Interface Device), który zapewnia nieco ogólne wejście dla klawiatury / myszy / itp., A także dowolne ogólne wejście / wyjście. Jedną z zalet HID jest to, że nie wymaga dostarczenia niestandardowego sterownika urządzenia, ale jego przepustowość jest nieco ograniczona w porównaniu do niestandardowego sterownika zbiorczego. Istnieje cały inny dokument specyfikacji na temat deskryptorów HID; oraz dokument Tabeli użytkowania HID, który wyszczególnia wszystkie numery kodów opisujące różne funkcje dostępne w danym ludzkim urządzeniu z interfejsem.
Układ FTDI, taki jak arkusz danych FT220X, zapewnia „silnik interfejsu szeregowego” USB (nie mylić z szeregowym SPI lub szeregowym RS232). Zajmuje się tym większość niskopoziomowych rzeczy opisanych w rozdziałach 6, 7 i 8.
FTDI używa EEPROM (offchip na FT2232H, on-chip na FT220X), aby zawierać trochę informacji, które trafiają do deskryptorów. Możesz dostosować wartości VID / PID i podać niestandardowe ciągi opisu.