Wiem więc o specyfikacji USB 2.0 znajdującej się na stronie USB.org .
Jestem trochę leniwy i niecierpliwy. Czy ktoś może mi powiedzieć, gdzie się udać, aby dowiedzieć się dokładnie, czego oczekuje się od mojego urządzenia peryferyjnego po podłączeniu kabla USB?
Na przykład, jeśli moim urządzeniem peryferyjnym jest drukarka, jak mam powiedzieć komputerowi na drugim końcu, że drukarka (chyba z określonym opisem modelu) właśnie została podłączona? Niż w komputerze, skąd sterownik drukarki wie, który port USB został podłączony do drukarki?
Moja aplikacja to właściwie USB MIDI. Dostałem również ten dokument USB-MIDI , ale brakuje mi bardziej podstawowego protokołu USB.
Tylko dla informacji ludzi, układ USB, którego używam, to FTDI FT220x i jest podłączony do SPI ADSP-21479 SHArC. Teraz używamy go po prostu do komunikacji tekstowej za pomocą komputera PC (z uruchomionym TeraTerm) jako „konsoli” . Mam dostęp do kodu, który konfiguruje port SPI i łączy się z układem FTDI, ale nie ma kodu, który wykonuje początkową komunikację. Nie wiem, co robi FT220x po pierwszym podłączeniu do komputera.
Nie jestem niezadowolony z czytania i nauki, ale chciałbym wiedzieć, od czego zacząć czytanie, a specyfikacja 100 MB USB jest zbyt dużym celem, aby strzelać. Serdeczne podziękowania dla wszystkich za pomoc w działaniu.
źródło
Odpowiedzi:
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:
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.
źródło
Zachowanie i interakcja „partnerów” USB (hosta i urządzenia) jest rozproszona w specyfikacji USB. Najlepszym sposobem na uzyskanie uzasadnienia jest przyjrzenie się „ramie urządzeń”, rozdział 9, która opisuje możliwe (obowiązkowe) stany urządzeń (Rysunek 9-1), oraz ramce Host (i Hub), w rozdziałach 10 i 11. Ignorowanie szczegóły protokołu (potoki / typy transakcji / abstrakcyjne warstwy protokołu OSI, układ PCB itp.), lepszą kontrolę początkowej interakcji można uzyskać, studiując schemat stanu portu (Rysunek 11-10).
Zasadniczo, jeśli kabel nie jest podłączony między hostem a urządzeniem, porty hosta znajdują się w „stanie zasilania” (VBUS jest włączony), ale „rozłączone”. Przewody D + i D- są utrzymywane na niskim poziomie dzięki 15-stopniowym opadaniom.
Po podłączeniu kabla VBUS przechodzi do urządzenia. Urządzenie rozpoznaje, że jest podłączone, i sygnalizuje zdarzenie „połącz”, pociągając WYSOKI jeden z przewodów D, D +, jeśli jest to urządzenie FS / HS, i D-, jeśli jest to urządzenie LS.
Przeciągnij przewody D +/- na określonym porcie, co powoduje przerwanie oprogramowania hosta, zgłaszając „zmianę statusu portu”. Oprogramowanie hosta (zazwyczaj ehci.sys) następnie inicjuje sekwencjonowanie „resetowania portu” na tym konkretnym porcie. Po pomyślnym zakończeniu „resetowania portu USB” port hosta jest włączony do komunikacji USB. Port staje się aktywny (pakiety ramki zaczynają wypływać).
Za pomocą protokołu USB host przypisuje unikalne adresy do tego urządzenia i odczytuje „deskryptor urządzenia”. Rozpocznie się proces „wyliczenia urządzenia”. Deskryptor urządzenia zawiera informacje o tym, do której klasy urządzenia należy (HID, COM, MIDI, drukarka itp.) Oraz VID / PID tego konkretnego urządzenia, a także kilka innych informacji, patrz Tabela 9-8.
Po uzyskaniu klasy urządzenia i identyfikatora VID / PID oprogramowanie hosta próbuje dopasować te informacje do rejestru urządzeń i ładuje odpowiedni sterownik URZĄDZENIA, ogólny lub specyficzny dla dostawcy (jeśli istnieje). Następnie sterownik urządzenia kończy proces wyliczania, wybierając interfejs urządzenia kończący się ustawieniem „konfiguracja urządzenia”. Oczywiście cała komunikacja USB jest rozpoznawana tylko za tym konkretnym portem , nawet jeśli wszystkie pakiety są nadawane do wszystkich włączonych portów.
Powyżej przedstawiono ogólne ramy protokołu połączenia USB. Pakowanie danych do określonego celu (np. MIDI) to inna historia i jest obsługiwane zarówno na poziomie aplikacji, jak i na poziomie sterownika urządzenia, jeśli system uzyska odpowiednią klasę urządzenia. Aby uzyskać natywną komunikację MIDI, urządzenie musi mieć tę klasę w deskryptorze i przestrzegać wszystkich definicji klas MIDI .
źródło