Di mana tepatnya spesifikasi USB yang menjelaskan apa yang harus dilakukan ketika kabel pertama kali dihubungkan?

15

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.

robert bristow-johnson
sumber
1
Jadi Anda hanya ingin tahu tentang apa yang dilakukan FTDI FT220x di belakang layar, kan? Karena FTDI menangani banyak hal USB untuk Anda, ada juga beberapa batasan untuk apa yang akan Anda lakukan. Saya telah menggunakan keluarga FT2232H untuk sementara, akan mencoba menjelaskan apa yang saya tahu ...
MarkU
Apa yang akhirnya saya coba lakukan adalah menggunakan port USB ini yang sudah cukup pintar untuk mengirim teks bolak-balik ke PC yang menjalankan TeraTerm, yang saya harapkan lakukan adalah menggunakan konektor USB yang sama untuk melakukan USB MIDI. saya perlu memahami bagaimana "mengemas" data menjadi paket 32-bit, tetapi saya pikir (dan masih berpikir) bahwa harus ada beberapa protokol yang memberitahu ujung lain bahwa ini adalah perangkat USB MIDI. (sejauh ini, saya hanya tidak menguasai USB penting dan jawaban Anda tampaknya sangat membantu untuk membuat saya pergi.)
robert bristow-johnson

Jawaban:

21

USB memiliki beberapa lapisan, yang dijelaskan dalam Spesifikasi USB 2.0 . Jika Anda terbiasa dengan model jaringan berlapis OSI, Anda dapat menganggapnya seperti ini:

  • Lapisan sesi = Bab 10 Perangkat Keras dan Perangkat Lunak Host USB (driver perangkat)
  • Transport layer = Bab 9 Kerangka Perangkat USB
  • Lapisan jaringan = Bab 8 Lapisan Protokol (bitstream)
  • Lapisan Data Link = Bab 7 Listrik (sirkuit)
  • Lapisan fisik = Bab 6 Mekanis (kabel dan konektor)

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.

MarkU
sumber
6
Saya suka ringkasannya. Saya harus membaca THE SELURUH spec 2.0 (lebih dari 1000 halaman seingat saya) selama beberapa minggu karena saya harus mencari tahu semua omong kosong ini sendiri. Itu BUKAN pengalaman yang menyenangkan, harus saya katakan. (Tidak dapat menggunakan HID dalam kasus saya.) Juga tidak ada buku bagus tentang topik ini. Saya benci buku Jan Axelson tentang USB dan menganggap bukunya "hampir sama sekali tidak berguna" bagi seseorang yang mencoba melakukan pekerjaan ini sebagai mikro tertanam dari bawah ke atas. Sebenarnya sebagian besar tidak berharga, juga. Jika Anda tahu buku bagus untuk pelaksana (perangkat keras khusus), saya akan senang mendengar judulnya !! +1
Jonk
1
Bergantung pada pasar potensial Op, VID / PID adalah tantangan terbesar. Menggunakan metodologi Axelsons bekerja dalam arti Anda dapat menggunakan VID-nya (yang biayanya $ 3.5k untuk Anda sendiri) dan meminta satu atau lebih PID-nya secara gratis. Anda juga dapat meminta PID dari organisasi seperti Microchip / Atmel, FTDI dan TI (berdasarkan VID mereka). Buku IMO terbaik adalah Intels "USB design by example", ini agak panjang, tetapi bagus untuk USB 2.x. Sayangnya banyak contoh kode rusak karena perubahan dalam Visual Studio melalui revisinya.
Jack Creasey
1
Cara terbaik untuk mendapatkan akses ke VID / PID untuk penghobi adalah dengan menggunakan LUFA (yang gratis): fourwalledcubicle.com/files/LUFA/Doc/130303/html/… ..... ini tidak dapat digunakan dalam produk komersial tetapi bagus untuk digunakan di rumah / demo di mana Anda dapat mengontrol tabrakan secara luas.
Jack Creasey
1
PS. Pengantar yang bagus adalah dengan menggunakan "desain USB Tertanam dengan contoh: yang dirilis FTDI: ftdichip.com/Support/Documents/TechnicalPublications/ ... ... ini memiliki banyak contoh berguna (tentu saja berdasarkan perangkat FTDI) dan semua yang terkait file kerja termasuk penggunaan pengontrol PSOC
Jack Creasey
1
Perhatikan bahwa jika perangkat USB swadaya, ia harus menunggu sampai tegangan VBUS terdeteksi sebelum menerapkan resistor pull-up D + atau D. Saya gagal sertifikasi karena ini.
Adam Haun
4

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 .

Ale..chenski
sumber