Jadi saya tahu tentang spesifikasi USB 2.0 ada di situs USB.org .
Saya sedikit malas dan tidak sabar. Dapatkah seseorang memberi tahu saya ke mana harus pergi untuk mencari tahu apa yang diharapkan dari perangkat periferal saya ketika kabel USB terhubung?
Misalnya, jika perangkat periferal saya adalah printer, bagaimana cara memberi tahu komputer di ujung lain bahwa printer (dengan deskripsi model tertentu, saya kira) baru saja terhubung? Daripada di komputer, bagaimana driver printer tahu port USB mana yang terhubung ke printer?
Aplikasi saya sebenarnya USB MIDI. Saya juga mendapatkan dokumen USB-MIDI ini , tetapi saya kurang dengan protokol USB yang lebih mendasar.
Hanya untuk informasi orang, chip USB yang saya gunakan adalah FTDI FT220x dan terhubung ke SPI dari ADSP-21479 SHArC. Kami sekarang menggunakannya hanya untuk komunikasi teks menggunakan PC (menjalankan TeraTerm) sebagai "konsol" . saya memiliki akses ke kode yang mengatur port SPI dan terhubung ke chip FTDI, tetapi tidak ada kode yang melakukan komunikasi awal. Saya tidak tahu apa yang dilakukan FT220x saat pertama kali terhubung ke PC.
Saya tidak senang membaca dan belajar, tetapi saya ingin tahu di mana harus mulai membaca, dan spesifikasi USB 100 MB terlalu besar untuk ditargetkan. Terima kasih yang tulus kepada siapa pun atas bantuan yang dapat ditindaklanjuti.
sumber
Jawaban:
USB memiliki beberapa lapisan, yang dijelaskan dalam Spesifikasi USB 2.0 . Jika Anda terbiasa dengan model jaringan berlapis OSI, Anda dapat menganggapnya seperti ini:
Secara konseptual USB didasarkan pada aliran data, yang disebut Endpoints , yang dapat berupa IN (ke host) atau OUT (dari host). Setiap perangkat memiliki Endpoint 0, yang digunakan untuk kontrol dan status. Perangkat mungkin memiliki titik akhir tambahan untuk data aplikasi. Setiap titik akhir berperilaku seperti buffer FIFO.
Data ditransfer pada titik akhir baik sebagai Massal (seperti TCP / IP, dijamin bahwa setiap byte tiba dan dalam urutan yang benar), atau Isochronous (seperti UDP / IP, dijamin masih segar tetapi dapat menjatuhkan paket). Ada jenis transfer " Interrupt " yang menyesatkan , yang benar-benar hanya disurvei oleh tuan rumah.
USB 2.0 menggunakan pasangan diferensial untuk datalink. Saya tidak akan membahas lebih detail karena ini dicakup oleh USB 2.0 spec bab 7. Secara umum pada layout PCB kita memperlakukan ini sebagai pasangan diferensial yang cocok, panjang, dan dimasukkan ke dalam seri resistor yang diperlukan oleh USB PHY apa pun (Fisik). Antarmuka) sedang digunakan. Periferal USB menggunakan resistor bernilai tinggi pada salah satu D + atau D-line untuk memberi tahu host bahwa periferal ini berkecepatan tinggi atau berkecepatan rendah.
Segera setelah host USB menemukan bahwa ada sebuah perangkat, host meminta sekelompok deskriptor dari perangkat. Ini diurus di belakang layar oleh chip FTDI. Deskripsinya dijelaskan dalam Bab 9.5 . Ini termasuk Device Descriptor , Configuration Descriptor , Deskriptor Antarmuka , Deskriptor Endpoint , Deskriptor String , bahkan mungkin HID Deskriptoror Laporan .
The Perangkat Descriptor termasuk USB VID (Vendor Identification) dan PID nomor (Identifikasi Produk). Sistem operasi menggunakan pasangan angka ini, VID_PID, untuk menentukan driver perangkat mana yang akan digunakan untuk perangkat ini. Perhatikan bahwa nomor VID dikeluarkan dengan memiliki keanggotaan di forum implementor USB, jadi itu semacam masalah jika Anda seorang penemu perorangan.
Selain itu, ada driver kelas HID (Perangkat Antarmuka Manusia), yang menyediakan input agak umum untuk keyboard / mouse / dll, serta input / output generik. Satu keuntungan dari HID adalah bahwa ia tidak perlu menyediakan driver perangkat khusus, tetapi throughputnya agak terbatas dibandingkan dengan driver massal kustom. Ada seluruh dokumen spesifikasi lain tentang deskriptor HID; dan dokumen Tabel Penggunaan HID yang merinci semua nomor kode yang menjelaskan berbagai fitur yang tersedia pada perangkat antarmuka manusia yang diberikan.
Chip FTDI seperti lembar data FT220X menyediakan "mesin antarmuka serial" USB (jangan dikacaukan dengan serial SPI atau serial RS232). Ini menangani sebagian besar hal-hal tingkat rendah yang dijelaskan dalam bab 6, 7, dan 8.
FTDI menggunakan EEPROM (offchip pada FT2232H, on-chip pada FT220X) untuk memuat sedikit informasi yang masuk ke deskriptor. Anda dapat menyesuaikan nilai VID / PID, dan memberikan string uraian khusus.
sumber
Perilaku dan interaksi "mitra" USB (host dan perangkat) tersebar di spesifikasi USB. Cara terbaik untuk mendapatkan beberapa alasan adalah dengan melihat "kerangka kerja perangkat", Bab 9, yang menjelaskan kemungkinan status perangkat (mandat) (Gambar 9-1), dan kerangka kerja Host (dan Hub), dalam Bab 10 dan 11. Mengabaikan perincian protokol (pipa / jenis transaksi / layer protokol OSI abstrak, tata letak PCB, dll.), pegangan yang lebih baik pada interaksi awal dapat dicapai dengan mempelajari diagram keadaan port (Gambar 11-10).
Intinya, jika kabel tidak terhubung antara host dan perangkat, port host dalam "Powered State" (VBUS AKTIF), tetapi "Terputus". Kabel D + dan D terangkat rendah dengan pull-down 15k.
Ketika kabel terhubung, VBUS masuk ke perangkat. Perangkat mengakui bahwa itu sedang terhubung, dan menandakan acara "terhubung" dengan menarik HIGH salah satu kabel D, D + jika itu perangkat FS / HS, dan D- jika itu perangkat LS.
Tarik D +/- kabel pada port tertentu memberikan interupsi ke perangkat lunak host, melaporkan "perubahan status port". Perangkat lunak host (biasanya ehci.sys) kemudian memulai sequencing "port reset" pada port tertentu . Setelah berhasil menyelesaikan "reset port USB", port host diaktifkan untuk komunikasi USB. Port menjadi aktif (paket frame mulai mengalir keluar).
Menggunakan protokol USB, tuan rumah memberikan alamat unik ke perangkat ini, dan membaca "deskriptor perangkat". Ini memulai proses "pencacahan perangkat". Deskriptor perangkat berisi informasi tentang kelas perangkat miliknya (HID, COM, MIDI, Printer, dll.), Dan VID / PID perangkat tertentu tersebut, ditambah banyak info lainnya, lihat Tabel 9-8.
Setelah mendapatkan kelas perangkat dan VID / PID, perangkat lunak host mencoba untuk mencocokkan informasi ini dalam registri perangkat, dan memuat driver DEVICE yang sesuai, baik yang generik, atau khusus vendor (jika ada). Driver perangkat kemudian menyelesaikan proses enumerasi dengan memilih antarmuka perangkat yang berakhir dengan pengaturan "konfigurasi perangkat". Jelas seluruh komunikasi USB hanya dikenali di balik port khusus ini , bahkan jika semua paket disiarkan ke semua port yang diaktifkan.
Di atas adalah kerangka umum protokol koneksi USB. Paket data untuk tujuan tertentu (seperti MIDI) adalah cerita yang berbeda, dan ditangani baik di tingkat aplikasi, atau di tingkat driver perangkat, jika sistem mendapatkan kelas perangkat yang tepat. Untuk mendapatkan komunikasi MIDI asli, perangkat harus memiliki kelas ini dalam deskriptornya dan mengikuti semua definisi kelas MIDI .
sumber