Panduan pengembangan perangkat USB
Daftar isi
- Latar belakang
- Apa itu USB?
- Kabel USB
- Hal yang perlu diperhatikan tentang USB-C
- Transmisi data melalui pasangan diferensial
- USB pada PCB
- Berbagai kecepatan USB
- Catatan singkat tentang kecepatan pada PCB
- Lapisan protokol dan perangkat lunak
- Kelas perangkat USB dan cara host menggunakannya
- Membuat perangkat port serial
- Mikrokontroler STM32 dan board Nucleo
- Konfigurasi port USB yang sebenarnya
- Menulis perangkat lunak
- Flashing dan menjalankan
- Kesimpulan
Latar belakang
- Perangkat USB berguna untuk memperluas fungsi komputer.
- Tujuan artikel ini adalah memandu proses pembuatan perangkat USB dari awal hingga akhir.
Apa itu USB?
- USB adalah standar industri untuk pertukaran data dan penyediaan daya.
- USB adalah bus serial, sehingga bit ditransmisikan satu per satu.
- USB bukan sekadar standar koneksi, tetapi juga mencakup protokol komunikasi.
Kabel USB
- Koneksi USB 2.0 memiliki 4 kabel utama:
- Kabel +5V: memasok daya dari host ke perangkat.
- Kabel
D- dan D+: mengirimkan 1 bit sebagai pasangan diferensial.
- Kabel
GND: berfungsi sebagai ground.
Hal yang perlu diperhatikan tentang USB-C
- USB-C dapat dihubungkan dua arah.
- USB-C tidak menunjukkan kecepatan atau versi.
Transmisi data melalui pasangan diferensial
- Pasangan diferensial menggunakan dua kabel untuk mengirim satu bit.
- Pasangan diferensial menguntungkan untuk menghilangkan noise tegangan.
USB pada PCB
- Saat menambahkan konektor USB ke PCB, panjang pasangan diferensial harus dijaga tetap sama.
- Jejak pasangan diferensial harus berdekatan satu sama lain.
- Impedansi tertentu harus dipertahankan.
Berbagai kecepatan USB
- USB 2.0 dapat beroperasi pada full speed (12 Mbit/s) dan high speed (480 Mbit/s).
- Host dan perangkat menegosiasikan kecepatan saat terhubung.
Catatan singkat tentang kecepatan pada PCB
- Pada full speed, persyaratan impedansi dan panjang jejak tidak perlu terlalu ketat.
Lapisan protokol dan perangkat lunak
- USB bekerja seperti jaringan dan memiliki berbagai endpoint serta konfigurasi.
- Host mengenali dan menggunakan perangkat USB melalui driver.
Kelas perangkat USB dan cara host menggunakannya
- Sistem operasi mengenali berbagai kelas perangkat USB.
- Misalnya, perangkat penyimpanan massal atau perangkat serial.
Membuat perangkat port serial
- Mari membuat perangkat port serial USB yang sederhana.
- Menggunakan mikrokontroler STM32 dan board Nucleo.
Mikrokontroler STM32 dan board Nucleo
- Menggunakan board NUCLEO-F103RB.
- Board terdiri dari programmer dan mikrokontroler.
Konfigurasi port USB yang sebenarnya
- Konfigurasikan port USB, lalu atur jumper agar menggunakan catu daya 5V eksternal.
- Atur pin
PA12 dan PA11 sebagai USB_DP dan USB_DM.
- Hubungkan resistor 1.5 kΩ ke pin
PA12 sebagai pull-up.
Menulis perangkat lunak
- Atur mode perangkat USB di STM32CubeIDE.
- Konfigurasikan sebagai perangkat port serial agar dikenali oleh host.
- Tulis kode untuk menyalakan LED di rutin
CDC_Receive_FS.
Flashing dan menjalankan
- Build kode dan flash ke board menggunakan STM32CubeProgrammer.
- Hubungkan board ke catu daya 5V eksternal, lalu kendalikan LED melalui port serial.
Kesimpulan
- Kita telah membuat perangkat port serial USB dari awal hingga akhir.
- Banyaknya kode boilerplate dan konfigurasi berbasis UI di STM32CubeIDE bisa terasa merepotkan.
- Menggunakan SoC berbasis Linux bisa menjadi pendekatan yang lebih rapi.
Opini GN⁺
- Kode boilerplate STM32CubeIDE: Banyak kode boilerplate yang dihasilkan sehingga code review bisa menjadi sulit.
- Pendekatan berbasis Linux: Dengan menggunakan Linux SoC, dimungkinkan API yang lebih terstandarisasi dan pemisahan kode yang lebih rapi.
- Impedansi dan panjang jejak: Untuk koneksi USB berkecepatan tinggi, perhatian terhadap impedansi dan panjang jejak diperlukan.
- Keunggulan pasangan diferensial: Pasangan diferensial unggul dalam menghilangkan noise tegangan sehingga memungkinkan transmisi data yang stabil.
- Pemilihan mikrokontroler: Penting untuk memilih mikrokontroler yang sesuai dengan proyek. Selain STM32, ada berbagai opsi lain.
1 komentar
Komentar Hacker News
Pendapat tentang penggunaan mikrokontroler ST: Ini tulisan yang bagus tentang penggunaan USB, tetapi terlalu berfokus pada mikrokontroler ST. Belakangan ini ekosistem ESP32 menawarkan pendekatan plug-and-play yang lebih mudah. Bagi pemula, menggunakan IC pengendali USB dasar lebih cocok daripada mengerjakan sesuatu yang berkecepatan tinggi.
Pengalaman dengan pengujian kepatuhan USB: Saat melakukan pengujian kepatuhan USB dulu, ada banyak masalah pada pengujian arus inrush. Mudah untuk terlalu fokus pada desain digital berkecepatan tinggi, tetapi dalam pengujian kepatuhan, detail kecil sangat penting.
Tips terkait USB-C: Pin CC harus dihubungkan ke resistor yang sesuai. Pada USB 2.0, routing diferensial dan impedansi bukan masalah besar. Cukup hubungkan secara langsung dengan panjang yang kurang lebih sama.
Usulan alternatif STM32: Jika menyolder prosesor ARM terasa sulit, patut dipertimbangkan juga penggunaan pengendali kecil atau pustaka VUSB. Jika Anda menyukai pemrograman gaya Arduino, banyak board dapat dengan mudah digunakan sebagai perangkat USB.
ESP32 dan cara hacking murah: Saya terutama menggunakan ESP32, tetapi papan kontrol dari keyboard USB bekas dapat dimanfaatkan untuk membuat pengendali kustom yang murah dan kokoh.
Dukungan penerimaan lebih dari 64 byte pada STM32: Ada pertanyaan tentang cara menerima frame yang lebih besar dari 64 byte. Pengaturan yang dijelaskan di reference manual bukan register umum, sehingga cukup membingungkan.
Pengalaman menulis kode USB bare-metal: Menulis kode USB bare-metal pada MCU lebih rumit daripada SPI atau I2C. Sebaiknya manfaatkan semaksimal mungkin perangkat lunak yang disediakan vendor. Untuk transfer berkecepatan tinggi, gunakan bulk transfer, dan periksa juga masalah di sisi host.
Membuat perangkat USB virtual: Menggunakan Raspberry Pi untuk membuat perangkat USB virtual lalu menghubungkannya ke PC. Ini digunakan untuk mengemulasi kamera MTP agar dapat mengecoh perangkat lunak.
Pertanyaan tentang board pengembangan yang mendukung USB 3: Saya ingin membuat prototipe sink monitor USB C, tetapi sulit menemukan board yang memiliki daya komputasi untuk menerima DisplayPort.
Biaya penggunaan USB: USB tidak gratis. Anda harus membayar biaya satu kali sebesar $6,000 untuk mendapatkan vendor ID.