Timbunan Peranti USB
Spesifikasi
- Versi USB: 1.5.1
- Tarikh Tayangan: 21 Julai 2025
- Versi SDK Kesederhanaan: 2025.6.1
Produk Selesaiview
Timbunan peranti USB oleh Silicon Labs menyediakan serba boleh dan
sambungan USB yang mudah digunakan untuk projek IoT, memudahkan
komunikasi antara pemproses bersama rangkaian dan hos.
Ciri-ciri
- Timbunan peranti USB yang cekap
- Sesuai untuk projek IoT
- Sokongan untuk komunikasi antara pemproses bersama rangkaian dan
tuan rumah
Arahan Penggunaan Produk
Konfigurasi Peranti USB
Konfigurasikan tetapan peranti USB mengikut projek anda
keperluan dengan merujuk kepada bahagian Konfigurasi Peranti USB
dalam dokumentasi.
Panduan Pengaturcaraan Peranti USB
Ikuti Panduan Pengaturcaraan Peranti USB untuk memahami cara
atur cara dan berinteraksi dengan peranti USB untuk pelbagai
aplikasi.
Kelas Peranti USB
Bahagian Kelas Peranti USB memberikan tamatview daripada berbeza
kelas seperti CDC ACM, HID, MSC SCSI dan Kelas Vendor. Pilih yang
kelas yang sesuai berdasarkan kefungsian peranti anda.
Penyelesaian Masalah Peranti USB
Jika anda menghadapi sebarang masalah dengan peranti USB, rujuk kepada
Bahagian Penyelesaian Masalah Peranti USB untuk penyelesaian dan penyahpepijatan
petua.
Hos USB OS Windows Microsoft
Jika anda menggunakan peranti USB dengan USB OS Microsoft Windows
Hos, pastikan anda mengikuti garis panduan yang disediakan dalam
dokumentasi untuk penyepaduan yang lancar.
Soalan Lazim
S: Apakah beberapa contoh biasaampsedikit peranti yang boleh saya bina menggunakan
timbunan USB ini?
J: Tindanan USB membolehkan anda membina peranti seperti
Penyesuai USB-ke-siri, tetikus atau papan kekunci, storan boleh tanggal
peranti, dan peranti tersuai.
S: Adakah terdapat sebarang keperluan perisian khusus untuk menggunakan ini
Timbunan peranti USB?
J: Perisian yang serasi termasuk Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (The GNU Compiler Collection),
Meja Kerja Terbenam IAR untuk ARM dan IAR EWARM.
USB Bas Bersiri Universal
USB Bas Bersiri Universal
USB Overview Berakhirview
Nota Keluaran USB
Spesifikasi dan Ciri Lebihview
Konfigurasi Peranti USB Selesaiview
Panduan Pengaturcaraan Peranti USBview
Kelas Peranti USB Berakhirview Tamat Kelas ACM CDCview Kelas HID Tamatview Tamat Kelas MSC SCSIview Kelas Vendor Tamatview
Dokumentasi API USB API Peranti USB API ACM Peranti USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t API Peranti USB CDC a sl_usbd_cdc_subcl ss_driver_t API Teras Peranti USB
sl_usbd_device_config_t sl_usbd_setup_req_t
a sl_usbd_cl ss_driver_t USB Device HID API
sl_usbd_hid_callbacks_t API MSC Peranti USB
a sl_usbd_msc_subcl ss_driver_t Peranti USB MSC SCSI API
sl_usbd_msc_scsi_callbacks_t
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
1/174
USB Bas Bersiri Universal
a sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API Penjual Peranti USB sl_usbd_vendor_callbacks_t
Dokumentasi API Penyelesaian Masalah Peranti USB
Berakhirview Hos USB OS Windows Microsoft
Berakhirview
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
2/174
Berakhirview
Berakhirview
Peranti USB
USB ialah salah satu antara muka komunikasi yang paling berjaya dalam sejarah sistem komputer dan merupakan piawaian de facto untuk menyambungkan peranti komputer. Tindanan Peranti USB Silicon Labs ialah modul peranti USB yang direka khusus untuk sistem terbenam. Dibina dari bawah dengan kualiti, skalabiliti dan kebolehpercayaan Silicon Labs, ia telah melalui proses pengesahan yang ketat untuk mematuhi spesifikasi USB 2.0. Dokumentasi ini menerangkan cara untuk memulakan, memulakan dan menggunakan timbunan Peranti USB Silicon Labs. Ia menerangkan pelbagai nilai konfigurasi dan kegunaannya. Ia juga termasuk overview teknologi, jenis kemungkinan konfigurasi, prosedur pelaksanaan dan exampkurang penggunaan biasa untuk setiap kelas yang ada.
Untuk membantu anda memahami konsep USB dengan cepat, dokumentasi menampilkan banyak contohamples USB dengan fungsi asas. Bekas iniamples akan memberikan anda rangka kerja yang membolehkan anda membina peranti dengan cepat. Bekas iniamples termasuk:
Penyesuai USB-ke-siri (Kelas Peranti Komunikasi) Tetikus atau papan kekunci (Kelas Peranti Antara Muka Manusia) Peranti storan boleh tanggal (Kelas Storan Massa) Peranti tersuai (Kelas Vendor)
Berikut adalah tamatview daripada bahagian dokumentasi:
Spesifikasi dan Ciri Konfigurasi Peranti USB Panduan Pengaturcaraan Peranti USB Kelas Peranti USB
Kelas CDC ACM Kelas HID Kelas MSC SCSI Kelas Vendor Kelas USB Penyelesaian Masalah Peranti Microsoft Windows OS USB Host
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
3/174
USB
USB
USB Versi 1.5.1 21 Julai 2025 – Nota Keluaran
Simplicity SDK Versi 2025.6.1
Tindanan peranti USB yang cekap Silicon Labs menawarkan sambungan USB yang serba boleh dan mudah digunakan yang sesuai untuk projek IoT, termasuk komunikasi antara pemproses bersama rangkaian dan hos. Klik di sini untuk keluaran terdahulu.
Ringkasan Pelepasan
Ciri Utama | Perubahan API | Pembetulan Pepijat | Pengdayaan Cip
Ciri-ciri Utama
Perubahan platform asas sahaja.
Perubahan API
tiada.
Pembetulan Pepijat
tiada.
Pengdayaan Cip
tiada.
Ciri-ciri Utama
Ciri Baharu | Penambahbaikan | Ciri Dialih Keluar | Ciri Dihentikan
Ciri Baharu
tiada.
Penambahbaikan
Perubahan platform asas sahaja.
Ciri Dialih Keluar
tiada.
Ciri Dihentikan
tiada.
Perubahan API
API baharu | API yang diubah suai | API yang dialih keluar | API yang ditamatkan
API baharu
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
4/174
USB
tiada.
API yang diubah suai
tiada.
API yang dialih keluar
tiada.
API yang ditamatkan
tiada.
Pembetulan Pepijat
tiada.
Pengdayaan Cip
tiada.
Permohonan Cthample Perubahan
Bekas Baruamples | Diubah suai Cthamples | Dialih keluar Cthamples | Dihentikan Cthamples
Bekas Baruamples
tiada.
Diubah suai Cthamples
tiada.
Dialih keluar Cthamples
tiada.
Dihentikan Cthamples
tiada.
Kesan Perubahan Keluaran
Kenyataan Kesan | Panduan Migrasi
Kenyataan Kesan
tiada.
Panduan Penghijrahan
tiada.
Isu dan Had yang Diketahui
tiada.
Menggunakan Keluaran Ini
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
5/174
USB
Apa yang ada dalam Keluaran? | Perisian Serasi | Pemasangan dan Penggunaan | Bantuan dan Maklum Balas
Apa yang ada dalam Keluaran?
Aplikasi Timbunan Peranti USB Cthamples
Perisian yang Serasi
Perisian
Simplicity SDK Simplicity Studio Simplicity Commander GCC The GNU Compiler Collection) Meja Kerja Terbenam IAR untuk ARM IAR EWARM
Versi atau Varian yang Serasi
2025.6.0 5.11.0 1.18.2 (disediakan dengan Simplicity Studio) 12.2.1 (disediakan dengan Simplicity Studio) 9.40.1 (disediakan dengan Simplicity Studio)
Pemasangan dan Penggunaan
Untuk memulakan pembangunan anda lihat kami:
Panduan Pengaturcaraan Peranti USB. Dokumentasi API.
Untuk maklumat tentang Penyepaduan Bilik Kebal Selamat, lihat Bilik Kebal Selamat.
Untuk kembaliview Pemberitahuan Nasihat Keselamatan dan Perisian dan uruskan pilihan pemberitahuan anda:
ò Pergi ke https://community.silabs.com/. ó Log masuk dengan kelayakan akaun anda. ô Klik pro andafile ikon di penjuru kanan sebelah atas halaman.
õ Pilih Pemberitahuan daripada menu lungsur turun. ö Dalam bahagian Pemberitahuan, pergi ke tab Pemberitahuan Produk Saya untuk semulaview Sejarah Keselamatan dan Nasihat Perisian
pemberitahuan
÷ Untuk mengurus pilihan anda, gunakan tab Urus Pemberitahuan untuk menyesuaikan kemas kini produk dan nasihat anda
menerima.
Untuk tetapan konfigurasi yang disyorkan, lihat di sini.
Untuk mengetahui lebih lanjut tentang perisian dalam keluaran ini, selami dokumentasi dalam talian kami.
Bantuan dan Maklum Balas
Hubungi Sokongan Silicon Labs. Untuk menggunakan alat Ask AI kami untuk mendapatkan jawapan, lihat medan carian di bahagian atas halaman ini.
Nota: Ask AI adalah percubaan.
Dapatkan bantuan daripada komuniti pembangun kami.
Dasar Pengeluaran dan Penyelenggaraan SDK
Lihat Dasar Keluaran dan Penyelenggaraan SDK kami.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
6/174
Berakhirview
Berakhirview
Spesifikasi
Mematuhi "semakan spesifikasi Bas Bersiri Universal 2.0" Melaksanakan jenis Pemindahan "Notis Perubahan Kejuruteraan Deskriptor Persatuan Antaramuka (ECN)"
Kawal Kelas USB Gangguan Pukal Kelas Peranti Komunikasi (CDC) Model Kawalan Abstrak (ACM) Peranti Antara Muka Manusia (HID) Kelas Penyimpanan Massa (MSC) Rangka kerja kelas khusus vendor
Ciri-ciri
Boleh berskala untuk memasukkan hanya ciri yang diperlukan untuk meminimumkan jejak memori Menyokong kelajuan penuh (12 Mbit/s) Menyokong peranti komposit (berbilang fungsi) Menyokong peranti berbilang konfigurasi Menyokong fungsi penjimatan kuasa USB (menggantung peranti dan menyambung semula) Penyepaduan lengkap Kelas Storan Massa ke dalam OS Micrium File Modul sistem Dibangunkan dengan lapisan abstraksi CMSIS-RTOS2 supaya ia boleh berfungsi dengan OS yang berbeza. Silicon Labs GSDK disertakan dengan port FreeRTOS dan Micrium OS.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
7/174
Berakhirview
Berakhirview
Konfigurasi Peranti USB
Bahagian ini membincangkan cara mengkonfigurasi Peranti USB Silicon Labs. Terdapat tiga kumpulan parameter konfigurasi, seperti berikut:
Konfigurasi Teras Peranti USB Konfigurasi Maklumat Peranti USB Konfigurasi Perkakasan Peranti USB
Konfigurasi Teras Peranti USB
Peranti USB Silicon Labs boleh dikonfigurasikan pada masa penyusunan melalui set #defines yang terdapat dalam sl_usbd_core_config.h file. Peranti USB menggunakan #defines apabila boleh kerana ia membenarkan kod dan saiz data diskalakan pada masa penyusunan berdasarkan ciri yang didayakan. Ini membolehkan jejak memori baca sahaja (ROM) dan memori akses rawak (RAM) Peranti USB Silicon Labs dilaraskan berdasarkan keperluan aplikasi anda.
Disyorkan: Mulakan proses konfigurasi dengan nilai lalai (diserlahkan dalam huruf tebal).
Bahagian di bawah disusun berdasarkan susunan dalam konfigurasi templat file, sl_usbd_core_config.h.
Konfigurasi Kelas Konfigurasi Teras
Konfigurasi Teras
Jadual – Pemalar Konfigurasi Teras Peranti USB
Penerangan Malar
Nilai Lalai
SL_USBD_TA SK_STACK_ SAIZ
Mengkonfigurasikan saiz tindanan dalam bait tugas teras USBD
4096
SL_USBD_TA SK_PRIORIT Y
Mengkonfigurasikan keutamaan tugas teras USBD. Ini adalah keutamaan CMSIS-RTOS2.
osPriorityHigh
SL_USBD_A UTO_START _USB_DEVIC E
Jika didayakan, peranti USB akan dimulakan secara automatik sebaik sahaja kernel dimulakan dan 1 tugas teras USBD dijadualkan buat kali pertama. Jika dilumpuhkan, aplikasi anda perlu memanggil sl_usbd_core_start_device() apabila bersedia untuk dikesan oleh hos USB.
SL_USBD_C Jumlah bilangan konfigurasi yang akan ditambah melalui sl_usbd_add_configuration()
1
Fungsi ONFIGURATI.
ON_QUANTI
TY
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
8/174
Berakhirview
tetap
SL_USBD _INTERF ACE_QU ANTITI
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITI
SL_USBD _DESCRI
PTOR_Q
UANTITI
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY
Perihalan Jumlah bilangan antara muka USB yang akan ditambah untuk semua konfigurasi anda. Ini sangat bergantung pada kelas yang digunakan. Untuk mendapatkan maklumat lanjut tentang bilangan antara muka yang diperlukan oleh contoh kelas, rujuk bahagian "Keperluan Sumber daripada teras" kelas anda.
Jumlah bilangan antara muka ganti USB yang akan ditambah untuk semua konfigurasi anda. Ini sangat bergantung pada kelas yang digunakan. Nilai ini mesti sentiasa sama atau lebih besar daripada SL_USBD_INTERFACE_QUANTITY . Untuk mendapatkan maklumat lanjut tentang bilangan antara muka ganti yang diperlukan oleh contoh kelas, rujuk bahagian "Keperluan Sumber daripada Teras" kelas anda.
Jumlah kumpulan antara muka USB yang akan ditambahkan untuk semua konfigurasi anda. Ini sangat bergantung pada kelas yang digunakan. Untuk mendapatkan maklumat lanjut tentang bilangan kumpulan antara muka yang memerlukan contoh kelas, rujuk bahagian "Keperluan Sumber daripada Teras" kelas anda.
Jumlah bilangan deskriptor Endpoint yang akan ditambahkan untuk semua konfigurasi anda. Ini sangat bergantung pada kelas yang digunakan. Untuk mendapatkan maklumat lanjut tentang bilangan deskriptor titik akhir yang diperlukan oleh contoh kelas, rujuk kepada "Bilangan titik akhir" dalam bahagian "Keperluan Sumber daripada Teras" kelas anda. Ambil perhatian bahawa titik akhir kawalan tidak perlu dipertimbangkan di sini. Jumlah bilangan rentetan USB. Menetapkan kuantiti kepada sifar akan melumpuhkan ciri tersebut. Melumpuhkan ini akan menyebabkan peranti tidak menyimpan sebarang rentetan penerangan USB yang diluluskan daripada aplikasi. Ini bermakna hos tidak akan dapat mendapatkan rentetan penerangan (seperti pengilang dan nama produk). Jumlah bilangan titik akhir yang dibuka setiap konfigurasi. Peranti memerlukan sekurang-kurangnya dua titik akhir yang dibuka untuk pemindahan kawalan, tetapi anda juga mesti menambah titik akhir kelas yang digunakan. Untuk mendapatkan maklumat lanjut tentang bilangan titik akhir yang dibuka yang diperlukan oleh contoh kelas, rujuk kepada "Bilangan titik akhir" dalam bahagian "Keperluan Sumber daripada Teras" kelas anda.
Nilai Lalai
10 10
2
20 30 20
Konfigurasi Kelas
Kelas mempunyai konfigurasi masa kompilasi khusus. Rujuk Kelas Peranti USB untuk maklumat lanjut.
Konfigurasi Maklumat Peranti USB
Konfigurasi sl_usbd_device_config.h file mengumpulkan semula masa kompilasi #define-s untuk menetapkan maklumat asas berkenaan peranti anda, seperti Vendor/ID Produk, rentetan peranti, dsb. Jadual di bawah menerangkan setiap takrifan maklumat yang tersedia dalam konfigurasi ini file.
Jadual – Konfigurasi Maklumat Peranti USB Mentakrifkan
tetap
SL_USBD_DEVIC E_VENDOR_ID
SL_USBD_DEVIC E_PRODUCT_ID
Perihalan Nombor pengenalan vendor anda seperti yang dihantar oleh Forum Pelaksana USB. Untuk mendapatkan maklumat lanjut tentang cara anda boleh mendapatkan ID vendor, lihat http://www.usb.org/developers/vendor/ . Nombor pengenalan produk anda.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
9/174
Berakhirview
tetap
Penerangan
SL_USBD_DEVICE_RELEASE Nombor keluaran peranti anda. _NUMBER
SL_USBD_DEVICE_MANUFA Rentetan yang menerangkan pengilang peranti anda. Konfigurasi ini diabaikan apabila
CTURER_STRING
konfigurasi SL_USBD_STRING_QUANTITY ditetapkan kepada 0.
Rentetan SL_USBD_DEVICE_PRODUC yang menerangkan produk anda. Konfigurasi ini diabaikan apabila konfigurasi
T_STRING
SL_USBD_STRING_QUANTITY ditetapkan kepada 0.
Rentetan SL_USBD_DEVICE_SERIAL_N yang mengandungi nombor siri peranti anda. Konfigurasi ini diabaikan apabila
UMBER_STRING
konfigurasi SL_USBD_STRING_QUANTITY ditetapkan kepada 0.
SL_USBD_DEVICE_LANGUA Nombor pengenalan bahasa rentetan peranti anda. Nilai yang mungkin adalah:
GE_ID
– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA
– SL_USBD_LANG_ID_CHINESE_TAIWAN
– SL_USBD_LANG_ID_ENGLISH_US
– SL_USBD_LANG_ID_ENGLISH_UK
– SL_USBD_LANG_ID_FRENCH
– SL_USBD_LANG_ID_GERMAN
– SL_USBD_LANG_ID_GREEK
– SL_USBD_LANG_ID_ITALIAN
– SL_USBD_LANG_ID_PORTUGUESE
– SL_USBD_LANG_ID_SANSKRIT
Konfigurasi ini diabaikan apabila konfigurasi SL_USBD_STRING_QUANTITY ditetapkan kepada 0.
Konfigurasi Perkakasan Peranti USB
Bergantung pada peranti Silicon Labs yang anda gunakan, anda mungkin mempunyai pin dan port GPIO untuk mengkonfigurasi isyarat USB VBUS Sense. Takrifan konfigurasi terdapat dalam pengepala sl_usbd_hardware_config.h file.
tetap
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN
Penerangan
Port GPIO untuk isyarat USB VBUS Sense pada papan anda. Pin GPIO untuk isyarat USB VBUS Sense pada papan anda.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
10/174
Berakhirview
Berakhirview
Panduan Pengaturcaraan Peranti USB
Bahagian ini menerangkan cara menggunakan modul Peranti USB.
Persediaan Awal Modul Peranti USB
Bahagian ini menerangkan langkah asas yang diperlukan untuk memulakan modul Peranti USB dan untuk menambah, menyediakan dan memulakan peranti. Memulakan Modul Peranti USB Memulakan Teras Peranti USB Memulakan aCl ss(es) Menambah Peranti USB Anda Membina Peranti USB Anda Menambah Konfigurasi Menambah Fungsi USB Memulakan Peranti USB Anda
Fungsi Cangkuk Acara
Memulakan Modul Peranti USB
Memulakan Teras Peranti USB
a AS Mulakan dengan memulakan teras modul peranti B dengan menggunakan fungsi sl_usbd_core_init() . T aa dia contoh di bawah menunjukkan c lling sl_usbd_core_init() .
Example – Memanggil sl_usbd_core_init()
status sl_status_t; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Memulakan Kelas
Selepas teras modul peranti USB telah dimulakan, anda mesti memulakan setiap kelas yang anda ingin gunakan. Lihat bahagian "Panduan Pengaturcaraan" acl ss(es) anda untuk mendapatkan maklumat lanjut.
Membina Peranti USB Anda
Menambah Konfigurasi
Selepas anda berjaya memulakan peranti anda, anda boleh mula menambahkan fungsi USB padanya, bermula dengan konfigurasi baharu. Peranti mesti mempunyai sekurang-kurangnya satu konfigurasi. Untuk menambah konfigurasi, panggil fungsi aa sl_usbd_core_ dd_configur tion() fungsi. Fungsi ini mesti dipanggil untuk setiap konfigurasi yang anda mahu tambah. bekas ituampdi bawah menunjukkan cara menambah kelajuan Penuh.
Example – Menambah Konfigurasi pada Peranti Anda
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
11/174
Berakhirview
status sl_status_t; uint8_t config_nbr_fs;
/* Menambah konfigurasi berkelajuan penuh pada peranti. */
status = sl_usbd_core_add_configuration(0,
/* Tiada atribut khas pada konfigurasi. */
100u,
/* Penggunaan kuasa maksimum: 100mA.
*/
SL_USBD_DEVICE_SPEED_FULL,
/* Konfigurasi Kelajuan Penuh.
*/
“Config Add Example konfigurasi Kelajuan Penuh",
&config_nbr_fs);
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Menambah Fungsi USB
Selepas anda berjaya menambahkan sekurang-kurangnya satu konfigurasi pada peranti anda, anda boleh menambah antara muka dan titik akhir pada peranti anda. Setiap kelas USB mempunyai keperluannya sendiri dari segi antara muka dan jenis titik akhir, kuantiti dan parameter lain. Peranti USB Silicon Labs menambah antara muka dan titik akhir dalam kelas yang ditawarkannya.
Daripada aplikasi anda, anda boleh membuat instantiate kelas USB dan menambahkannya pada konfigurasi. Untuk mendapatkan maklumat lanjut tentang konsep contoh kelas peranti USB, lihat Kelas Peranti USB. Ambil perhatian bahawa anda boleh membuat instantiate dan menambah banyak contoh kelas yang berbeza pada konfigurasi untuk mencipta peranti berbilang fungsi (komposit).
bekas ituample di bawah menunjukkan cara membuat contoh kelas dan menambahnya pada konfigurasi.
Example – Menambahkan Contoh Kelas pada Peranti Anda
status sl_status_t; uint8_t class_nbr;
/* Buat contoh kelas yang anda mahu gunakan.*/ /* Ambil perhatian bahawa bergantung pada kelas fungsi ini boleh mempunyai lebih banyak hujah. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
/* Tambahkan contoh kelas pada konfigurasi Kelajuan Penuh. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Nombor kelas dikembalikan oleh sl_usbd_ _create_instance. */
config_nbr_fs); /* Nombor konfigurasi dikembalikan oleh sl_usbd_core_add_configuration(). */ jika (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
Memulakan Peranti USB Anda
Secara lalai, peranti akan dimulakan secara automatik oleh tugas teras peranti USB selepas permulaan peranti selesai dan kernel dimulakan. Untuk mengawal masa peranti dimulakan dan menjadi kelihatan oleh hos USB, gunakan tetapan konfigurasi SL_USBD_AUTO_START_USB_DEVICE untuk melumpuhkan ciri automula. Apabila dilumpuhkan, selepas anda membina/menyediakan peranti anda, anda boleh memulakannya dan menjadikannya kelihatan kepada hos USB dengan memanggil fungsi sl_usbd_core_start_device() .
bekas ituampdi bawah menunjukkan cara untuk memulakan peranti anda menggunakan fungsi sl_usbd_core_start_device().
Example – Memulakan Peranti Anda
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
12/174
Berakhirview
status sl_status_t;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
Fungsi Cangkuk Acara
Modul teras Peranti USB menawarkan dua fungsi cangkuk lemah yang boleh anda tentukan semula dalam aplikasi anda. Tujuan mereka adalah untuk memberitahu apabila peristiwa bas dan konfigurasi berlaku.
Jadual – Fungsi Cangkuk Acara USB
Peristiwa
Penerangan
Bas
Dipanggil apabila acara Bas USB berlaku
Konfigurasi Dipanggil apabila peristiwa Konfigurasi USB berlaku
Tandatangan Fungsi
batalkan sl_usbd_on_bus_event(sl_usbd_bus_event_t event); batalkan sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr);
Example – Fungsi Cangkuk Acara
batalkan sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { suis (event) { case SL_USBD_EVENT_BUS_CONNECT:
// dipanggil apabila kabel USB dimasukkan dalam rehat pengawal hos;
kes SL_USBD_EVENT_BUS_DISCONNECT: // dipanggil apabila kabel USB dialih keluar daripada pecah pengawal hos;
kes SL_USBD_EVENT_BUS_RESET: // dipanggil apabila hos menghantar pemecahan arahan set semula;
kes SL_USBD_EVENT_BUS_SUSPEND: // dipanggil apabila hos menghantar pemecahan perintah penggantungan;
kes SL_USBD_EVENT_BUS_RESUME: // dipanggil apabila hos menghantar wake up command break;
lalai: break; } }
batalkan sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr) { suis (event) { case SL_USBD_EVENT_CONFIG_SET:
// dipanggil apabila hos menetapkan rehat konfigurasi;
kes SL_USBD_EVENT_CONFIG_UNSET: // dipanggil apabila konfigurasi tidak ditetapkan putus;
lalai: break; } }
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
13/174
Berakhirview
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
14/174
Berakhirview
Berakhirview
Kelas Peranti USB
Kelas USB yang tersedia dalam Peranti USB Silicon Labs berkongsi beberapa ciri biasa. Bahagian ini menerangkan ciri-ciri ini dan interaksinya dengan lapisan teras.
Untuk maklumat lanjut tentang kelas tertentu, lihat yang berikut:
Kelas CDC ACM Kelas HID Kelas MSC SCSI Kelas Vendor
Perihal Contoh Kelas
Kelas USB yang tersedia dalam Peranti USB melaksanakan konsep contoh kelas. Contoh kelas mewakili satu fungsi dalam peranti. Fungsi ini boleh diterangkan oleh satu antara muka atau oleh sekumpulan antara muka dan tergolong dalam kelas tertentu.
Setiap pelaksanaan kelas USB mempunyai beberapa konfigurasi dan fungsi yang sama, berdasarkan konsep contoh kelas. Konfigurasi dan fungsi biasa dibentangkan dalam jadual di bawah. Dalam tajuk lajur 'Pemalar atau Fungsi', pemegang tempat XXXX boleh digantikan dengan nama kelas: CDC, HID, MSC, CDC_ACM atau VENDOR (Vendor untuk nama fungsi).
Jadual – Pemalar dan Fungsi Berkaitan dengan Konsep Kejadian Berbilang Kelas
Malar atau Fungsi
SL_USBD_XXXX_CL ASS_IN TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_cre makan _insta nce ()
sl_usbd_XXXX_add_to_conf iguration()
Penerangan
Mengkonfigurasikan bilangan maksimum contoh kelas.
Mengkonfigurasi bilangan maksimum konfigurasi. Semasa permulaan kelas, tika kelas yang dicipta akan ditambahkan pada satu atau lebih konfigurasi. Mencipta contoh kelas baharu.
Menambahkan contoh kelas sedia ada pada konfigurasi peranti yang ditentukan.
Dari segi pelaksanaan kod, kelas akan mengisytiharkan pembolehubah global tempatan yang mengandungi struktur kawalan kelas. Struktur kawalan kelas ini dikaitkan dengan satu tika kelas dan akan mengandungi maklumat khusus untuk mengurus tika kelas.
Angka berikut menunjukkan beberapa senario kes. Setiap angka termasuk kod example yang sepadan dengan senario kes.
Rajah – Contoh Berbilang Kelas – Peranti FS (1 Konfigurasi dengan 1 Antara Muka) mewakili peranti USB biasa. Peranti ini adalah Kelajuan Penuh (FS) dan mengandungi satu konfigurasi. Fungsi peranti diterangkan oleh satu antara muka yang terdiri daripada sepasang titik akhir untuk komunikasi data. Satu contoh kelas dibuat dan akan membolehkan anda mengurus keseluruhan antara muka dengan titik akhir yang berkaitan.
Rajah – Contoh Kelas Berbilang – Konfigurasi Peranti FS 1 dengan 1 Antara Muka)
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
15/174
Berakhirview
Kod yang sepadan dengan Rajah – Contoh Kelas Berbilang – Peranti FS (1 Konfigurasi dengan 1 Antara Muka) ditunjukkan dalam bekasample di bawah.
Example – Contoh Kelas Berbilang – Konfigurasi Peranti FS 1 dengan 1 Antara Muka)
status sl_status_t; uint8_t class_0;
void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Mengendalikan acara membolehkan Kelas. */ }
void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Mengendalikan acara melumpuhkan Kelas. */ }
sl_usbd_XXXX_callbacks_t class_callbacks = {
(1)
.enable = app_usbd_XXXX_enable,
.disable = app_usbd_XXXX_disable
};
status = sl_usbd_XXXX_init();
(2)
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
status = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&class_0);
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
status = sl_usbd_XXXX_add_to_configuration(class_0, config_0);
(4)
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
(1) Setiap kelas menawarkan satu set fungsi panggil balik untuk acara menyambung/putus sambungan peranti dan untuk acara khusus kelas. Objek struktur panggil balik diluluskan sebagai hujah apabila membuat contoh kelas dengan sl_usbd_XXXX_create_instance()
fungsi.
(1) Mulakan kelas. Semua pembolehubah dalaman, struktur dan port kelas akan dimulakan. Ambil perhatian bahawa fungsi Init() dalam sesetengah kelas mungkin mengambil argumen lain.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
16/174
Berakhirview
(2) Buat contoh kelas, iaitu class_0 . Fungsi sl_usbd_XXXX_create_instance() memperuntukkan struktur kawalan kelas yang dikaitkan dengan class_0 . Bergantung pada kelas, sl_usbd_XXXX_create_instance() mungkin mempunyai parameter tambahan selain daripada nombor kelas yang mewakili maklumat khusus kelas yang disimpan dalam struktur kawalan kelas. aaa (3) Tambahkan cl ss inst nce, class_0 , kepada nombor konfigurasi yang ditentukan, config_0 . sl_usbd_XXXX_add_to_configuration() akan mencipta antara muka 0 dan titik akhir IN dan OUT yang berkaitan. Akibatnya, contoh kelas merangkumi antara muka 0 dan titik akhirnya. Sebarang komunikasi yang dilakukan pada antara muka 0 akan menggunakan nombor contoh kelas, class_0 . Rajah – Contoh Berbilang Kelas – Peranti FS (2 Konfigurasi dan Pelbagai Antara Muka) mewakili bekas yang lebih kompleksample. Peranti berkelajuan penuh terdiri daripada dua konfigurasi. Peranti ini mempunyai dua fungsi yang tergolong dalam kelas yang sama, tetapi setiap fungsi diterangkan oleh dua antara muka dan mempunyai sepasang titik akhir dwiarah. Dalam bekas iniampOleh itu, dua contoh kelas dicipta. Setiap tika kelas dikaitkan dengan sekumpulan antara muka yang bertentangan dengan Rajah - Kejadian Berbilang Kelas - Peranti FS (1 Konfigurasi dengan 1 Antara Muka) dan Rajah - Kejadian Berbilang Kelas - Peranti FS (2 Konfigurasi dan Berbilang Antara Muka) di mana tika kelas dikaitkan dengan antara muka tunggal.
Rajah – Contoh Berbilang Kelas – Konfigurasi Peranti FS 2 dan Berbilang Antara Muka)
Kod yang sepadan dengan Rajah – Contoh Kelas Berbilang – Peranti FS (2 Konfigurasi dan Antara Muka Berbilang) ditunjukkan dalam bekasample di bawah. Pengendalian ralat ditinggalkan untuk kejelasan.
Example – Contoh Berbilang Kelas – Konfigurasi Peranti FS 2 dan Berbilang Antara Muka)
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
17/174
Berakhirview
status sl_status_t; uint8_t class_0; uint8_t class_1;
status = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_create_instance(&class_0); status = sl_usbd_XXXX_create_instance(&class_1);
status = sl_usbd_XXXX_add_to_configuration(class_0, cfg_0); status = sl_usbd_XXXX_add_to_configuration(class_1, cfg_0);
status = sl_usbd_XXXX_add_to_configuration(class_0, cfg_1); status = sl_usbd_XXXX_add_to_configuration(class_1, cfg_1);
(1)
(2) (3)
(4) (5)
(6) (6)
(1) Mulakan kelas. Sebarang pembolehubah dalaman, struktur dan port kelas akan dimulakan.
(2) Buat contoh kelas, class_0 . Fungsi sl_usbd_XXXX_create_instance() memperuntukkan struktur kawalan kelas yang dikaitkan dengan class_0 .
(3) Buat contoh kelas, class_1 . Fungsi sl_usbd_XXXX_create_instance() memperuntukkan struktur kawalan kelas lain yang dikaitkan dengan class_1 .
(4) Tambahkan contoh kelas, class_0 , pada konfigurasi, cfg_0 . sl_usbd_XXXX_add_to_configuration() akan mencipta antara muka 0, antara muka 1, antara muka ganti dan titik akhir IN dan OUT yang berkaitan. Nombor contoh kelas, class_0 , akan digunakan untuk sebarang komunikasi data pada antara muka 0 atau antara muka 1.
(5) Tambahkan contoh kelas, class_1 , pada konfigurasi, cfg_0 . sl_usbd_XXXX_add_to_configuration() akan mencipta antara muka 2, antara muka 3 dan titik akhir IN dan OUT yang berkaitan. Nombor contoh kelas, class_1 , akan digunakan untuk sebarang komunikasi data pada antara muka 2 atau antara muka 3.
(6) Tambahkan contoh kelas yang sama, class_0 dan class_1 , pada konfigurasi lain, cfg_1 .
Setiap kelas mentakrifkan struktur jenis sl_usbd_XXXX_callbacks_t . Tujuannya adalah untuk memberikan setiap kelas satu set fungsi panggil balik untuk dipanggil apabila peristiwa berlaku. Dua fungsi panggil balik hadir dalam setiap kelas. Mereka dibentangkan dalam jadual di bawah.
Jadual – Fungsi Panggilan Balik Kelas Biasa
Medan Perihalan .dayakan Dipanggil apabila contoh kelas USB berjaya didayakan. .disable Dipanggil apabila tika kelas USB dinyahdayakan.
Fungsi Tandatangan void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
18/174
Berakhirview
Berakhirview
Kelas ACM CDC Peranti USB
Kelas Asas CDC Peranti USB Selesaiview Peranti USB Keperluan Sumber Kelas ACM CDC daripada Peranti USB Teras Subkelas ACM CDC Overview Peranti USB Konfigurasi Kelas ACM CDC Peranti USB Panduan Pengaturcaraan Kelas ACM CDC
Bahagian ini menerangkan kelas Kelas Peranti Komunikasi (CDC) dan subkelas CDC yang berkaitan yang disokong oleh timbunan Peranti USB Silicon Labs. Silicon Labs USB-Device kini menyokong subkelas Abstract Control Model (ACM), yang biasanya digunakan untuk emulasi bersiri.
CDC merangkumi pelbagai peranti telekomunikasi dan rangkaian. Peranti telekomunikasi merangkumi modem analog, telefon analog dan digital, penyesuai terminal ISDN, dsb. Untuk bekasampOleh itu, peranti rangkaian mengandungi ADSL dan modem kabel, penyesuai Ethernet dan hab. CDC mentakrifkan rangka kerja untuk merangkum standard perkhidmatan komunikasi sedia ada, seperti V.250 (untuk modem melalui rangkaian telefon) dan Ethernet (untuk peranti rangkaian kawasan setempat), menggunakan pautan USB. Peranti komunikasi bertanggungjawab ke atas pengurusan peranti, pengurusan panggilan apabila diperlukan dan penghantaran data.
CDC mentakrifkan tujuh kumpulan utama peranti. Setiap kumpulan tergolong dalam model komunikasi, yang mungkin termasuk beberapa subkelas. Setiap kumpulan peranti mempunyai dokumen spesifikasi sendiri selain kelas asas CDC. Tujuh kumpulan tersebut ialah:
Rangkaian Telefon Bersuis Awam (PSTN), peranti termasuk modem jalur suara, telefon dan peranti emulasi bersiri. Peranti Rangkaian Digital Perkhidmatan Bersepadu (ISDN), termasuk penyesuai terminal dan telefon. Peranti Model Kawalan Ethernet (ECM), termasuk peranti yang menyokong keluarga IEEE 802 (cth.: kabel dan modem ADSL, penyesuai WiFi). Peranti Mod Pemindahan Asynchronous (ATM), termasuk modem ADSL dan peranti lain yang disambungkan ke rangkaian ATM (stesen kerja, penghala, suis LAN). Peranti Komunikasi Mudah Alih Tanpa Wayar (WMC), termasuk peranti telefon bimbit komunikasi pelbagai fungsi yang digunakan untuk mengurus komunikasi suara dan data. Peranti Model Emulasi Ethernet (EEM) yang menukar data berbingkai Ethernet. Peranti Model Kawalan Rangkaian (NCM), termasuk peranti rangkaian berkelajuan tinggi (modem Akses Paket Berkelajuan Tinggi, Peralatan Terminal Talian)
CDC dan pelaksanaan subkelas yang berkaitan mematuhi spesifikasi berikut:
Bas Bersiri Universal, Definisi Kelas untuk Peranti Komunikasi, Semakan 1.2, 3 November 2010. Bas Bersiri Universal, Komunikasi, Subkelas untuk Peranti PSTN, Semakan 1.2, 9 Februari 2007.
Kelas Asas CDC Peranti USB Selesaiview
Peranti CDC terdiri daripada antara muka berikut untuk melaksanakan keupayaan komunikasi:
Antara Muka Kelas Komunikasi (CCI) bertanggungjawab untuk pengurusan peranti dan secara pilihan pengurusan panggilan. The
pengurusan peranti membolehkan konfigurasi umum dan kawalan peranti dan pemberitahuan peristiwa kepada hos. Pengurusan panggilan membolehkan penubuhan dan penamatan panggilan. Pengurusan panggilan mungkin dimultiplekskan melalui DCI. CCI adalah wajib untuk semua peranti CDC. Ia mengenal pasti fungsi CDC dengan menyatakan model komunikasi yang disokong oleh peranti CDC. Antara muka (s) yang mengikuti CCI boleh menjadi mana-mana antara muka kelas USB yang ditentukan, seperti Audio atau antara muka khusus vendor. Antara muka khusus vendor diwakili secara khusus oleh DCI.
Antara Muka Kelas Data (DCI) bertanggungjawab untuk penghantaran data. Data yang dihantar dan/atau diterima tidak mengikut yang tertentu
format. Data boleh menjadi data mentah daripada talian komunikasi, data mengikut format proprietari, dsb. Semua DCI yang mengikuti CCI boleh dilihat sebagai antara muka bawahan.
Peranti CDC mesti mempunyai sekurang-kurangnya satu CCI dan sifar atau lebih DCI. Satu CCI dan mana-mana DCI bawahan bersama-sama menyediakan ciri kepada hos. Keupayaan ini juga dirujuk sebagai fungsi. Dalam peranti komposit CDC, anda boleh mempunyai beberapa peranti
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
19/174
Berakhirview
fungsi. Oleh itu, peranti itu akan terdiri daripada beberapa set CCI dan DCI (s) seperti yang ditunjukkan dalam Rajah - Peranti Komposit CDC.
Rajah – Peranti Komposit CDC
Peranti CDC mungkin menggunakan gabungan titik akhir berikut:
Sepasang titik akhir IN dan OUT kawalan dipanggil titik akhir lalai. Pukal atau gangguan IN titik akhir pilihan. Sepasang titik akhir IN dan OUT pukal atau isokronis. Ambil perhatian bahawa timbunan peranti USB Silicon Labs tidak menyokong titik tamat isokron pada masa ini.
Jadual di bawah menunjukkan penggunaan titik akhir yang berbeza dan antara muka CDC digunakan.
Jadual – Penggunaan Titik Akhir CDC
Titik akhir
Kawal DALAM
Kawal KELUAR
Sampukan atau pukal DALAM Pukal atau isokronis DALAM Pukal atau isokronis
KELUAR
Arah
Peranti kepada hos
hos kepada peranti
Peranti kepada hos
Peranti kepada hos
hos kepada peranti
Penggunaan Antaramuka
CCI
Permintaan standard untuk penghitungan, permintaan khusus kelas, peranti
pengurusan, dan secara pilihan memanggil pengurusan.
CCI
Permintaan standard untuk penghitungan, permintaan khusus kelas, peranti
pengurusan, dan secara pilihan memanggil pengurusan.
CCI
Pemberitahuan acara, seperti pengesan dering, status talian bersiri, status rangkaian.
DCI
Komunikasi data mentah atau berformat.
DCI
Komunikasi data mentah atau berformat.
Kebanyakan peranti komunikasi menggunakan titik akhir gangguan untuk memberitahu hos acara. Titik akhir isokron tidak boleh digunakan untuk penghantaran data apabila protokol proprietari bergantung pada penghantaran semula data sekiranya berlaku ralat protokol USB. Komunikasi isokron secara semula jadi boleh kehilangan data kerana ia tidak mempunyai mekanisme cuba semula.
Tujuh model komunikasi utama merangkumi beberapa subkelas. Subkelas menerangkan cara peranti harus menggunakan CCI untuk mengendalikan pengurusan peranti dan pengurusan panggilan. Jadual di bawah menunjukkan semua kemungkinan subkelas dan model komunikasi yang dimilikinya.
Jadual – Subkelas CDC
Subkelas
Model Kawalan Talian Terus Model Kawalan Abstrak
Model Komunikasi
PSTN
PSTN
Example Peranti Menggunakan Subkelas Ini
Peranti modem dikawal secara langsung oleh hos USB
Peranti emulasi bersiri, peranti modem dikawal melalui set arahan bersiri
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
20/174
Berakhirview
Subkelas
Model Komunikasi
Example Peranti Menggunakan Subkelas Ini
Model Kawalan Telefon
PSTN
Model ISDN Kawalan Berbilang Saluran
Model Kawalan CAPI ISDN
Model Kawalan ECM Rangkaian Ethernet
Rangkaian ATM
ATM
Model Kawalan
Model Kawalan Telefon bimbit Tanpa Wayar
WMC
Pengurusan Peranti WMC
Model Talian Terus Mudah Alih
WMC
OBEX
WMC
Model EEM Emulasi Ethernet
Model Kawalan Rangkaian
NCM
Peranti telefon suara
Penyesuai terminal kadar asas, penyesuai terminal kadar utama, telefon
Penyesuai terminal kadar asas, penyesuai terminal kadar utama, modem kabel DOC-SIS telefon, modem ADSL yang menyokong emulasi PPPoE, penyesuai Wi-Fi (keluarga IEEE 802.11), modem ADSL penyesuai IEEE 802.3
Peralatan terminal mudah alih yang menyambung ke peranti wayarles
Peralatan terminal mudah alih menyambung ke peranti wayarles Peralatan terminal mudah alih menyambung ke peranti wayarles
Peralatan terminal mudah alih yang menyambung ke peranti wayarles Peranti menggunakan bingkai Ethernet sebagai lapisan pengangkutan seterusnya. Tidak bertujuan untuk penghalaan dan peranti sambungan Internet Penyesuai IEEE 802.3 yang membawa lebar jalur data berkelajuan tinggi pada rangkaian
Peranti USB Keperluan Sumber Kelas ACM CDC daripada Teras
Setiap kali anda menambah contoh kelas ACM CDC pada konfigurasi USB melalui panggilan ke fungsi sl_usbd_cdc_acm_add_to_configuration() , sumber berikut akan diperuntukkan daripada teras.
sumber
Antara muka Antara muka ganti Titik Akhir Kumpulan antara muka
Kuantiti
2 2 3 1
Ambil perhatian bahawa nombor tersebut adalah mengikut konfigurasi. Apabila menyediakan nilai konfigurasi SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY dan SL_USBD_DESCRIPTOR_QUANTITY anda, jangan lupa untuk mengambil kira bilangan konfigurasi kelas yang akan ditambah. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, memandangkan titik akhir dibuka hanya apabila konfigurasi ditetapkan oleh hos, anda hanya perlu mengambil kira bilangan titik akhir yang diperlukan untuk contoh kelas.
Peranti USB Subkelas ACM CDC Overview
Kelas asas CDC terdiri daripada Antara Muka Kelas Komunikasi (CCI) dan Antara Muka Kelas Data (DCI), yang dibincangkan secara terperinci dalam Peranti USB CDC Base Class Overview . Bahagian ini membincangkan CCI jenis ACM. Ia terdiri daripada titik akhir lalai untuk elemen pengurusan dan titik akhir gangguan untuk elemen pemberitahuan. Sepasang titik akhir pukal digunakan untuk membawa data yang tidak ditentukan ke atas DCI.
Subkelas ACM digunakan oleh dua jenis peranti komunikasi:
Peranti yang menyokong arahan AT (contohnya, modem jalur suara). Peranti emulasi bersiri yang juga dipanggil peranti port COM Maya.
Terdapat beberapa permintaan khusus subkelas untuk subkelas ACM. Mereka membenarkan anda mengawal dan mengkonfigurasi peranti. Senarai lengkap dan penerangan semua permintaan ACM boleh didapati dalam spesifikasi
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
21/174
Berakhirview Subkelas untuk Peranti PSTN, semakan 1.2, 9 Februari 2007=, bahagian 6.2.2.
Daripada senarai ini, subkelas Silicon Labs9 ACM menyokong yang berikut:
Jadual – Permintaan ACM Disokong oleh Silicon Labs
Penerangan Permintaan Subkelas
SetCommFeature GetCommFeature ClearCommFeature
Hos menghantar permintaan ini untuk mengawal tetapan bagi ciri komunikasi yang diberikan. Tidak digunakan untuk emulasi bersiri.
Hos menghantar permintaan ini untuk mendapatkan tetapan semasa untuk ciri komunikasi yang diberikan. Tidak digunakan untuk emulasi bersiri.
Hos menghantar permintaan ini untuk mengosongkan tetapan bagi ciri komunikasi yang diberikan. Tidak digunakan untuk emulasi bersiri.
SetLineCoding
Hos menghantar permintaan ini untuk mengkonfigurasi tetapan peranti ACM: kadar baud, bilangan bit henti, jenis pariti dan bilangan bit data. Untuk emulasi bersiri, permintaan ini dihantar secara automatik oleh terminal bersiri setiap kali anda mengkonfigurasi tetapan bersiri untuk port COM maya terbuka.
GetLineCoding
Hos menghantar permintaan ini untuk mendapatkan tetapan ACM semasa (kadar baud, bit henti, pariti, bit data). Untuk emulasi bersiri, terminal bersiri menghantar permintaan ini secara automatik semasa pembukaan port COM maya.
SetControlLineState Hos menghantar permintaan ini untuk mengawal pembawa untuk modem separuh dupleks dan menunjukkan bahawa Peralatan Terminal Data (DTE) sedia atau tidak. Dalam kes emulasi bersiri, DTE ialah terminal bersiri. Untuk emulasi bersiri, terminal bersiri tertentu membenarkan anda menghantar permintaan ini dengan set kawalan.
SetBreak
Hos menghantar permintaan ini untuk menjana rehat gaya RS-232. Untuk emulasi bersiri, terminal bersiri tertentu membenarkan anda menghantar permintaan ini.
Subkelas Silicon Labs9 ACM menggunakan titik akhir IN interrupt untuk memberitahu hos tentang keadaan talian bersiri semasa. bersiri
keadaan baris ialah peta bit yang memberitahu hos tentang:
Data dibuang kerana ralat pariti lampau Ralat pembingkaian Keadaan pengesanan isyarat gelang Keadaan mekanisme pengesanan pecah Keadaan pembawa penghantaran Keadaan pengesanan pembawa penerima
Pelaksanaan subkelas Silicon Labs9 ACM mematuhi spesifikasi berikut:
Bas Bersiri Universal, Komunikasi, Subkelas untuk Peranti PSTN, semakan 1.2, 9 Februari 2007.
Konfigurasi Kelas ACM CDC Peranti USB
Bahagian ini membincangkan cara mengkonfigurasi Kelas ACM CDC (Kelas Peranti Komunikasi, Model Kawalan Abstrak). Terdapat dua kumpulan parameter konfigurasi:
Konfigurasi Khusus Aplikasi Kelas ACM CDC Peranti USB Peranti USB Konfigurasi Contoh Kelas ACM CDC
Konfigurasi Khusus Aplikasi Kelas ACM CDC Peranti USB
Subkelas ACM Kelas Asas CDC
Kelas Asas CDC
Pertama, untuk menggunakan modul kelas CDC peranti USB Silicon Labs, anda perlu melaraskan konfigurasi masa kompilasi CDC #define-s mengikut keperluan aplikasi anda. Mereka dikumpulkan semula di dalam pengepala sl_usbd_core_config.h file di bawah bahagian CDC. Tujuan mereka adalah untuk memaklumkan modul peranti USB tentang bilangan objek CDC USB untuk diperuntukkan.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
22/174
Berakhirview
Jadual di bawah menerangkan setiap medan konfigurasi yang tersedia dalam struktur konfigurasi ini.
Jadual – Konfigurasi CDC Peranti USB Mentakrifkan
Nama Konfigurasi
SL_USBD_CDC_CL SEBAGAI S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY
Penerangan
Bilangan contoh kelas yang anda akan peruntukkan melalui panggilan ke fungsi
sl_usbd_cdc_acm_create_instance() .
Bilangan konfigurasi. Contoh kelas ACM boleh ditambah kepada satu atau lebih konfigurasi aaaa vi c ll ke sl_usbd_cdc_acm_add_to_configuration() .
Jumlah bilangan antara muka data (DCI) untuk semua fungsi CDC. Setiap fungsi CDC ACM aaaaaaaaa ditambah vi c ll ke fungsi sl_usbd_cdc_acm_create_instance() akan dd dt interf ce.
Nilai Lalai
2
1
2
Subkelas ACM
Subkelas ACM mempunyai satu konfigurasi masa kompilasi yang ditunjukkan dalam jadual di bawah.
Jadual – Peranti USB CDC ACM Configuration Define
Nama Konfigurasi
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY
Penerangan
Mengkonfigurasikan bilangan contoh subkelas yang anda akan peruntukkan melalui panggilan ke
fungsi sl_usbd_cdc_acm_create_instance() .
Nilai Lalai
2
Konfigurasi Contoh Kelas ACM CDC Peranti USB
Bahagian ini mentakrifkan konfigurasi yang berkaitan dengan kejadian kelas siri CDC ACM. Kelas Instance Creation line state interval call mgmt keupayaan p_acm_callbacks
Penciptaan Contoh Kelas
Untuk mencipta contoh kelas bersiri CDC ACM, panggil fungsi T a sl_usbd_cdc_acm_create_instance() . fungsinya ialah tiga hujah konfigurasi, seperti yang diterangkan di sini.
line_state_interval
Ini ialah selang (dalam milisaat) yang contoh kelas siri ACM CDC anda akan melaporkan pemberitahuan keadaan baris kepada hos T aa. v luenya mestilah kuasa dua (1, 2, 4, 8, 16, dll).
call_mgmt_capabilities
Peta bit Keupayaan Pengurusan Panggilan. Nilai-nilai yang mungkin bagi bitmap adalah seperti berikut:
Nilai (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI
Penerangan
Peranti mengendalikan pengurusan panggilan itu sendiri. Peranti boleh menghantar/menerima maklumat pengurusan panggilan melalui antara muka Kelas Data.
p_acm_panggilan balik
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
23/174
Berakhirview
aa M aa p_acm_callbacks ialah penunjuk kepada struktur jenis sl_usbd_cdc_acm_callbacks_t . Tujuannya adalah untuk memberikan set fungsi panggil balik CDC AC Cl ss untuk dipanggil apabila acara CDC ACM berlaku. Tidak semua panggilan balik adalah wajib dan penunjuk nol ( NULL ) boleh dihantar dalam pembolehubah struktur panggilan balik apabila panggilan balik tidak diperlukan. Jadual di bawah menerangkan setiap medan konfigurasi yang tersedia dalam struktur konfigurasi ini.
Jadual – sl_usbd_cdc_acm _callbacks_t Struktur Konfigurasi
Padang
Penerangan
.dayakan
Dipanggil apabila tika kelas USB didayakan
dengan jayanya.
.lumpuhkan
Dipanggil apabila tika kelas USB dilumpuhkan.
.line_control_changed Dipanggil apabila perubahan kawalan talian diterima.
line_coding_changed Dipanggil apabila perubahan pengekodan baris diterima.
Tandatangan Fungsi
void app_usbd_cdc_acm_enable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_disable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t subclass_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t subclass_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding
Lihat bahagian Mendaftarkan Panggilan Balik Pemberitahuan Acara untuk fungsi panggil balik cthample.
Panduan Pengaturcaraan Kelas ACM Peranti USB
Bahagian ini menerangkan cara menggunakan kelas Model Kawalan Abstrak CDC. Memulakan Peranti USB Kelas ACM CDC Menambah Peranti USB Contoh Kelas ACM CDC pada Peranti Anda Berkomunikasi Menggunakan Kelas ACM CDC
Memulakan Kelas ACM CDC Peranti USB
Untuk menambah fungsi kelas ACM CDC pada peranti anda, anda mesti memulakan kelas asas CDC dan subkelas ACM terlebih dahulu dengan menggunakan fungsi sl_usbd_cdc_init() dan sl_usbd_cdc_acm_init() . T aaaaa contoh di bawah menunjukkan cara untuk c ll sl_usbd_cdc_init() dan sl_usbd_cdc_acm_init() menggunakan rgumen lalai.
Example – Permulaan Kelas ACM CDC
status sl_status_t;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Menambahkan Contoh Kelas ACM CDC Peranti USB pada Peranti Anda
Untuk menambah kefungsian kelas ACM CDC pada peranti anda, anda mesti mencipta tika, kemudian menambahkannya pada konfigurasi peranti anda.
Mencipta Instance Kelas ACM CDC
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
24/174
Berakhirview
Menambahkan Contoh Kelas ACM CDC pada Panggilan Balik Pemberitahuan Acara Pendaftaran Konfigurasi Peranti Anda
Mencipta Instance Kelas ACM CDC
aa M aaa Cipta CDC AC cl ss inst nce dengan menggunakan fungsi sl_usbd_cdc_acm_create_instance() . T aaa M aaa contoh di bawah menunjukkan cara mencipta CDC AC cl ss inst nce vi sl_usbd_cdc_acm_create_instance() .
Example – Mencipta Fungsi ACM CDC melalui sl_usbd_cdc_acm_create_instance()
uint8_t subclass_nbr; status sl_status_t;
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Menambahkan Contoh Kelas ACM CDC pada Konfigurasi Peranti Anda
Selepas anda membuat contoh kelas ACM CDC, anda boleh menambahkannya pada konfigurasi dengan memanggil fungsi tersebut
sl_usbd_cdc_acm_add_to_configuration() .
T aa contoh di bawah menunjukkan cara untuk c ll sl_usbd_cdc_acm_add_to_configuration() .
Example – Panggilan ke USBD ACM sl_usbd_cdc_acm_add_to_configuration()
status sl_status_t;
status = sl_usbd_cdc_acm_add_to_configuration(subclass_nbr,
(1)
config_nbr_fs);
(2)
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
aaa (1) Nombor Cl ss untuk dd kepada konfigurasi yang dikembalikan oleh sl_usbd_cdc_acm_create_instance() . (2) Nombor konfigurasi (di sini menambahkannya pada konfigurasi Kelajuan Penuh).
Mendaftarkan Panggilan Balik Pemberitahuan Acara
Kelas Serial CDC ACM boleh memberitahu permohonan anda tentang sebarang perubahan dalam kawalan talian atau pengekodan melalui fungsi panggil balik pemberitahuan. Struktur fungsi panggil balik boleh dihantar sebagai hujah semasa pembuatan contoh ACM. Ambil perhatian bahawa panggilan balik tersebut adalah pilihan. Cthample – Pendaftaran Panggilan Balik ACM CDC menggambarkan penggunaan fungsi pendaftaran panggil balik. Cthample – Pelaksanaan Panggilan Balik ACM CDC menunjukkan bekasample pelaksanaan fungsi panggil balik.
Example – Pendaftaran Panggilan Balik ACM CDC
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
25/174
Berakhirview
uint8_t subclass_nbr; status sl_status_t;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cd_c_acmd_line
status = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
Example – Pelaksanaan Panggilan Balik ACM CDC
bool app_usbd_cdc_acm_line_coding_changed (uint8_t
subclass_nbr,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t baudrate_new;
uint8_t parity_new;
uint8_t stop_bits_new;
uint8_t data_bits_new;
/* TODO Gunakan pengekodan baris baharu.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding->Pariti; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;
kembali (benar);
(1)
}
batalkan app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* TODO Gunakan kawalan talian baharu. */ negeri_rts = ((acara & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? benar : palsu; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? benar : palsu; dtr_state = ((acara & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? benar : palsu; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? benar : palsu; brk_state = ((acara & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? benar : palsu; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? benar : palsu;
}
(1) Adalah penting untuk mengembalikan palsu kepada fungsi ini jika pengekodan talian yang digunakan gagal. Jika tidak, kembalikan benar.
Berkomunikasi Menggunakan Kelas ACM CDC
Status Bersiri
Kawalan Talian Pengekodan Talian
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
26/174
Berakhirview
Komunikasi Instance Subkelas Negeri Talian
Status Bersiri
Pengekodan Talian
Hos USB mengawal pengekodan talian (kadar baud, pariti, dll) peranti CDC ACM. Apabila perlu, aplikasi bertanggungjawab untuk menetapkan pengekodan talian. Terdapat dua fungsi yang disediakan untuk mendapatkan dan menetapkan pengekodan talian semasa, seperti yang diterangkan dalam jadual di bawah.
Jadual – Fungsi Pengekodan Talian ACM CDC
Fungsi
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()
Penerangan
Aplikasi anda boleh mendapatkan tetapan pengekodan baris semasa yang ditetapkan sama ada daripada hos dengan permintaan SetLineCoding atau dengan fungsi sl_usbd_cdc_acm_set_line_coding() .
Aplikasi anda boleh menetapkan pengekodan talian. Hos boleh mendapatkan semula tetapan dengan permintaan GetLineCoding.
Kawalan Talian
Hos USB mengawal kawalan talian (pin RTS dan DTR, isyarat putus dan sebagainya) peranti CDC ACM. Apabila perlu, permohonan anda bertanggungjawab untuk menggunakan kawalan talian. Fungsi disediakan untuk mendapatkan dan menetapkan kawalan talian semasa, seperti yang diterangkan dalam jadual di bawah.
Jadual – Fungsi Kawalan Talian ACM CDC
Fungsi
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()
Aplikasi anda boleh mendapatkan keadaan talian kawalan semasa yang ditetapkan oleh hos dengan permintaan SetControlLineState.
Negeri Garisan
Hos USB mendapatkan semula keadaan talian pada selang masa yang tetap. Permohonan anda mesti mengemas kini keadaan baris setiap kali ia berubah. Apabila perlu, permohonan anda bertanggungjawab untuk menetapkan keadaan talian. Dua fungsi disediakan untuk mendapatkan dan menetapkan kawalan talian semasa, seperti yang diterangkan dalam jadual di bawah.
Jadual – Fungsi Barisan ACM CDC
Fungsi
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()
Aplikasi anda boleh menetapkan sebarang peristiwa keadaan baris. Semasa menetapkan keadaan talian, pemindahan IN gangguan dihantar kepada hos untuk memaklumkan tentangnya perubahan dalam keadaan talian bersiri.
Aplikasi boleh mengosongkan dua peristiwa keadaan talian: pembawa penghantaran dan pengesanan pembawa penerima. Semua acara lain dibersihkan sendiri oleh subkelas emulasi bersiri ACM.
Komunikasi Contoh Subkelas
Subkelas ACM Silicon Labs menawarkan fungsi berikut untuk berkomunikasi dengan hos. Untuk butiran lanjut tentang parameter functions9, lihat rujukan Fungsi Subkelas ACM CDC.
Nama fungsi
sl_usb d _cd c_acm_ iklan semula () sl_usb d _cd c_acm_write ()
Operasi
Menerima data daripada hos melalui titik akhir OUT pukal. Fungsi ini menyekat. Menghantar data ke hos melalui titik akhir IN pukal. Fungsi ini menyekat.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
27/174
Berakhirview
Jadual – API Komunikasi ACM CDC Ringkasan aaaaa sl_usbd_cdc_acm_read() nd sl_usbd_cdc_acm_write() menyediakan komunikasi segerak, yang saya ns th t tr nsfer menyekat. Dalam erti kata lain, apabila memanggil fungsi, aplikasi menyekat sehingga pemindahan selesai dengan atau tanpa ralat. Tamat masa boleh ditentukan untuk mengelakkan menunggu selama-lamanya. bekas ituampdi bawah menunjukkan ex baca dan tulisample yang menerima data daripada hos menggunakan titik akhir OUT pukal dan menghantar data kepada hos menggunakan titik akhir IN pukal.
Penyenaraian – Baca dan Tulis Bersiri Cthample
__SEJARAH(4) uint8_t rx_buf[2];
__SEJARAH(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
status;
status = sl_usbd_cdc_acm_read(subclass_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
status = sl_usbd_cdc_acm_write(subclass_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
T aaaaa M (1) dia cl ss inst nce number cre ted with sl_usbd_cdc_acm_create_instance() menyediakan rujukan pelatih kepada subkelas AC untuk menghalakan pemindahan ke titik akhir OUT atau IN pukal yang betul. (2) Aplikasi anda mesti memastikan bahawa penimbal yang diberikan kepada fungsi itu cukup besar untuk menampung semua data. Jika tidak, isu penyegerakan mungkin berlaku. (3) Untuk mengelakkan situasi sekatan yang tidak terhingga, tentukan tamat masa yang dinyatakan dalam milisaat. Nilai 809 menjadikan tugas aplikasi menunggu selama-lamanya. (4) Aplikasi ini menyediakan penimbal penghantaran yang dimulakan.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
28/174
Berakhirview
Berakhirview
Kelas HID Peranti USB
Kelas HID Peranti USB Selesaiview Peranti USB Kelas HID Keperluan Sumber daripada Peranti USB Teras Konfigurasi Kelas HID Peranti USB Panduan Pengaturcaraan Kelas HID HID Tugas Laporan Input Berkala
Bahagian ini menerangkan kelas Peranti Antara Muka Manusia (HID) yang disokong oleh Peranti USB Silicon Labs.
Kelas HID merangkumi peranti yang digunakan oleh manusia untuk mengawal operasi komputer, seperti papan kekunci, tetikus, peranti penunjuk dan peranti permainan.
Kelas HID juga boleh digunakan dalam peranti komposit yang mengandungi kawalan seperti tombol, suis, butang dan peluncur. Untuk exampkawalan le, bisu dan kelantangan dalam set kepala audio dikawal oleh fungsi HID set kepala. Kelas HID boleh bertukar-tukar data untuk sebarang tujuan menggunakan hanya kawalan dan pemindahan gangguan.
Kelas HID ialah salah satu kelas USB yang tertua dan paling banyak digunakan. Semua sistem pengendalian hos utama menyediakan pemacu asli untuk mengurus peranti HID, itulah sebabnya pelbagai peranti khusus vendor berfungsi dengan kelas HID. Kelas ini juga termasuk pelbagai jenis item output seperti LED, audio, maklum balas sentuhan, dsb.
Pelaksanaan HID mematuhi spesifikasi berikut:
Definisi Kelas Peranti untuk Peranti Antara Muka Manusia (HID), 6/27/01, Versi 1.11. Jadual Penggunaan HID Bas Bersiri Universal, 28/10/2004, Versi 1.12.
Kelas HID Peranti USB Selesaiview
Berakhirview
Peranti HID terdiri daripada titik akhir berikut:
Sepasang titik akhir IN dan OUT kawalan dipanggil titik akhir lalai Titik akhir interrupt IN Titik akhir OUT interrupt pilihan
Jadual di bawah menerangkan penggunaan titik akhir yang berbeza:
Jadual – Penggunaan Titik Akhir Kelas HID
Penggunaan Arah Titik Akhir
Kawal DALAM
Kawalan
KELUAR
Sampuk IN
menyampuk
KELUAR
Peranti kepada hos
hos kepada peranti
Peranti kepada hos
hos kepada peranti
Permintaan standard untuk penghitungan, permintaan khusus kelas dan komunikasi data (Input, laporan Ciri dihantar kepada hos dengan permintaan GET_REPORT). Permintaan standard untuk penghitungan, permintaan khusus kelas dan komunikasi data (Laporan Output, Ciri yang diterima daripada hos dengan permintaan SET_REPORT). Komunikasi data (laporan Input dan Ciri).
Komunikasi data (Laporan Output dan Ciri).
Laporan
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
29/174
Berakhirview
Hos dan peranti HID bertukar data menggunakan laporan. Laporan mengandungi data berformat yang memberikan maklumat tentang kawalan dan entiti fizikal lain peranti HID. Kawalan boleh dimanipulasi oleh pengguna dan mengendalikan aspek peranti. Untuk exampSebagai contoh, kawalan boleh menjadi butang pada tetikus atau papan kekunci, suis, dsb. Entiti lain memaklumkan pengguna tentang keadaan ciri peranti tertentu. Untuk example, LED pada papan kekunci memberitahu pengguna tentang caps lock dihidupkan, pad kekunci berangka aktif, dsb.
Format dan penggunaan data laporan difahami oleh hos dengan menganalisis kandungan deskriptor Laporan. Menganalisis kandungan dilakukan oleh penghurai. Deskriptor Laporan menerangkan data yang disediakan oleh setiap kawalan dalam peranti. Ia terdiri daripada item yang merupakan cebisan maklumat tentang peranti dan terdiri daripada awalan 1 bait dan panjang berubah-ubah
data. Untuk butiran lanjut tentang format item, rujuk
1.11=, bahagian 5.6 dan 6.2.2.
Terdapat tiga jenis item utama:
Item utama mentakrifkan atau mengumpulkan jenis medan data tertentu.
Item global menerangkan ciri data kawalan.
Item setempat menerangkan ciri data bagi sesuatu kawalan.
Setiap jenis item ditakrifkan oleh fungsi yang berbeza. Fungsi item juga boleh dipanggil a tag. Fungsi item boleh dilihat sebagai sub-item yang tergolong dalam salah satu daripada tiga jenis item utama. Jadual di bawah memberikan penerangan ringkasview daripada fungsi item9 dalam setiap jenis item. Untuk penerangan lengkap item dalam setiap kategori, lihat
Jadual – Penerangan Fungsi Item untuk Setiap Jenis Item
Fungsi Jenis Item Item
Penerangan
Input Utama
Menghuraikan maklumat tentang data yang disediakan oleh satu atau lebih kawalan fizikal.
Output Utama Menghuraikan data yang dihantar ke peranti.
Ciri Utama
Menghuraikan maklumat konfigurasi peranti yang dihantar kepada atau diterima daripada peranti yang mempengaruhi kelakuan keseluruhan peranti atau salah satu komponennya.
Item berkaitan Kumpulan Koleksi Utama (Input, Output atau Ciri).
Akhir Utama Menutup koleksi. Koleksi
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
30/174
Berakhirview
Fungsi Jenis Item Item
Penerangan
Halaman Penggunaan Global
Mengenal pasti fungsi yang tersedia dalam peranti.
Global Logical Mentakrifkan had bawah nilai yang dilaporkan dalam unit logik. minimum
Global Logical Mentakrifkan had atas nilai yang dilaporkan dalam unit logik. maksimum
Fizikal Global Mentakrifkan had bawah nilai yang dilaporkan dalam unit fizikal, iaitu Minimum Logikal yang dinyatakan dalam unit fizikal.
Fizikal Global Mentakrifkan had atas nilai yang dilaporkan dalam unit fizikal, iaitu Maksimum Maksimum Logik yang dinyatakan dalam unit fizikal.
Unit Global
Menunjukkan eksponen unit dalam asas 10. Eksponen berjulat dari -8 hingga +7.
Eksponen
Unit Global
Menunjukkan unit nilai yang dilaporkan. Contohnya, panjang, jisim, unit suhu, dsb.
Saiz Laporan Global
Menunjukkan saiz medan laporan dalam bit.
ID Laporan Global Menunjukkan awalan yang ditambahkan pada laporan tertentu.
Kiraan Laporan Global
Menunjukkan bilangan medan data untuk item.
Tekan Global
Meletakkan salinan jadual keadaan item global pada tindanan CPU.
Pop Global
Menggantikan jadual keadaan item dengan struktur terakhir daripada timbunan.
Penggunaan Tempatan
Mewakili indeks untuk menetapkan Penggunaan tertentu dalam Halaman Penggunaan. Ia menunjukkan penggunaan yang disyorkan oleh vendor untuk kawalan atau kumpulan kawalan tertentu. Penggunaan membekalkan maklumat kepada pembangun aplikasi tentang apa yang sebenarnya diukur oleh kawalan.
Penggunaan Tempatan
Mentakrifkan penggunaan permulaan yang dikaitkan dengan tatasusunan atau peta bit.
minimum
Penggunaan Tempatan
Mentakrifkan penggunaan akhir yang dikaitkan dengan tatasusunan atau peta bit.
maksimum
Penentu Tempatan Menentukan bahagian badan yang digunakan untuk kawalan. Indeks menunjuk kepada penunjuk dalam Fizikal
Indeks
deskriptor.
Penentu Tempatan Mentakrifkan indeks penentu permulaan yang dikaitkan dengan tatasusunan atau peta bit. minimum
Local Designator Mentakrifkan indeks penamat penamat yang dikaitkan dengan tatasusunan atau peta bit. maksimum
Indeks Rentetan Tempatan
Indeks rentetan untuk deskriptor rentetan. Ia membenarkan rentetan dikaitkan dengan item atau kawalan tertentu.
Rentetan Tempatan
Menentukan indeks rentetan pertama apabila menetapkan sekumpulan rentetan berjujukan kepada kawalan dalam tatasusunan
Minimum atau bitmap.
Tempatan Tempatan
Rentetan Maksimum
pembatas
Menentukan indeks rentetan terakhir apabila menetapkan sekumpulan rentetan berjujukan kepada kawalan dalam tatasusunan atau peta bit.
Mentakrifkan permulaan atau penghujung set item tempatan.
Data kawalan mesti menentukan sekurang-kurangnya item berikut:
Input, Output atau Ciri Item utama Penggunaan Item tempatan Halaman Penggunaan Item global Logik Minimum Global item Logik Maksimum Global item Saiz Laporan Item global
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
31/174
Berakhirview
Kiraan Laporan Item global Jadual di bawah menunjukkan perwakilan kandungan deskriptor Laporan Tetikus daripada perspektif penghurai HID hos. Tetikus mempunyai tiga butang (kiri, kanan dan roda). Kod yang dibentangkan dalam bekasampdi bawah ialah pelaksanaan kod yang sepadan dengan perwakilan deskriptor Laporan tetikus ini.
Rajah – Laporkan Kandungan Deskriptor daripada Penghurai HID Hos View
(1) Fungsi item Halaman Penggunaan menentukan fungsi umum peranti. Dalam bekas iniample, peranti HID kepunyaan a
kawalan desktop generik.
(2) Kumpulan Aplikasi Koleksi item utama yang mempunyai tujuan bersama dan mungkin biasa dengan aplikasi. Dalam rajah, kumpulan itu terdiri daripada tiga item Input Utama. Untuk koleksi ini, penggunaan yang dicadangkan untuk kawalan ialah tetikus seperti yang ditunjukkan oleh item Penggunaan. (3) Koleksi bersarang boleh digunakan untuk memberikan butiran lanjut tentang penggunaan kawalan tunggal atau kumpulan kawalan kepada aplikasi. Dalam bekas iniample, Fizikal Koleksi, yang disarangkan ke dalam Aplikasi Pengumpulan, terdiri daripada tiga item Input yang sama membentuk Aplikasi Pengumpulan. Fizikal Pengumpulan digunakan untuk satu set item data yang mewakili titik data yang dikumpul pada satu titik geometri. Dalam bekasampOleh itu, penggunaan yang dicadangkan ialah penunjuk seperti yang ditunjukkan oleh item Penggunaan. Di sini penggunaan penunjuk merujuk kepada koordinat kedudukan tetikus dan perisian sistem akan menterjemahkan koordinat tetikus dalam pergerakan kursor skrin. (4) Halaman penggunaan bersarang juga mungkin dan memberikan butiran lanjut tentang aspek tertentu dalam fungsi umum peranti. Dalam kes ini, dua item Input dikumpulkan dan sepadan dengan butang tetikus. Satu item Input mentakrifkan tiga butang tetikus (kanan, kiri dan roda) dari segi bilangan medan data untuk item (item Kiraan Laporan), saiz medan data (item Saiz Laporan) dan nilai yang mungkin untuk setiap medan data (Penggunaan Minimum dan Maksimum, item Minimum dan Maksimum Logik). Item Input yang lain ialah pemalar 13-bit yang membenarkan data laporan Input diselaraskan pada sempadan bait. Item Input ini hanya digunakan untuk tujuan padding. (5) Satu lagi halaman penggunaan bersarang merujuk kepada kawalan desktop generik ditakrifkan untuk koordinat kedudukan tetikus. Untuk halaman penggunaan ini, item Input menerangkan medan data yang sepadan dengan paksi-x dan y seperti yang ditentukan oleh dua Penggunaan
barang.
Selepas menganalisis kandungan deskriptor Laporan tetikus sebelumnya, penghurai HID hos dapat mentafsir data laporan Input yang dihantar oleh peranti dengan pemindahan IN gangguan atau sebagai tindak balas kepada permintaan GET_REPORT. Data laporan Input yang sepadan dengan deskriptor Laporan tetikus ditunjukkan dalam Rajah – Kandungan Deskriptor Laporan daripada Penghurai HID Hos View is
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
32/174
Berakhirview
ditunjukkan dalam jadual di bawah. Jumlah saiz data laporan ialah 4 bait. Jenis laporan yang berbeza mungkin dihantar melalui titik akhir yang sama. Untuk tujuan membezakan jenis laporan yang berbeza, awalan ID laporan 1 bait ditambahkan pada laporan data. Jika ID laporan digunakan dalam exampdaripada laporan tetikus, jumlah saiz data laporan ialah 5 bait.
Jadual – Laporan Input Dihantar ke Hos dan Sepadan dengan Keadaan Tetikus 3 Butang
Bit Offset
0 1 2 3 16 24
Kiraan Bit 1 1 1 13 8 8
Butang Penerangan 1 (butang kiri). Butang 2 (butang kanan). Butang 3 (butang roda). Tidak digunakan. Kedudukan pada paksi X. Kedudukan pada paksi Y.
Deskriptor fizikal menunjukkan bahagian atau bahagian badan yang bertujuan untuk mengaktifkan kawalan atau kawalan. Aplikasi boleh menggunakan maklumat ini untuk menetapkan fungsi kepada kawalan peranti. Deskriptor fizikal ialah deskriptor khusus kelas pilihan dan kebanyakan peranti mempunyai sedikit keuntungan untuk menggunakannya. Rujuk kepada
Keperluan Sumber Kelas HID Peranti USB daripada Teras
Setiap kali anda menambah contoh kelas HID pada konfigurasi USB melalui panggilan ke fungsi sl_usbd_hid_add_to_configuration() , sumber berikut akan diperuntukkan daripada teras.
sumber
Antara muka Antara muka ganti Titik Akhir Kumpulan antara muka
Kuantiti
1 1 1 (2 jika titik akhir gangguan OUT didayakan) 0
Ambil perhatian bahawa nombor tersebut adalah mengikut konfigurasi. Apabila menyediakan nilai konfigurasi SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY dan SL_USBD_DESCRIPTOR_QUANTITY anda, jangan lupa untuk mengambil kira bilangan konfigurasi kelas yang akan ditambah. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, memandangkan titik akhir dibuka hanya apabila konfigurasi ditetapkan oleh hos, anda hanya perlu mengambil kira bilangan titik akhir yang diperlukan untuk contoh kelas.
Konfigurasi Kelas HID Peranti USB
Dua kumpulan parameter konfigurasi digunakan untuk mengkonfigurasi kelas HID:
Konfigurasi Khusus Aplikasi Kelas HID Peranti USB Konfigurasi Contoh Kelas HID Peranti USB
Konfigurasi Khusus Aplikasi Kelas HID Peranti USB
Mula-mula, untuk menggunakan modul kelas HID peranti USB Silicon Labs, laraskan konfigurasi masa kompilasi HID mentakrifkan mengikut keperluan aplikasi anda. Mereka dikumpulkan semula di dalam pengepala sl_usbd_core_config.h file di bawah bahagian HID. Ia boleh dibahagikan kepada dua bahagian, konfigurasi kuantiti dan konfigurasi tugas HID. Tujuan konfigurasi kuantiti adalah untuk memaklumkan modul peranti USB tentang bilangan objek USB HID untuk diperuntukkan.
Jadual di bawah menerangkan setiap definisi konfigurasi.
Jadual – Konfigurasi HID Peranti USB Mentakrifkan
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
33/174
Berakhirview
Nama Konfigurasi
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_REPORT_ ID_QUANTITY
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY
Penerangan
Bilangan contoh kelas yang anda akan peruntukkan melalui panggilan ke fungsi
sl_usbd_hid_create_instance() .
Bilangan konfigurasi. Contoh kelas HID boleh ditambah kepada satu atau lebih konfigurasi aaaa vi c ll kepada fungsi sl_usbd_hid_add_to_configuration() . Mengkonfigurasikan jumlah bilangan ID laporan untuk diperuntukkan.
Mengkonfigurasikan jumlah item Tekan/Pop untuk diperuntukkan.
Tugas pemasa mengendalikan semua operasi HID berasaskan pemasa. Konfigurasi ini membolehkan anda menetapkan saiz tindanan (dalam bilangan bait). Keutamaan tugas HID. beliau adalah keutamaan CMSIS-RTOS2.
Nilai Lalai
2 1 2 0 2048
osPriorityHigh
Peranti USB Konfigurasi Contoh Kelas HID Subkelas Penciptaan Contoh Kelas
kod_negara protokol
interval_in dan interval_out p_hid_callback Deskriptor Laporan Kelas HID Cthample Bahagian ini mentakrifkan konfigurasi yang berkaitan dengan kejadian kelas HID.
Penciptaan Contoh Kelas
Mencipta contoh kelas HID dilakukan dengan memanggil fungsi aaa sl_usbd_hid_create_instance() , yang t kes sever l configur tion arguments yang diterangkan di bawah.
subkelas
Kod subkelas HID. Nilai yang mungkin adalah:
SL_USBD_HID_SUBCL ASS_TIADA SL_USBD_HID_SUBCL ASS_BOOT
Peranti HID yang menggunakan subkelas but mesti menggunakan format laporan standard. Untuk maklumat lanjut tentang kod subkelas, lihat bahagian 4.2 semakan spesifikasi HID 1.11.
protokol
Protokol yang digunakan oleh peranti HID. Nilai yang mungkin adalah:
SL_USBD_HID_PROTOCOL_TIADA SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Jika fungsi HID anda ialah tetikus, protokol hendaklah ditetapkan kepada aa SL_USBD_HID_PROTOCOL_MOUSE . Jika ia adalah papan kekunci, ia harus ditetapkan kepada SL_USBD_HID_PROTOCOL_KBD . sebaliknya, protokol hendaklah ditetapkan kepada SL_USBD_HID_PROTOCOL_NONE . Untuk maklumat lanjut tentang kod subkelas, lihat bahagian 4.3 semakan spesifikasi HID 1.11.
kod_negara
ID kod negara. Nilai yang mungkin adalah:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
34/174
Berakhirview
SL_USBD_HID_COUNTRY_CODE_ARABIC SL_USBD_HID_COUNTRY_CODE_BELGIAN SL_USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL SL_USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH SL_USBD_HID_COUNTRY_CODEBLCZE SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_JERMAN SL_USBD_HID_COUNTRY_CODE_GREEK SL_USBD_CODE_GREEK SL_USBD_WID SL_USBD_HID_COUNTRY_CODE_HUNGARY SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREA_CODE_KOREA_CODE_KOREA SL_USBD_HID_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL DAN SL_USBD_HID_COUNTRY_SECODE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH_HID_CODE_SWISS_FRENCH_HID_COUNTRY_COUNTRY SL_USBD_HID_COUNTRY_CODE_SWITZERL DAN SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_COUNTRY_CODE_US SL_USBD_HID SL_USBD_HID_COUNTRY_CODE_TURKISH_F
Kod negara mengenal pasti negara mana perkakasan itu disetempatkan. Kebanyakan perkakasan tidak disetempatkan dan oleh itu aaaav lue ini akan menjadi SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Walau bagaimanapun, papan kekunci saya menggunakan medan untuk menunjukkan bahasa topi kekunci.
Untuk maklumat lanjut tentang kod negara, lihat bahagian 6.2.1 semakan spesifikasi HID 1.11.
selang_masuk dan selang_luar
interval_in dan interval_out mewakili selang pengundian bagi titik akhir gangguan IN dan titik akhir gangguan OUT.
Ini mewakili selang pengundian titik akhir, dalam milisaat. Menetapkan nilai ini bergantung pada kekerapan peranti anda terdedah untuk menjana laporan baharu untuk hos. Sebagai contoh, jika laporan dijana setiap 16 milisaat, selang hendaklah 16 atau kurang.
Nilai mestilah kuasa 2 (1, 2, 4, 8, 16, dsb.).
interval_out v lue diabaikan jika ctrl_rd_en ditetapkan kepada benar.
p_hid_callback
aaaa p_hid_callback ialah penunjuk kepada struktur jenis sl_usbd_hid_callbacks_t . Tujuannya adalah untuk memberikan set HID Cl ss fungsi panggil balik untuk dipanggil apabila peristiwa HID berlaku.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
35/174
Berakhirview
Tidak semua panggilan balik adalah wajib dan penunjuk nol ( NULL ) boleh dihantar dalam pembolehubah struktur panggilan balik apabila panggilan balik tidak diperlukan. Jadual di bawah menerangkan setiap medan konfigurasi yang tersedia dalam struktur konfigurasi ini.
Jadual – sl_usbd_hid_callbacks_t Struktur Konfigurasi
Padang
Penerangan
Tandatangan Fungsi
.dayakan .dayakan .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
Dipanggil apabila contoh kelas USB berjaya didayakan. Dipanggil apabila tika kelas USB dilumpuhkan.
Dipanggil semasa pembuatan Instance HID untuk menghantar deskriptor laporan anda. Untuk setiap fungsi HID anda, anda mesti menyediakan deskriptor laporan. Deskriptor laporan menunjukkan kepada hos bagaimana laporan berkala yang akan dihantar oleh peranti harus dihuraikan. Menulis deskriptor laporan anda sendiri boleh mencabar, dan itulah sebabnya terdapat beberapa sumber untuk membantu. Ini adalah satu-satunya fungsi panggil balik mandatori. Dipanggil semasa penciptaan Instance HID untuk menghantar deskriptor fizikal anda. Deskriptor fizikal ialah deskriptor yang menyediakan maklumat tentang bahagian atau bahagian tertentu badan manusia yang mengaktifkan kawalan atau kawalan. Untuk maklumat lanjut tentang deskriptor fizikal, lihat bahagian 6.2.3 semakan spesifikasi HID 1.11. Deskriptor fizikal adalah pilihan dan kebanyakan masa diabaikan. Penampan yang diluluskan di sini boleh ditetapkan kepada NULL dan panjang ditetapkan kepada 0. Dipanggil apabila hos menetapkan laporan seperti yang diterangkan dalam deskriptor laporan anda (apabila ia menghantar laporan).
Dipanggil apabila hos meminta laporan ciri seperti yang diterangkan dalam deskriptor laporan anda.
Dipanggil apabila hos menetapkan laporan ciri seperti yang diterangkan dalam deskriptor laporan anda.
void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
Mendapatkan semula protokol aktif semasa.
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_protocol
Menetapkan protokol aktif semasa.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
Deskriptor Laporan Kelas HID Cthample
Kelas HID Makmal Silikon sampaplikasi le menyediakan bekasampsatu deskriptor laporan untuk tetikus mudah. bekas ituampdi bawah menunjukkan deskriptor laporan tetikus.
Example – Deskriptor Laporan Tetikus
statik uint8_t app_usbd_hid_report_desc[] = {
(1) (2)
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE,
(3)
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
36/174
Berakhirview
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)
SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_PHYSICAL,(6)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)
SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,
SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_ABSOLUTE,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)
SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_X,
SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_DV_Y,
SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,
SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,
SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_MAIN_ENDCOLLECTION,(10)
SL_USBD_HID_MAIN_ENDCOLLECTION
(11)};
(1) Jadual yang mewakili deskriptor laporan tetikus dimulakan sedemikian rupa sehingga setiap baris sepadan dengan item pendek. Yang terakhir ini terbentuk daripada awalan 1-bait dan data 1-bait. Rujuk kepada viewdiedit oleh penghurai HID hos dalam Rajah – Laporkan Kandungan Deskriptor daripada Penghurai HID Hos View.
(2) Halaman Penggunaan Desktop Generik digunakan.
(3) Dalam Halaman Penggunaan Desktop Generik, penggunaan tag mencadangkan bahawa kumpulan kawalan adalah untuk mengawal tetikus. Koleksi tetikus biasanya terdiri daripada dua paksi (X dan Y) dan satu, dua atau tiga butang.
(4) Pengumpulan tetikus dimulakan.
(5) Dalam koleksi tetikus, penggunaan tag mencadangkan secara lebih khusus bahawa kawalan tetikus tergolong dalam koleksi penunjuk. Koleksi penuding ialah koleksi paksi yang menjana nilai untuk mengarahkan, menunjukkan atau menunjukkan niat pengguna kepada aplikasi.
(6) Pengumpulan penunjuk dimulakan.
(7) Halaman Penggunaan Butang mentakrifkan item Input yang terdiri daripada tiga medan 1-bit. Setiap medan 1-bit mewakili butang 9 tetikus 1, 2 dan 3 masing-masing dan boleh mengembalikan nilai 0 atau 1.
(8) Item Input untuk Halaman Penggunaan Butang dilapisi dengan 13 bit lain.
(9) Satu lagi Halaman Penggunaan Desktop Generik ditunjukkan untuk menerangkan kedudukan tetikus dengan paksi X dan Y. Item Input terdiri daripada dua medan 8-bit yang nilainya boleh antara -127 dan 127.
(10) Pengumpulan penunjuk ditutup.
(11) Koleksi tetikus ditutup.
Halaman HID USB.org
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
37/174
Berakhirview
Forum Pelaksana USB (USB-IF) menyediakan alat yang dipanggil "Alat Deskriptor HID" bersama-sama dengan maklumat lain mengenai format deskriptor laporan. Lihathttp://www.usb.org/developers/hidpage/ untuk maklumat lanjut.
Panduan Pengaturcaraan Kelas HID Peranti USB
Bahagian ini menerangkan cara menggunakan kelas HID. Memulakan Kelas HID Peranti USB Menambah Contoh Kelas HID Peranti USB pada Peranti anda Berkomunikasi menggunakan Kelas HID Peranti USB
Memulakan Kelas HID Peranti USB
Untuk menambah fungsi Kelas HID pada peranti anda, anda mesti memulakan kelas terlebih dahulu dengan memanggil fungsi sl_usbd_hid_init() . bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_hid_init() menggunakan argumen lalai. Untuk mendapatkan maklumat lanjut tentang argumen konfigurasi untuk dihantar ke sl_usbd_hid_init() , lihat Konfigurasi Khusus Aplikasi Kelas HID Peranti USB.
Example – Memanggil sl_usbd_hid_init()
status sl_status_t;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Menambahkan Contoh Kelas HID Peranti USB pada Peranti Anda
Untuk menambahkan kefungsian kelas HID pada peranti anda, anda mesti membuat tika, kemudian menambahkannya pada konfigurasi peranti anda.
Mencipta Instance Kelas HID
Buat contoh kelas HID dengan memanggil fungsi sl_usbd_hid_create_instance() . bekas ituampdi bawah menunjukkan cara untuk mencipta fungsi tetikus mudah melalui sl_usbd_hid_create_instance() menggunakan argumen lalai. Untuk mendapatkan maklumat lanjut tentang argumen konfigurasi untuk dihantar ke sl_usbd_hid_create_instance() , lihat Konfigurasi Contoh Kelas HID Peranti USB.
Example – Menambah Fungsi Tetikus melalui sl_usbd_hid_create_instance()
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
38/174
Berakhirview
/* Pemalar global. */ statik const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_1,LECTION SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_PHYSICAL, SL_GLOBAL_HID SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0_GLOBAL_MIN + 1, 0 _USBD_00 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_HID SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_US_AGE, SL_USBD_HID_LOCAL_USAGE + 1 SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 08, SL_USBD_HID_GLOBAL_REPORT_+02, 1COUNT SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Pembolehubah setempat.*/ uint8_t class_nbr; status sl_status_t;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
status = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Desc_Mouse 2_ReportDesc, sizeof(Desc_Mouse_2DuHID), benar, &app_usbd_hid_callbacks, &class_nbr);
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
39/174
Berakhirview
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */}
Menambah Instance Kelas HID pada Konfigurasi Peranti Anda Selepas anda mencipta contoh kelas HID, anda boleh menambahkannya pada konfigurasi dengan memanggil fungsi
sl_usbd_hid_add_to_configuration() .
bekas ituampdi bawah menunjukkan cara untuk memanggil sl_usbd_hid_add_to_configuration() .
Example – Memanggil sl_usbd_hid_add_to_configuration()
status sl_status_t;
sl_usbd_hid_add_to_configuration(class_nbr,
(1)
config_nbr_fs); (2)
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
(1) Nombor kelas untuk ditambahkan pada konfigurasi yang dikembalikan oleh sl_usbd_hid_create_instance(). (2) Nombor konfigurasi (di sini menambahkannya pada konfigurasi Kelajuan Penuh).
Berkomunikasi Menggunakan Kelas HID Peranti USB
Komunikasi Instance Kelas Komunikasi Instance Kelas Komunikasi Sinkron Kelas HID menawarkan fungsi berikut untuk berkomunikasi dengan hos.
Jadual – Ringkasan API Komunikasi HID
Nama fungsi
sl_usb d _hid _ iklan semula _sy nc() sl_usb d _hid _write _sy nc()
Operasi Menerima data daripada hos melalui titik akhir OUT gangguan. Fungsi ini menyekat. Menghantar data kepada hos melalui interrupt IN endpoint. Fungsi ini menyekat.
Komunikasi Segerak Komunikasi segerak bermaksud pemindahan itu menyekat. Selepas panggilan fungsi, aplikasi menyekat sehingga pemindahan selesai dengan atau tanpa ralat. Tamat masa boleh ditentukan untuk mengelakkan menunggu selama-lamanya. bekas ituampdi bawah menunjukkan baca dan tulis yang menerima data daripada hos menggunakan titik akhir OUT interrupt dan menghantar data kepada hos menggunakan titik akhir IN interrupt.
Example – HID Segerak Baca dan Tulis
__SEJARAH(4) uint8_t rx_buf[2];
__SEJARAH(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
status;
status = sl_usbd_hid_read_sync(class_nbr,
(1)
(kosong *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
40/174
Berakhirview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Ralat berlaku. Pengendalian ralat harus ditambah di sini. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Ralat berlaku. Pengendalian ralat harus ditambah di sini. */}
(1) Nombor contoh kelas yang dicipta daripada sl_usbd_hid_create_instance() menyediakan rujukan dalaman untuk kelas HID untuk menghalakan pemindahan ke titik akhir OUT atau IN gangguan yang betul.
(2) Aplikasi mesti memastikan bahawa penimbal yang disediakan untuk fungsi itu cukup besar untuk menampung semua data. Jika tidak, isu penyegerakan mungkin berlaku. Secara dalaman, operasi baca dilakukan sama ada dengan titik akhir kawalan atau dengan titik akhir gangguan, bergantung pada set bendera bacaan kawalan semasa memanggil sl_usbd_hid_create_instance() .
(3) Untuk mengelakkan situasi sekatan yang tidak terhingga, tamat masa yang dinyatakan dalam milisaat boleh ditentukan. Nilai 809 menjadikan tugas aplikasi menunggu selama-lamanya.
(4) Aplikasi ini menyediakan penimbal penghantaran yang dimulakan.
Tugas Laporan Input Berkala HID
Untuk menjimatkan lebar jalur, hos mempunyai keupayaan untuk menyenyapkan laporan daripada titik akhir IN gangguan dengan mengehadkan kekerapan pelaporan. Untuk berbuat demikian, hos mesti menghantar permintaan SET_IDLE. Kelas HID yang dilaksanakan oleh Silicon Labs mengandungi tugas dalaman yang menghormati had kekerapan pelaporan yang boleh anda gunakan pada satu atau beberapa laporan input. Rajah Tugas Laporan Input Berkala menunjukkan fungsi tugas laporan input berkala.
Rajah – Tugas Laporan Input Berkala
(1) Peranti menerima permintaan SET_IDLE. Permintaan ini menentukan tempoh terbiar untuk ID laporan yang diberikan. Untuk butiran lanjut tentang permintaan SET_IDLE, lihat
(2) Struktur ID laporan (diperuntukkan semasa fasa permulaan kelas HID) dikemas kini dengan tempoh terbiar. Kaunter tempoh melahu dimulakan dengan nilai tempoh melahu. Struktur ID laporan disisipkan pada penghujung senarai terpaut yang mengandungi struktur ID laporan input. Nilai tempoh melahu dinyatakan dalam unit 4-ms yang memberikan julat 4 hingga 1020 ms.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
41/174
Berakhirview
Jika tempoh terbiar kurang daripada selang pengundian titik akhir IN gangguan, laporan dijana pada selang pengundian.
(3) Setiap 4 ms, tugas laporan input berkala menyemak imbas senarai ID laporan input. Untuk setiap ID laporan input, tugasan melaksanakan satu daripada dua operasi yang mungkin. Tempoh tempoh tugas sepadan dengan unit 4-ms yang digunakan untuk tempoh melahu. Jika tiada permintaan SET_IDLE telah dihantar oleh hos, senarai ID laporan input kosong dan tugas itu tiada apa-apa untuk diproses. Proses tugasan hanya melaporkan ID yang berbeza daripada 0 dan dengan tempoh terbiar lebih daripada 0.
(4) Untuk ID laporan input yang diberikan, tugas itu mengesahkan jika tempoh terbiar telah berlalu. Jika tempoh melahu belum berlalu, kaunter dikurangkan dan tiada laporan input dihantar kepada hos.
(5) Jika tempoh melahu telah berlalu (iaitu, pembilang tempoh melahu telah mencapai sifar), laporan input dihantar kepada hos dengan memanggil fungsi sl_usbd_hid_write_sync() melalui titik akhir IN interrupt.
(6) Data laporan input yang dihantar oleh tugas datang daripada penimbal data dalaman yang diperuntukkan untuk setiap laporan input yang diterangkan dalam deskriptor Laporan. Tugas aplikasi boleh memanggil fungsi sl_usbd_hid_write_sync() untuk menghantar laporan input. Selepas menghantar data laporan input, sl_usbd_hid_write_sync() mengemas kini penimbal dalaman yang dikaitkan dengan ID laporan input dengan data yang baru dihantar. Kemudian, tugas laporan input berkala sentiasa menghantar data laporan input yang sama selepas setiap tempoh terbiar berlalu dan sehingga tugas aplikasi mengemas kini data dalam penimbal dalaman. Terdapat beberapa mekanisme penguncian untuk mengelakkan kerosakan data ID laporan input sekiranya pengubahsuaian berlaku pada masa penghantaran yang tepat dilakukan oleh tugas laporan input berkala.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
42/174
Berakhirview
Berakhirview
Kelas MSC Peranti USB
Peranti USB Kelas MSC Selesaiview Peranti USB Keperluan Sumber Kelas MSC daripada Peranti USB Teras Konfigurasi Kelas MSC Peranti USB Panduan Pengaturcaraan Kelas MSC Peranti USB Pemacu Storan Kelas MSC
Bahagian ini menerangkan kelas peranti storan massa (MSC) yang disokong oleh Peranti USB Silicon Labs. MSC ialah protokol yang membolehkan pemindahan maklumat antara peranti USB dan hos. Maklumat yang dipindahkan ialah apa sahaja yang boleh disimpan secara elektronik, seperti program boleh laku, kod sumber, dokumen, imej, data konfigurasi, atau data teks atau angka lain. Peranti USB muncul sebagai medium storan luaran kepada hos, membolehkan pemindahan files melalui seret dan lepas.
A file sistem mentakrifkan bagaimana files disusun dalam media storan. Spesifikasi kelas storan jisim USB tidak memerlukan sebarang perkara khusus file sistem yang akan digunakan pada peranti pematuhan. Sebaliknya, ia menyediakan antara muka yang mudah untuk membaca dan menulis sektor data menggunakan set arahan telus Antara Muka Sistem Komputer Kecil (SCSI). Oleh itu, sistem pengendalian mungkin menganggap pemacu USB seperti pemacu keras, dan boleh memformatkannya dengan mana-mana file sistem yang mereka suka.
Kelas peranti storan massa USB menyokong dua protokol pengangkutan, seperti berikut:
Pengangkutan Pukal Sahaja (BOT) Kawalan/Pukal/Gangguan (CBI) Pengangkutan (hanya digunakan untuk pemacu cakera liut)
Kelas peranti storan massa melaksanakan set arahan telus SCSI menggunakan protokol BOT sahaja, yang menandakan bahawa hanya titik akhir pukal akan digunakan untuk menghantar data dan maklumat status. Pelaksanaan MSC menyokong pelbagai unit logik.
Pelaksanaan MSC adalah mematuhi spesifikasi berikut:
Spesifikasi Kelas Penyimpanan Massa Bas Bersiri Universalview, Semakan 1.3 5 Sept. 2008. Kelas Penyimpanan Massa Bas Bersiri Universal Pengangkutan Pukal Sahaja, Semakan 1.0 31 Sept. 1999.
Peranti USB MSC aCl ss Overview
Kelas Titik Akhir Protokol Meminta Antara Muka Sistem Komputer Kecil (SCSI)
Protokol
Dalam bahagian ini, kita akan membincangkan protokol Pengangkutan Pukal Sahaja (BOT) Kelas Penyimpanan Massa. Protokol Pengangkutan Pukal Sahaja mempunyai tiga stages:
Pengangkutan Perintah Pengangkutan Data Pengangkutan Status
Arahan storan massa dihantar oleh hos melalui struktur yang dipanggil Command Block Wrapper (CBW). Untuk arahan yang memerlukan pengangkutan data stage, hos akan cuba menghantar atau menerima bilangan bait yang tepat daripada peranti seperti yang ditentukan oleh medan panjang dan bendera CBW. Selepas pengangkutan data stage, hos cuba menerima Pembungkus Status Perintah (CSW) daripada peranti yang memperincikan status arahan serta sebarang sisa data (jika
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
43/174
Berakhirview
mana-mana). Untuk arahan yang tidak termasuk pengangkutan data stage, hos cuba menerima CSW terus selepas CBW dihantar. Protokol ini diperincikan dalam Rajah - Protokol MSC.
Rajah – Protokol MSC
Titik akhir
Pada bahagian peranti, selaras dengan spesifikasi BOT, MSC terdiri daripada titik akhir berikut: Sepasang titik akhir IN dan OUT kawalan dipanggil titik akhir lalai. Sepasang titik akhir MASUK dan KELUAR pukal.
Jadual di bawah menunjukkan penggunaan berbeza bagi titik akhir.
Jadual – Penggunaan Titik Akhir MSC
Titik akhir
Kawalan DALAM Kawalan KELUAR Pukal DALAM Pukal KELUAR
Arah
Peranti untuk Hos Hos kepada Peranti Peranti untuk Hos Hos kepada Peranti
Penggunaan
Permintaan khusus kelas Enumerasi dan MSC Permintaan khusus kelas Enumerasi dan MSC Hantar CSW dan data Terima CBW dan data
Permintaan Kelas
Terdapat dua permintaan kawalan yang ditetapkan untuk protokol BOT MSC. Permintaan ini dan penerangannya diperincikan dalam jadual di bawah.
Jadual – Permintaan Kelas Penyimpanan Massa
Permintaan Kelas
Tetapan Semula Storan Massa Pukal Sahaja
Penerangan
Permintaan ini digunakan untuk menetapkan semula peranti storan massa dan antara muka yang berkaitan. Permintaan ini menyediakan peranti untuk menerima blok arahan seterusnya.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
44/174
Berakhirview
Permintaan Kelas
Penerangan
Dapatkan Maks Permintaan ini digunakan untuk mengembalikan nombor unit logik (LUN) tertinggi yang disokong oleh peranti. Untuk example, a
LUN
peranti dengan LUN 0 dan LUN 1 akan mengembalikan nilai 1. Peranti dengan unit logik tunggal akan mengembalikan 0 atau menghentikan
permintaan. Nilai maksimum yang boleh dikembalikan ialah 15.
Antara Muka Sistem Komputer Kecil SCSI
Pada peringkat antara muka pengaturcaraan, peranti MSC melaksanakan salah satu protokol komunikasi media storan standard, seperti SCSI dan SFF-8020i (ATAPI). "Antara Muka Pengaturcaraan" menentukan protokol yang dilaksanakan, dan membantu sistem pengendalian hos untuk memuatkan pemacu peranti yang sesuai untuk berkomunikasi dengan peranti storan USB. SCSI ialah protokol yang paling biasa digunakan dengan peranti storan USB MSC. Kami menyediakan pelaksanaan untuk subkelas MSC SCSI yang boleh digunakan oleh pengguna GSDK kami di luar kotak.
SCSI ialah satu set piawaian untuk mengendalikan komunikasi antara komputer dan peranti persisian. Piawaian ini termasuk arahan, protokol, antara muka elektrik dan antara muka optik. Peranti storan yang menggunakan antara muka perkakasan lain, seperti USB, menggunakan arahan SCSI untuk mendapatkan maklumat peranti/hos dan mengawal operasi peranti dan memindahkan blok data dalam media storan.
Perintah SCSI merangkumi pelbagai jenis dan fungsi peranti dan oleh itu, peranti memerlukan subset perintah ini. Secara umum, arahan berikut diperlukan untuk komunikasi asas:
PERTANYAAN KAPASITI BACA(10) BACA(10) UNIT UJIAN RASA PERMINTAAN SEDIA MENULIS(10)
Peranti USB Keperluan Sumber Kelas MSC daripada Teras
Setiap kali anda menambah contoh kelas MSC pada konfigurasi USB melalui fungsi sl_usbd_msc_add_to_configuration() , sumber berikut akan diperuntukkan daripada teras.
sumber
Antara muka Antara muka ganti Titik Akhir Kumpulan antara muka
Kuantiti
1 1 2 0
Ambil perhatian bahawa nombor tersebut adalah mengikut konfigurasi. Apabila menyediakan nilai konfigurasi SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY dan SL_USBD_DESCRIPTOR_QUANTITY anda, jangan lupa untuk mengambil kira bilangan konfigurasi kelas yang akan ditambah. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, memandangkan titik akhir dibuka hanya apabila konfigurasi ditetapkan oleh hos, anda hanya perlu mengambil kira bilangan titik akhir yang diperlukan untuk contoh kelas.
Konfigurasi Kelas MSC Peranti USB
Dua kumpulan parameter konfigurasi digunakan untuk mengkonfigurasi kelas MSC:
Peranti USB Konfigurasi Khusus Aplikasi Kelas MSC Peranti USB Konfigurasi Unit Logik Kelas MSC
Konfigurasi Khusus Aplikasi Kelas MSC Peranti USB
Konfigurasi Masa Kompilasi Kelas Penciptaan Contoh Kelas
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
45/174
Berakhirview
Konfigurasi Masa Kompilasi Kelas
Kelas MSC Peranti USB Silicon Labs dan subkelas SCSI boleh dikonfigurasikan pada masa penyusunan melalui #defines yang terdapat dalam sl_usbd_core_config.h file.
Jadual – Pemalar Konfigurasi Generik
Nama Konfigurasi
Penerangan
SL_USBD_MSC_CLASS_INST Bilangan contoh kelas yang anda akan peruntukkan melalui panggilan ke fungsi
ANCE_QUANTITY
sl_usbd_msc_scsi_create_instance() .
SL_USBD_MSC_CONFIGURA Bilangan konfigurasi yang mana contoh kelas boleh ditambah melalui panggilan ke
TION_QUANTITY
fungsi sl_usbd_msc_scsi_add_to_configuration() .
SL_USBD_MSC_LUN_QUANT Bilangan unit logik setiap contoh kelas yang anda akan tambah melalui panggilan ke
ITY
fungsi sl_usbd_msc_scsi_lun_add() .
SL_USBD_MSC_SCSI_64_BIT Mendayakan atau melumpuhkan sokongan untuk Alamat Blok Logik (LBA) sebanyak 64 bit.
_LBA_EN
SL_USBD_MSC_DATA_BUFF Saiz penimbal data bagi setiap contoh kelas dalam bait ER_SIZE
Nilai Lalai
2
1
2
0
512
Penciptaan Contoh Kelas
Mencipta contoh kelas MSC SCSI Peranti USB dilakukan dengan memanggil fungsi sl_usbd_msc_scsi_create_instance() . Fungsi ini mengambil satu hujah konfigurasi yang diterangkan di bawah.
p_scsi_callbacks
p_scsi_callbacks ialah penunjuk kepada struktur konfigurasi jenis sl_usbd_msc_scsi_callbacks_t . Sebagai tambahan kepada panggilan balik kelas peranti usb biasa menyambung/putuskan sambungan, ia menyediakan kelas MSC dengan satu set fungsi panggil balik pilihan yang dipanggil apabila peristiwa berlaku pada unit logik. Penunjuk nol ( NULL ) boleh dihantar ke hujah ini jika tiada panggilan balik diperlukan.
Jadual di bawah menerangkan setiap medan konfigurasi yang tersedia dalam struktur konfigurasi ini.
Jadual – sl_usbd_msc_scsi_callbacks_t Struktur Konfigurasi
Padang
Penerangan
.dayakan
Dipanggil apabila contoh kelas USB berjaya didayakan.
.disable Dipanggil apabila tika kelas USB dinyahdayakan.
.host_eject Fungsi dipanggil apabila unit logik dikeluarkan daripada hos.
Tandatangan Fungsi
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);
Peranti USB Konfigurasi Unit Logik Kelas MSC
Menambah unit logik pada contoh kelas MSC dilakukan dengan memanggil fungsi sl_usbd_msc_lun_add() . Fungsi ini mengambil satu hujah konfigurasi yang diterangkan di bawah.
p_lu_info
p_lu_info ialah penunjuk kepada struktur jenis sl_usbd_msc_scsi_lun_info_t . Tujuannya adalah untuk memberikan maklumat tentang unit logik kepada kelas MSC.
Jadual di bawah menerangkan setiap medan konfigurasi yang tersedia dalam struktur konfigurasi ini.
Jadual – sl_usbd_msc_scsi_lun_info_t Struktur Konfigurasi
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
46/174
Berakhirview
Padang
Penerangan
Padang
.scsi_lun_api_p tr
Penerangan
Tuding kepada API pemacu media yang akan mengendalikan unit logik ini. Lihat Pemacu Storan Kelas MSC Peranti USB untuk mendapatkan maklumat lanjut tentang pemacu storan.
.ve nd o r_id _ p tr
.product_id_ptr
.p ro d uct_ re v isi on_level .is_ re ad _o nly
Tuding kepada rentetan yang mengandungi pengenalan vendor bagi unit logik. Panjang maksimum rentetan ialah 8 aksara. Tuding kepada rentetan yang mengandungi pengenalan produk unit logik. Panjang maksimum rentetan ialah 16 aksara. Tahap semakan produk.
Benderakan yang menunjukkan jika unit logik harus dilihat sebagai dibaca hanya dari titik view daripada hos ( benar ) atau tidak ( palsu ).
Panduan Pengaturcaraan Kelas MSC Peranti USB
Bahagian ini menerangkan cara menggunakan kelas MSC.
Memulakan Peranti USB Kelas MSC Menambah Peranti USB Contoh Kelas MSC SCSI ke Peranti Anda Peranti USB Pengendalian Unit Logik Kelas MSC
Memulakan Kelas MSC Peranti USB
Untuk menambah fungsi kelas MSC SCSI pada peranti anda, mula-mula mulakan kelas asas MSC dan subkelas SCSI dengan memanggil fungsi sl_usbd_msc_init() dan sl_usbd_msc_scsi_init() .
bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_msc_init() dan sl_usbd_msc_scsi_init() .
Example – Memanggil sl_usbd_msc_init() dan sl_usbd_msc_scsi_init()
status sl_status_t;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
Menambah Contoh Kelas MSC SCSI Peranti USB pada Peranti Anda
Untuk menambah kefungsian kelas MSC SCSI pada peranti anda, buat contoh dahulu, kemudian tambahkannya pada konfigurasi peranti anda. Anda mesti menambah sekurang-kurangnya satu unit logik pada contoh anda.
Mencipta Contoh Kelas SCSI MSC
Buat contoh kelas MSC SCSI dengan memanggil fungsi sl_usbd_msc_scsi_create_instance() .
bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_msc_scsi_create_instance() menggunakan argumen lalai. Untuk mendapatkan maklumat lanjut tentang argumen konfigurasi untuk dihantar ke sl_usbd_msc_scsi_create_instance() , lihat Konfigurasi Khusus Aplikasi Kelas MSC Peranti USB.
Example – Memanggil sl_usbd_ msc_scsi_create_instance()
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
47/174
Berakhirview
uint8_t class_nbr; status sl_status_t;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL, .disable = NULL, .host_eject = NULL };
status = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
Menambahkan Contoh Kelas MSC pada Konfigurasi Peranti Anda
Selepas anda mencipta contoh kelas MSC, anda boleh menambahkannya pada konfigurasi dengan memanggil fungsi tersebut
sl_usbd_msc_add_to_configuration() .
bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_msc_scsi_add_to_configuration() menggunakan argumen lalai.
Example – Memanggil sl_usbd_ msc_scsi_add_to_configuration()
status sl_status_t;
status = sl_usbd_msc_scsi_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
(1) Nombor kelas untuk ditambahkan pada konfigurasi yang dikembalikan oleh sl_usbd_msc_scsi_create_instance() . (32) Nombor konfigurasi (di sini menambahkannya pada konfigurasi Kelajuan Penuh).
Pengendalian Unit Logik Kelas MSC Peranti USB
Menambah Unit Logik Melampirkan/Melepaskan Medium Storan
Menambah Unit Logik
Apabila menambah unit logik pada contoh kelas MSC SCSI anda, ia mesti terikat pada medium storan (RAMDisk, kad SD, memori kilat, dll). Kelas MSC menggunakan pemacu storan untuk berkomunikasi dengan media storan. Pemacu ini perlu dibekalkan apabila menambah unit logik.
bekas ituampdi bawah menunjukkan cara menambah unit logik melalui sl_usbd_msc_scsi_lun_add() .
Example – Menambah Unit Logik melalui sl_usbd_msc_scsi_lun_add()
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
48/174
Berakhirview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_status_t
status;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;
lu_info.vendor_id_ptr
= "Makmal Silikon";
lu_info.product_id_ptr
= “peranti blok cthample”;
lu_info.product_revision_level = 0x1000u;
lu_info.is_read_only
= palsu;
status = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
Memasang/Melepaskan Medium Storan
Selepas unit logik telah ditambah, medium storan mesti dilampirkan untuk tersedia dari bahagian hos. Kelas MSC menawarkan dua fungsi untuk mengawal perkaitan media storan kepada unit logik: sl_usbd_msc_scsi_lun_attach() dan sl_usbd_msc_scsi_lun_detach() . Fungsi ini membolehkan anda meniru pengalihan keluar peranti storan untuk mendapatkan semula akses daripada aplikasi terbenam jika perlu.
bekas ituampdi bawah menunjukkan cara menggunakan fungsi sl_usbd_msc_scsi_lun_attach() dan sl_usbd_msc_scsi_lun_detach() .
Example – Media Lampirkan/Detach
status sl_status_t;
status = sl_usbd_msc_scsi_lun_attach(lu_objek_ptr); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
…
(1)
status = sl_usbd_msc_scsi_lun_detach(lu_objek_ptr); jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
…
(2)
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
…
(3)
(1) Mulai saat ini, jika peranti MSC disambungkan kepada hos, media storan boleh diakses.
(2) Jika peranti MSC disambungkan kepada hos, media kini akan kelihatan sebagai tidak tersedia. Pada masa ini, operasi boleh dilakukan pada media daripada aplikasi terbenam.
(3) Sekali lagi, jika peranti MSC disambungkan kepada hos, media storan akan kelihatan sebagai disambungkan.
Pemacu Storan Kelas MSC Peranti USB
Kelas MSC Peranti USB memerlukan pemacu storan untuk berkomunikasi dengan medium storan. Buat masa ini, Silicon Labs tidak menawarkan pemandu.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
49/174
Berakhirview
TPY aa dia pemandu AI ditakrifkan oleh typedef sl_usbd_msc_scsi_lun_api_t . sl_usbd_msc_scsi_lun_api_t v ri ble kami mesti disertakan ke aaaaaaaa sl_usbd_msc_scsi_lun_info_t v ri ble, p ssed s rgument apabila anda dd unit logik dengan sl_usbd_msc_scsi_lun_add() . Lihat bahagian USB Device MSC SCSI API untuk butiran lanjut tentang struktur. Pelaksanaan pemacu storan boleh semudah pelbagai sektor dalam RAM. Saiz sektor biasa (iaitu saiz blok) ialah 512 untuk peranti storan massa dan 2048 untuk CD-ROM.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
50/174
Berakhirview
Berakhirview
Kelas Penjual Peranti USB
Selesai Kelas Penjual Peranti USBview Kelas Penjual Peranti USB Keperluan Sumber daripada Konfigurasi Kelas Penjual Peranti USB Teras Panduan Pengaturcaraan Kelas Penjual Peranti USB Kelas Penjual membolehkan anda membina peranti khusus vendor yang boleh melaksanakan protokol proprietari. Ia bergantung pada sepasang titik akhir pukal untuk memindahkan data antara hos dan peranti. Pemindahan pukal adalah mudah untuk memindahkan sejumlah besar data tidak berstruktur dan menyediakan pertukaran data yang boleh dipercayai dengan menggunakan mekanisme pengesanan ralat dan cuba semula. Selain titik akhir pukal, kelas Vendor juga boleh menggunakan sepasang titik akhir gangguan pilihan. Mana-mana sistem pengendalian (OS) boleh berfungsi dengan kelas Vendor dengan syarat OS mempunyai pemandu untuk mengendalikan kelas Vendor. Bergantung pada OS, pemacu boleh menjadi asli atau khusus vendor. Contohnya, di bawah Microsoft Windows®, aplikasi anda berinteraksi dengan pemacu WinUSB yang disediakan oleh Microsoft untuk berkomunikasi dengan peranti vendor.
Selesai Kelas Penjual Peranti USBview
Rajah – Seni Bina Umum Antara Hos Windows dan Kelas Vendor menunjukkan seni bina umum antara hos dan peranti menggunakan kelas Vendor. Dalam bekas iniampOleh itu, sistem pengendalian hos ialah MS Windows.
Rajah – Seni Bina Umum Antara MS Windows Host dan Kelas Vendor
Di sebelah MS Windows, aplikasi berkomunikasi dengan peranti vendor dengan berinteraksi dengan perpustakaan USB. Perpustakaan, seperti libusb, menawarkan API untuk mengurus peranti dan paip yang berkaitan dengannya, dan untuk berkomunikasi dengan peranti itu melalui titik akhir kawalan, pukal dan gangguan.
Di bahagian peranti, kelas Vendor terdiri daripada titik akhir berikut:
Sepasang titik akhir IN dan OUT kawalan dipanggil titik akhir lalai. Sepasang titik akhir MASUK dan KELUAR pukal.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
51/174
Berakhirview
Sepasang titik akhir IN dan OUT sampukan. Pasangan ini adalah pilihan. Jadual di bawah menunjukkan penggunaan titik akhir yang berbeza:
Jadual – Penggunaan Titik Akhir Kelas Vendor
Arah Titik Akhir
Kawal DALAM
Kawalan
KELUAR
MASUK Pukal
Peranti-tohost
>Hos-kepada peranti
Peranti-tohost
KELUAR pukal
Sampuk IN
menyampuk
KELUAR
hos kepada peranti
Peranti-tohost
hos kepada peranti
Penggunaan
Permintaan standard untuk penghitungan dan permintaan khusus vendor.
Permintaan standard untuk penghitungan dan permintaan khusus vendor.
Komunikasi data mentah. Data boleh distrukturkan mengikut protokol proprietari.
Komunikasi data mentah. Data boleh distrukturkan mengikut protokol proprietari.
Komunikasi atau pemberitahuan data mentah. Data boleh distrukturkan mengikut protokol proprietari. Komunikasi atau pemberitahuan data mentah. Data boleh distrukturkan mengikut protokol proprietari.
Aplikasi peranti boleh menggunakan titik akhir pukal dan gangguan untuk menghantar atau menerima data kepada atau daripada hos. Ia hanya boleh menggunakan titik akhir lalai untuk menyahkod permintaan khusus vendor yang dihantar oleh hos. Permintaan standard diuruskan secara dalaman oleh lapisan Teras Peranti USB Silicon Labs.
Keperluan Sumber Kelas Penjual Peranti USB daripada Teras
Setiap kali anda menambah contoh kelas vendor pada konfigurasi melalui fungsi sl_usbd_vendor_add_to_configuration() , sumber berikut akan diperuntukkan daripada teras.
sumber
Antara muka Antara muka ganti Titik Akhir Kumpulan antara muka
Kuantiti
1 1 2 (4 jika anda mendayakan titik akhir gangguan) 0
Ambil perhatian bahawa nombor tersebut adalah mengikut konfigurasi. Apabila menyediakan nilai konfigurasi SL_USBD_INTERFACE_QUANTITY , SL_USBD_ALT_INTERFACE_QUANTITY , SL_USBD_INTERFACE_GROUP_QUANTITY dan SL_USBD_DESCRIPTOR_QUANTITY anda, jangan lupa untuk mengambil kira bilangan konfigurasi kelas yang akan ditambah. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, memandangkan titik akhir dibuka hanya apabila konfigurasi ditetapkan oleh hos, anda hanya perlu mengambil kira bilangan titik akhir yang diperlukan untuk contoh kelas.
Konfigurasi Kelas Penjual Peranti USB
Dua kumpulan parameter konfigurasi digunakan untuk mengkonfigurasi kelas Vendor:
Konfigurasi Khusus Aplikasi Kelas Penjual Peranti USB Konfigurasi Contoh Kelas Penjual Peranti USB
Konfigurasi Khusus Aplikasi Kelas Penjual Peranti USB
Mula-mula, untuk menggunakan modul kelas Vendor peranti USB Silicon Labs, laraskan konfigurasi masa kompilasi Vendor mentakrifkan mengikut keperluan aplikasi anda. Mereka dikumpulkan semula di dalam pengepala sl_usbd_core_config.h file di bawah bahagian Vendor. Tujuan konfigurasi kuantiti adalah untuk memaklumkan modul peranti USB tentang bilangan objek Penjual USB untuk diperuntukkan.
Jadual di bawah menerangkan setiap definisi konfigurasi.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
52/174
Berakhirview
Jadual – Konfigurasi Penjual Peranti USB Mentakrifkan
Nama Konfigurasi
Penerangan
Nilai Lalai
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Bilangan tika kelas yang anda akan peruntukkan melalui panggilan ke 2 fungsi sl_usbd_vendor_create_instance() .
SL_USBD_VENDOR_CONFIGURATION_QUANTITY Bilangan konfigurasi. Contoh kelas vendor boleh ditambah 1 pada satu atau lebih konfigurasi melalui panggilan ke fungsi sl_usbd_vendor_add_to_configuration() .
Konfigurasi Contoh Kelas Penjual Peranti USB
Bahagian ini mentakrifkan konfigurasi yang berkaitan dengan kejadian kelas Vendor.
Penciptaan Contoh Kelas intr_en selang p_vendor_callbacks
Penciptaan Contoh Kelas
Mencipta contoh kelas Vendor dilakukan dengan memanggil fungsi sl_usbd_vendor_create_instance() , yang mengambil tiga argumen konfigurasi yang diterangkan di bawah.
intr_en
Boolean yang menunjukkan sama ada sepasang titik akhir gangguan perlu ditambah atau tidak.
Nilai
benar palsu
Penerangan
Sepasang titik akhir IN/OUT akan ditambah dan disediakan untuk aplikasi terbenam. Tiada titik akhir gangguan akan ditambah. Hanya sepasang titik akhir MASUK/KELUAR Pukal akan tersedia.
selang waktu
Jika anda menetapkan intr_en kepada true , anda boleh menentukan selang undian titik akhir gangguan (dalam milisaat). Jika anda menetapkan intr_en kepada false , anda boleh menetapkan selang kepada 0 kerana ia akan diabaikan oleh kelas.
p_vendor_callbacks
p_vendor_callbacks ialah penunjuk kepada pembolehubah struktur fungsi panggil balik. yang anda boleh tentukan untuk mengendalikan permintaan kawalan khusus kelas. Jika anda tidak menggunakan sebarang permintaan khusus kelas atau memerlukan pemberitahuan enable/disable, anda boleh menetapkan ini kepada NULL .
bekas ituample di bawah menyediakan tandatangan yang dijangka pengendali permintaan khusus kelas anda.
Example – Tandatangan Fungsi Permintaan Khusus Kelas
batal app_usbd_vendor_req_handle(uint8_t
class_nbr, (1)
const sl_usbd_setup_req_t *p_setup_req); (2)
sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};
(1) Nombor contoh kelas vendor.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
53/174
Berakhirview
(2) Penunjuk kepada permintaan persediaan yang diterima daripada hos.
Panduan Pengaturcaraan Kelas Penjual Peranti USB
Bahagian ini menerangkan cara menggunakan kelas Vendor. Memulakan Kelas Penjual Peranti USB Menambah Contoh Kelas Penjual Peranti USB pada Peranti anda Berkomunikasi menggunakan Kelas Penjual Peranti USB
Memulakan Kelas Penjual Peranti USB
Untuk menambah kefungsian Kelas Vendor pada peranti anda, mulakan mulakan kelas dengan memanggil fungsi USBD_Vendor_Init(). bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_vendor_init() .
Example – Memanggil sl_usbd_vendor_init()
status sl_status_t;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */ }
Menambahkan Contoh Kelas Penjual Peranti USB pada Peranti anda
Untuk menambahkan kefungsian kelas vendor pada peranti anda, anda mesti membuat tika dahulu, kemudian menambahkannya pada konfigurasi peranti anda.
Mencipta Contoh Kelas Vendor Menambah Contoh Kelas Vendor pada Konfigurasi Peranti Anda
Mencipta Contoh Kelas Vendor
Buat contoh kelas Vendor dengan memanggil fungsi sl_usbd_vendor_create_instance() . bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_vendor_create_instance() menggunakan argumen lalai. Untuk mendapatkan maklumat lanjut tentang argumen konfigurasi untuk dihantar ke sl_usbd_vendor_create_instance() , lihat Konfigurasi Contoh Kelas Penjual Peranti USB.
Example – Memanggil sl_usbd_vendor_create_instance()
uint8_t class_nbr; status sl_status_t;
status = sl_usbd_vendor_create_instance(palsu,
(1)
0u,
(2)
app_usbd_vendor_callback_functions, (3)
&class_nbr);
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
(1) Tiada titik akhir Gangguan dengan contoh kelas ini. (2) Selang diabaikan kerana titik akhir Gangguan dilumpuhkan.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
54/174
Berakhirview
(3) Fungsi panggil balik yang merupakan sebahagian daripada aplikasi anda yang mengendalikan permintaan kelas khusus vendor. Lihat Berkomunikasi menggunakan Kelas Penjual Peranti USB untuk mendapatkan maklumat lanjut. Menambah Instance Kelas Vendor pada Konfigurasi Peranti Anda Selepas anda mencipta contoh kelas vendor, anda boleh menambahkannya pada konfigurasi dengan memanggil fungsi USBD_Vendor_ConfigAdd(). bekas ituampdi bawah menunjukkan cara memanggil sl_usbd_vendor_add_to_configuration() menggunakan argumen lalai.
Example – Memanggil sl_usbd_vendor_add_to_configuration()
status sl_status_t;
status = sl_usbd_vendor_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
jika (status ! SL_STATUS_OK) {
/* Ralat telah berlaku. Pengendalian ralat harus ditambah di sini. */
}
(1) Nombor kelas untuk ditambahkan pada konfigurasi yang dikembalikan oleh sl_usbd_vendor_create_instance() . (2) Nombor konfigurasi (di sini menambahkannya pada konfigurasi Kelajuan Penuh).
Berkomunikasi Menggunakan Kelas Penjual Peranti USB
Komunikasi Segerak Umum Permintaan Vendor Komunikasi Asynchronous Umum Kelas Vendor menawarkan fungsi berikut untuk berkomunikasi dengan hos. Untuk butiran lanjut tentang parameter fungsi, lihat API Penjual Peranti USB.
Jadual – Ringkasan API Komunikasi Vendor
Nama fungsi
sl_usb d _v e nd o r_ re ad _b ulk_sy nc() sl_usb d _v e nd o r_write _b ulk_sy nc() sl_usb d _v e nd o r_ re ad _b ulk_asy nc() sl_writes d ulk_asy nc() sl_usb d _v e nd o r_ re ad _inte rrup t_sy nc() sl_usb d _v e nd o r_write _inte rrup t_sy nc() sl_usb d _v e nd o r_ re ad _inte rnc t
()
sl_usb d _v e nd or r_write _inte rrup t_asy nc
()
Operation Receives data from host through bulk OUT endpoint. This function is blocking. Sends data to host through bulk IN endpoint. This function is blocking. Receives data from host through bulk OUT endpoint. This function is non-blocking. Sends data to host through bulk IN endpoint. This function is non-blocking. Receives data from host through interrupt OUT endpoint. This function is blocking. Sends data to host through interrupt IN endpoint. This function is blocking. Receives data from host through interrupt OUT endpoint. This function is non-
menyekat.
Sends data to host through interrupt IN endpoint. This function is non-blocking.
The vendor requests are also another way to communicate with the host. When managing vendor requests sent by the host, the application can receive or send data from or to the host using the control endpoint; you will need to provide an application callback passed as a parameter of sl_usbd_vendor_create_instance() . Synchronous Communication
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
55/174
Berakhirview
Synchronous communication means that the transfer is blocking. When a function is called, the application blocks until the transfer completes with or without an error. A timeout can be specified to avoid waiting forever. The example below shows a read and write that receives data from the host using the bulk OUT endpoint and sends data to the host using the bulk IN endpoint.
Example – Synchronous Bulk Read and Write
__SEJARAH(4) uint8_t rx_buf[2];
__SEJARAH(4) uint8_t tx_buf[2];
uint32_t
xfer_len;
sl_status_t
status;
status = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
status = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
false,
(5)
&xfer_len);
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
(1) The class instance number created with sl_usbd_vendor_create_instance() provides an internal reference to the Vendor class to route the transfer to the proper bulk OUT or IN endpoint.
(2) The application must ensure that the buffer provided to the function is large enough to accommodate all the data. Otherwise, synchronization issues might happen.
(3) In order to avoid an infinite blocking situation, a timeout expressed in milliseconds can be specified. A value of 809 makes the application task wait forever.
(4) Aplikasi ini menyediakan penimbal penghantaran yang dimulakan.
(5) If this flag is set to true , and the transfer length is multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of the transfer.
The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_sync() and sl_usbd_vendor_write_interrupt_sync() , is similar to bulk endpoint communication functions presented in Example – Synchronous Bulk Read and Write.
Komunikasi Tak Segerak
Asynchronous communication means that the transfer is non-blocking. When a function is called, the application passes the transfer information to the device stack and does not block. Other application processing can be done while the transfer is in progress over the USB bus. Once the transfer has completed, a callback function is called by the device stack to inform the application about the transfer completion. The example below shows asynchronous read and write.
Example – Asynchronous Bulk Read and Write
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
56/174
Berakhirview
void app_usbd_vendor_comm (uint8_t class_nbr)
{
__SEJARAH(4) uint8_t rx_buf[2];
__SEJARAH(4) uint8_t tx_buf[2];
sl_status_t
status;
status = sl_usbd_vendor_read_bulk_async(class_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
NULL,
(4)
false);
(6)
jika (status ! SL_STATUS_OK) {
/* $$$$ Kendalikan ralat. */
}
}
(1) (3)
(1) (3)
static void app_usbd_vendor_rx_completed(uint8_t class_nbr,
(3)
void *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
void *p_callback_arg,
sl_status_t status)
{
jika (status ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} lain {
/* $$$$ Kendalikan ralat. */
}
}
static void app_usbd_vendor_tx_completed(uint8_t class_nbr,
(3)
void *p_buf,
uint32_t buf_len,
uint32_t xfer_len,
void *p_callback_arg,
sl_status_t status)
{
jika (status ! SL_STATUS_OK) {
/* $$$$ Do some processing. */
} lain {
/* $$$$ Kendalikan ralat. */
}
}
(1) The class instance number provides an internal reference to the Vendor class to route the transfer to the proper bulk OUT or IN endpoint. (2) The application must ensure that the buffer provided is large enough to accommodate all the data. Otherwise, there may be synchronization issues. (3) The application provides a callback function pointer passed as a parameter. Upon completion of the transfer, the device stack calls this callback function so that the application can finalize the transfer by analyzing the transfer result. For instance, on completion of a read operation, the application might perform processing on the received data. Upon write completion, the application can indicate if the write was successful and how many bytes were sent.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
57/174
Berakhirview
(4) An argument associated with the callback can be also passed. Then in the callback context, some private information can be retrieved. (5) The application provides the initialized transmit buffer. (6) If this flag is set to true , and the transfer length is a multiple of the endpoint maximum packet size, the device stack will send a zero-length packet to the host to signal the end of transfer. The use of interrupt endpoint communication functions, sl_usbd_vendor_read_interrupt_async() and sl_usbd_vendor_write_interrupt_async() , is similar to the bulk endpoint communication functions presented in Example Asynchronous Bulk Read and Write.
Vendor Request
The USB 2.0 specification defines three types of requests: standard, class, and vendor. All standard requests are handled directly by the core layer, while class requests are managed by the proper associated class. Vendor requests can be processed by the vendor class. To process vendor requests, you must provide an application callback as a parameter of sl_usbd_vendor_create_instance() . After a vendor request is received by the USB device, it must be decoded properly. The example below shows vendor request decoding. Certain requests may be required to receive from or send to the host during the data stage of a control transfer. If no data stage is present, you only have to decode the Setup packet. This example shows the three types of data stage management: no data, data OUT and data IN.
Example – Vendor Request Decoding
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
58/174
Berakhirview
#define APP_VENDOR_REQ_NO_DATA
0x01u
#define APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u
#define APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u
#define APP_VENDOR_REQ_DATA_BUF_SIZE
50u
static uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];
static bool app_usbd_vendor_req (uint8_t
class_nbr,
const sl_usbd_setup_req_t *p_setup_req)
(1)
{
bool valid;
status sl_status_t;
uint16_t req_len;
uint32_t xfer_len;
(void)class_nbr;
switch(p_setup_req->bRequest) { case APP_VENDOR_REQ_NO_DATA: valid = true; break;
(2) (3)
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:
(4)
req_len = p_setup_req->wLength;
if (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {
// Not enough room to receive data.
return (false);
}
// Receive data via Control OUT EP. // Wait transfer completion forever. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); if (status ! SL_STATUS_OK) { valid = false; } else { valid = true; } break;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:
(5)
req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;
// Fill buf with a pattern. Mem_Set((void *)&AppVendorReqBuf[0u],
'A',
req_len);
// Send data via Control IN EP. // Wait transfer completion forever. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); if (status ! SL_STATUS_OK) { valid = DEF_FAIL; } else { valid = DEF_OK; } break;
lalai:
(6)
// Request is not supported.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
59/174
Berakhirview
valid =true;break;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Not enough room to receive data.return(false);}// Receive data via Control OUT EP.// Wait transfer completion forever. status =sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,&xfer_len);if(status ! SL_STATUS_OK){ valid =false;}else{ valid =true;}break;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// Fill buf with a pattern.Mem_Set((void *)&AppVendorReqBuf[0u],’A’,
req_len);// Send data via Control IN EP.// Wait transfer completion forever. status =sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,false,&xfer_len);if(status ! SL_STATUS_OK){ valid = DEF_FAIL;}else{ valid = DEF_OK;}break;
default:(6)// Request is not supported. valid = DEF_FAIL;break;}return(valid);}
(1) The core will pass the Setup packet content to your application. The structure sl_usbd_setup_req_t contains the same fields as defined by the USB 2.0 specification (refer to section “9.3 USB Device Requests” of the specification for more details):
typedef struct {
uint8_t bmRequestType; /* Characteristics of request.
*/
uint8_t bRequest; /* Specific request.
*/
uint16_t wValue; /* Varies according to request.
*/
uint16_t wIndex; /* Varies according to request; typically used as index.*/
uint16_t wLength; /* Transfer length if data stage hadir.
*/
} sl_usbd_setup_req_t;
(2) Determine the request. You may use a switch statement if you are using different requests. In this example, there are three different requests corresponding to the three types of the data stage: APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST, and APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) If no data stage is present, you only need to decode the other fields. The presence of a data stage or not is indicated by the field wLength being non-null or null.
(4) If the host sends data to the device, you must call the function sl_usbd_core_read_control_sync() . The buffer provided should be able to contain up to wLength bytes. If any error occurs, return false to the core that will stall the status stage of the control transfer, indicating to the host that the request cannot be processed. true is returned in case of success.
(5) If the host receives data from the device, you must call the function sl_usbd_core_write_control_sync() . If any error occurs, return false to the core that will stall the status stage of the control transfer, indicating to the host that the request cannot be processed. true is returned in case of success.
(6) In this example, all requests not recognized are marked by returning false to the core. This one will stall the data or status stage of the control transfer indicating to the host that the request is not supported.
The host sends vendor requests through a host vendor application. USb libraries, such as libusb, can be used to help you develop your custom host vendor application.
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
60/174
Dokumentasi API
Dokumentasi API
Dokumentasi API
Senarai modul
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API
Penerangan
USB Device API USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
61/174
USB Device API
USB Device API
USB Device API
USB Device API.
Modul
USB Device ACM API USB Device CDC API USB Device Core API USB Device HID API USB Device MSC API USB Device MSC SCSI API USB Device Vendor API
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
62/174
USB Device ACM API
USB Device ACM API
USB Device ACM API
USB Device CDC ACM API.
Modul
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Fungsi
sl_status_t sl_status_t
sl_status_t sl_status_t sl_status_t
sl_status_t
sl_status_t
sl_status_t
sl_status_t sl_status_t sl_status_t sl_status_t sl_status_t
a sl_usbd_cdc_ cm_init(void)
GLOBAL VARIABLES.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
Add a new instance of the CDC ACM serial emulation subclass.
a a a a sl_usbd_cdc_ cm_ dd_to_configur tion(uint8_t subcl ss_nbr, uint8_t config_nbr)
Add a CDC ACM subclass class instance into USB device configuration.
a a sl_usbd_cdc_ cm_is_en bled(uint8_t subclass_nbr, bool *p_enabled)
Get the CDC ACM serial emulation subclass enable state.
a a a sl_usbd_cdc_ cm_re d(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t timeout, uint32_t
*p_xfer_len) Receive data on the CDC ACM serial emulation subclass.
a a a a sl_usbd_cdc_ cm_re d_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, a a a a sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Receive data on the CDC ACM serial emulation subclass asynchronously.
a a sl_usbd_cdc_ cm_write(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t timeout, uint32_t
*p_xfer_len) Send data on the CDC ACM serial emulation subclass.
a a a sl_usbd_cdc_ cm_write_ sync(uint8_t subcl ss_nbr, uint8_t *p_buf, uint32_t buf_len, a a a a sl_usbd_cdc_ sync_function_t sync_fnct, void *p_ sync_ rg)
Send data on the CDC ACM serial emulation subclass asynchronously.
a a a sl_usbd_cdc_ cm_get_line_control_st te(uint8_t subcl ss_nbr, uint8_t *p_line_ctrl)
Return the state of control lines.
a a a sl_usbd_cdc_ cm_get_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Get the current state of the line coding.
a a a sl_usbd_cdc_ cm_set_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
Set a new line coding.
a a a sl_usbd_cdc_ cm_set_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Set a line state event(s).
a a a a sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t subcl ss_nbr, uint8_t events)
Clear a line state event(s).
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
63/174
USB Device ACM API
Makro
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODUL.
#define SL_USBD_CDC_ACM_PARITY_NONE 0u
PORT SETTINGS DEFINES.
#define SL_USBD_CDC_ACM_PARITY_ODD 1u #define SL_USBD_CDC_ACM_PARITY_EVEN 2u #define SL_USBD_CDC_ACM_PARITY_MARK 3u #define SL_USBD_CDC_ACM_PARITY_SPACE 4u #define SL_USBD_CDC_ACM_STOP_BIT_1 0u #define SL_USBD_CDC_ACM_STOP_BIT_1_5 1u #define SL_USBD_CDC_ACM_STOP_BIT_2 2u #define SL_USBD_CDC_ACM_CTRL_BREAK 0 01u
LINE EVENTS FLAGS DEFINES.
#define SL_USBD_CDC_ACM_CTRL_RTS 0 02u #define SL_USBD_CDC_ACM_CTRL_DTR 0 04u #define SL_USBD_CDC_ACM_STATE_DCD 0 01u #define SL_USBD_CDC_ACM_STATE_DSR 0 02u #define SL_USBD_CDC_ACM_STATE_BREAK 0 04u #define SL_USBD_CDC_ACM_STATE_RING 0 08u #define SL_USBD_CDC_ACM_STATE_FRAMING 0 10u #define SL_USBD_CDC_ACM_STATE_PARITY 0 20u #define SL_USBD_CDC_ACM_STATE_OVERUN 0 40u #define SL_USBD_CDC_ACM_CALL_MGMT_DEV 0 01u
CALL MANAGEMENT CAPABILITIES.
#define SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI 0 02u #define SL_USBD_CDC_ACM_CALL_MGMT_DATA_OVER_DCI 0 02u | 0 01u)
Function Documentation
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (void )
GLOBAL VARIABLES. Parameters
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
64/174
USB Device ACM API
taip
batal
Direction N/A
Argument Name
MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS
Initialize the CDC ACM serial emulation subclass.
Pulangan
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.
Penerangan
sl_usbd_cdc_acm_create_instance
sl_status_t sl_usbd_cdc_acm_create_instance (uint16_t line_state_interval, uint16_t call_mgmt_capabilities, sl_usbd_cdc_acm_callbacks_t * p_acm_callbacks, uint8_t * p_subclass_nbr)
Add a new instance of the CDC ACM serial emulation subclass.
Parameter
taip
uint16_t
uint16_t
Direction Argument Name
Penerangan
T/A
line_state_interval Line state notification interval in milliseconds (value must
be a power of 2).
T/A
call_mgmt_capabilities Call Management Capabilities bitmap. OR’ed of the
following flags:
SL_USBD_CDC_ACM_CALL_MGMT_DEV Device handles call management itself. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI Device can send/receive call management information over a Data Class interface.
sl_usbd_cdc_acm_callbacks_t N/A
*
uint8_t *
T/A
p_acm_callbacks p_subclass_nbr
Optional pointers to callback functions to be called on various events.
Param to variable that will receive CDC ACM serial emulation subclass instance number.
Pulangan
Return SL_STATUS_OK on success or another SL_STATUS code on failure.
sl_usbd_cdc_acm_add_to_configuration
sl_status_t sl_usbd_cdc_acm_add_to_configuration (uint8_t subclass_nbr, uint8_t config_nbr)
Add a CDC ACM subclass class instance into USB device configuration.
Parameter
taip
uint8_t uint8_t
Direction N/A N/A
Argument Name
subclass_nbr config_nbr
Description CDC ACM serial emulation subclass instance number. Configuration index to add new test class interface to.
Pulangan
Hak Cipta © 2025 Silicon Laboratories. Hak cipta terpelihara.
65/174
USB Device ACM API
Returns SL_STATUS_OK on success or another SL_STATUS code on failure.
sl_usbd_cdc_acm_is_enabled
sl_status_t sl_usbd_cdc_acm_is_enabled (uint8_t subclass_nbr, bool * p_enabled)
Get the CDC ACM serial emulation subclass enable state.
Parameter
taip
Arah
Argument Name
Penerangan
uint8_t N/A
subclass_nbr CDC ACM serial emulation subclass instance number.
bool * N/A
p_enabled
Boolean to a variable that will receive enable status. The variable is set to true, CDC ACM serial emulation is enabled. The va
Dokumen / Sumber
![]() |
SILICON LABS USB Device Stack [pdf] Manual Arahan USB Device Stack, Device Stack, Stack |