Manual Instruksi Tumpukan Perangkat USB SILICON LABS

Tumpukan Perangkat USB

Spesifikasi

  • Versi USB: 1.5.1
  • Tanggal Rilis: 21 Juli 2025
  • Versi SDK Simplicity: 2025.6.1

Produk Selesaiview

Tumpukan perangkat USB oleh Silicon Labs menyediakan perangkat serbaguna dan
konektivitas USB yang mudah digunakan untuk proyek IoT, memfasilitasi
komunikasi antara koprosesor jaringan dan host.

Fitur

  • Tumpukan perangkat USB yang efisien
  • Ideal untuk proyek IoT
  • Dukungan untuk komunikasi antara koprosesor jaringan dan
    tuan rumah

Petunjuk Penggunaan Produk

Konfigurasi Perangkat USB

Konfigurasikan pengaturan perangkat USB sesuai dengan proyek Anda
persyaratan dengan merujuk ke bagian Konfigurasi Perangkat USB
dalam dokumentasi.

Panduan Pemrograman Perangkat USB

Ikuti Panduan Pemrograman Perangkat USB untuk memahami cara
program dan berinteraksi dengan perangkat USB untuk berbagai
aplikasi.

Kelas Perangkat USB

Bagian Kelas Perangkat USB menyediakan lebih dariview dari yang berbeda
kelas seperti CDC ACM, HID, MSC SCSI, dan Kelas Vendor. Pilih
kelas yang sesuai berdasarkan fungsionalitas perangkat Anda.

Pemecahan Masalah Perangkat USB

Jika Anda mengalami masalah dengan perangkat USB, lihat
Bagian Pemecahan Masalah Perangkat USB untuk solusi dan debugging
kiat.

Host USB Sistem Operasi Microsoft Windows

Jika Anda menggunakan perangkat USB dengan OS Microsoft Windows USB
Tuan rumah, pastikan untuk mengikuti panduan yang diberikan di
dokumentasi untuk integrasi yang mulus.

Tanya Jawab Umum

T: Apa saja contoh yang umum?ampsedikit perangkat yang dapat saya bangun menggunakan
tumpukan USB ini?

A: Tumpukan USB memungkinkan Anda membangun perangkat seperti
Adaptor USB-ke-serial, mouse atau keyboard, penyimpanan yang dapat dilepas
perangkat, dan perangkat khusus.

T: Apakah ada persyaratan perangkat lunak khusus untuk menggunakan ini?
Tumpukan perangkat USB?

A: Perangkat lunak yang kompatibel mencakup Simplicity SDK, Simplicity
Studio, Simplicity Commander, GCC (Koleksi Kompiler GNU),
IAR Embedded Workbench untuk ARM, dan IAR EWARM.

Bus Serial Universal USB

Bus Serial Universal USB

USB Overview Lebihview
Catatan Rilis USB
Spesifikasi dan Fitur Lebih Lanjutview
Konfigurasi Perangkat USB Selesaiview
Panduan Pemrograman Perangkat USBview
Kelas Perangkat USB Berakhirview Kelas CDC ACM Selesaiview Kelas HID Selesaiview Kelas MSC SCSI Selesaiview Kelas Vendor Selesaiview
Dokumentasi API USB API Perangkat USB API ACM Perangkat USB a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t API CDC Perangkat USB a sl_usbd_cdc_subcl ss_driver_t API Inti Perangkat USB
sl_usbd_device_config_t sl_usbd_setup_req_t
API HID Perangkat USB sl_usbd_cl ss_driver_t
sl_usbd_hid_callbacks_t API MSC Perangkat USB
a sl_usbd_msc_subcl ss_driver_t Perangkat USB MSC SCSI API
sl_usbd_msc_scsi_panggilan_balik_t

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

1/174

Bus Serial Universal USB
a sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
API Vendor Perangkat USB sl_usbd_vendor_callbacks_t
Dokumentasi API Pemecahan Masalah Perangkat USB
Lebihview Host USB Sistem Operasi Microsoft Windows
Lebihview

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

2/174

Lebihview
Lebihview
Perangkat USB
USB adalah salah satu antarmuka komunikasi paling sukses dalam sejarah sistem komputer dan merupakan standar de facto untuk menghubungkan periferal komputer. Tumpukan Perangkat USB Silicon Labs adalah modul perangkat USB yang dirancang khusus untuk sistem tertanam. Dibangun dari awal dengan kualitas, skalabilitas, dan keandalan Silicon Labs, tumpukan ini telah melalui proses validasi yang ketat untuk memenuhi spesifikasi USB 2.0. Dokumentasi ini menjelaskan cara menginisialisasi, memulai, dan menggunakan tumpukan Perangkat USB Silicon Labs. Dokumentasi ini menjelaskan berbagai nilai konfigurasi dan kegunaannya. Dokumentasi ini juga mencakup...view teknologi, jenis kemungkinan konfigurasi, prosedur implementasi, dan contohampcontoh penggunaan umum untuk setiap kelas yang tersedia.
Untuk membantu Anda memahami konsep USB dengan cepat, dokumentasi menampilkan banyak contohampbeberapa USB dengan fungsi dasar. Ini adalahamples akan memberi Anda kerangka kerja yang memungkinkan Anda membangun perangkat dengan cepat. Contoh iniamples termasuk:
Adaptor USB ke serial (Kelas Perangkat Komunikasi) Mouse atau keyboard (Kelas Perangkat Antarmuka Manusia) Perangkat penyimpanan yang dapat dilepas (Kelas Penyimpanan Massal) Perangkat khusus (Kelas Vendor)
Berikut ini adalah overview dari bagian dokumentasi:
Spesifikasi dan Fitur Konfigurasi Perangkat USB Panduan Pemrograman Perangkat USB Kelas Perangkat USB
Kelas CDC ACM Kelas HID Kelas MSC Kelas SCSI Kelas Vendor Pemecahan Masalah Perangkat USB Host USB OS Microsoft Windows

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

3/174

USB
USB

Versi USB 1.5.1 21 Juli 2025 – Catatan Rilis
Simplicity SDK Versi 2025.6.1
Tumpukan perangkat USB Silicon Labs yang efisien menawarkan konektivitas USB serbaguna dan mudah digunakan yang ideal untuk proyek IoT, termasuk komunikasi antara koprosesor jaringan dan host. Klik di sini untuk rilis sebelumnya.
Ringkasan Rilis
Fitur Utama | Perubahan API | Perbaikan Bug | Pengaktifan Chip
Fitur Utama
Hanya perubahan platform yang mendasarinya.
Perubahan API
Tidak ada.
Perbaikan Bug
Tidak ada.
Pemberdayaan Chip
Tidak ada.
Fitur Utama
Fitur Baru | Peningkatan | Fitur yang Dihapus | Fitur yang Dihentikan
Fitur Baru
Tidak ada.
Peningkatan
Hanya perubahan platform yang mendasarinya.
Fitur yang Dihapus
Tidak ada.
Fitur Usang
Tidak ada.
Perubahan API
API Baru | API yang Dimodifikasi | API yang Dihapus | API yang Dihapus
API baru

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

4/174

USB
Tidak ada.
API yang dimodifikasi
Tidak ada.
API yang dihapus
Tidak ada.
API yang sudah tidak digunakan lagi
Tidak ada.
Perbaikan Bug
Tidak ada.
Pemberdayaan Chip
Tidak ada.
Aplikasi Example Perubahan
Mantan Baruamples | Modifikasi Examples | Removed Examples | Deprecated Exampsedikit
Mantan Baruampsedikit
Tidak ada.
Modifikasi Exampsedikit
Tidak ada.
Dihapus Kelampsedikit
Tidak ada.
Ex yang sudah tidak digunakan lagiampsedikit
Tidak ada.
Dampak Perubahan Rilis
Pernyataan Dampak | Panduan Migrasi
Pernyataan Dampak
Tidak ada.
Panduan Migrasi
Tidak ada.
Masalah dan Keterbatasan yang Diketahui
Tidak ada.
Menggunakan Rilis Ini

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

5/174

USB

Apa Isi Rilis? | Perangkat Lunak yang Kompatibel | Instalasi dan Penggunaan | Bantuan dan Umpan Balik

Apa isi Siaran Pers?

Aplikasi Tumpukan Perangkat USB Exampsedikit
Perangkat Lunak yang Kompatibel

Perangkat lunak
Simplicity SDK Simplicity Studio Simplicity Commander GCC (Koleksi Kompiler GNU) IAR Embedded Workbench untuk ARM IAR EWARM

Versi atau Varian yang Kompatibel
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)

Instalasi dan Penggunaan

Untuk memulai pengembangan Anda, lihat:
Panduan Pemrograman Perangkat USB. Dokumentasi API.
Untuk informasi tentang Integrasi Secure Vault, lihat Secure Vault.
untuk mengulangview Pemberitahuan Penasihat Keamanan dan Perangkat Lunak dan kelola preferensi pemberitahuan Anda:
ò Buka https://community.silabs.com/. ó Masuk dengan kredensial akun Anda. ô Klik profil Andafile ikon di sudut kanan atas halaman.
õ Pilih Notifikasi dari menu dropdown. ö Di bagian Notifikasi, buka tab Notifikasi Produk Saya untuk melihat notifikasi produk.view Penasihat Keamanan dan Perangkat Lunak Historis
pemberitahuan
÷ Untuk mengelola preferensi Anda, gunakan tab Kelola Notifikasi untuk menyesuaikan pembaruan dan pemberitahuan produk mana yang Anda inginkan.
menerima.
Untuk pengaturan konfigurasi yang direkomendasikan, lihat di sini.
Untuk mempelajari lebih lanjut tentang perangkat lunak dalam rilis ini, baca dokumentasi daring kami.
Bantuan dan Umpan Balik

Hubungi Dukungan Silicon Labs. Untuk menggunakan alat Tanya AI kami dan mendapatkan jawaban, lihat kolom pencarian di bagian atas halaman ini.

Catatan: Ask AI bersifat eksperimental.

Dapatkan bantuan dari komunitas pengembang kami.
Kebijakan Rilis dan Pemeliharaan SDK
Lihat Kebijakan Rilis dan Pemeliharaan SDK kami.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

6/174

Lebihview
Lebihview
Spesifikasi
Mematuhi “Spesifikasi Universal Serial Bus revisi 2.0” Menerapkan “Pemberitahuan Perubahan Teknik Deskriptor Asosiasi Antarmuka (ECN)” Jenis transfer
Kelas USB Interupsi Massal Kontrol Kelas Perangkat Komunikasi (CDC) Model Kontrol Abstrak (ACM) Perangkat Antarmuka Manusia (HID) Kelas Penyimpanan Massal (MSC) Kerangka kerja kelas khusus vendor
Fitur
Dapat diskalakan untuk hanya menyertakan fitur yang diperlukan untuk meminimalkan jejak memori Mendukung kecepatan penuh (12 Mbit/s) Mendukung perangkat komposit (multi-fungsi) Mendukung perangkat multi-konfigurasi Mendukung fungsi penghemat daya USB (perangkat suspend dan resume) Integrasi lengkap Kelas Penyimpanan Massal ke dalam OS Micrium File Modul sistem dikembangkan dengan lapisan abstraksi CMSIS-RTOS2 sehingga dapat bekerja dengan berbagai OS. Silicon Labs GSDK dilengkapi dengan port FreeRTOS dan Micrium OS.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

7/174

Lebihview
Lebihview

Konfigurasi Perangkat USB

Bagian ini membahas cara mengonfigurasi Perangkat USB Silicon Labs. Terdapat tiga kelompok parameter konfigurasi, yaitu:
Konfigurasi Inti Perangkat USB Konfigurasi Informasi Perangkat USB Konfigurasi Perangkat Keras Perangkat USB
Konfigurasi Inti Perangkat USB
Perangkat USB Silicon Labs dapat dikonfigurasi pada waktu kompilasi melalui serangkaian #define yang terletak di sl_usbd_core_config.h filePerangkat USB menggunakan #defines jika memungkinkan karena memungkinkan ukuran kode dan data diskalakan pada waktu kompilasi berdasarkan fitur yang diaktifkan. Hal ini memungkinkan ruang memori hanya-baca (ROM) dan memori akses-acak (RAM) Perangkat USB Silicon Labs disesuaikan berdasarkan kebutuhan aplikasi Anda.
Disarankan: Mulai proses konfigurasi dengan nilai default (disorot dengan huruf tebal).
Bagian-bagian di bawah ini disusun berdasarkan urutan konfigurasi templat file, sl_usbd_core_config.h.
Kelas Konfigurasi Inti Konfigurasi
Konfigurasi Inti
Tabel – Konstanta Konfigurasi Inti Perangkat USB

Deskripsi Konstan

Nilai Default

SL_USBD_TA SK_STACK_ UKURAN

Mengonfigurasi ukuran tumpukan dalam byte tugas inti USBD

4096

SL_USBD_TA SK_PRIORIT Y

Mengonfigurasi prioritas tugas inti USBD. Ini adalah prioritas CMSIS-RTOS2.

osPrioritasTinggi

SL_USBD_A UTO_START _PERANGKAT_USB E

Jika diaktifkan, perangkat USB akan otomatis dimulai setelah kernel dimulai dan 1 tugas inti USBD tersebut dijadwalkan untuk pertama kalinya. Jika dinonaktifkan, aplikasi Anda perlu memanggil sl_usbd_core_start_device() saat siap dideteksi oleh host USB.

SL_USBD_C Jumlah total konfigurasi yang akan ditambahkan melalui sl_usbd_add_configuration()

1

Fungsi ONFIGURATI.

PADA_KUANTITAS

TY

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

8/174

Lebihview

Konstan
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTITAS
SL_USBD _DESKRIPSI
PTOR_Q
UANTITAS
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY

Deskripsi Jumlah total antarmuka USB yang akan ditambahkan untuk semua konfigurasi Anda. Hal ini sangat bergantung pada kelas yang digunakan. Untuk informasi lebih lanjut tentang jumlah antarmuka yang dibutuhkan oleh sebuah instans kelas, lihat bagian "Kebutuhan Sumber Daya dari inti" kelas Anda.
Jumlah total antarmuka alternatif USB yang akan ditambahkan untuk semua konfigurasi Anda. Hal ini sangat bergantung pada kelas yang digunakan. Nilai ini harus selalu sama atau lebih besar dari SL_USBD_INTERFACE_QUANTITY. Untuk informasi lebih lanjut tentang jumlah antarmuka alternatif yang dibutuhkan oleh sebuah instans kelas, lihat bagian "Kebutuhan Sumber Daya dari Inti" kelas Anda.
Jumlah total grup antarmuka USB yang akan ditambahkan untuk semua konfigurasi Anda. Hal ini sangat bergantung pada kelas yang digunakan. Untuk informasi lebih lanjut tentang berapa banyak grup antarmuka yang memerlukan instans kelas, lihat bagian "Kebutuhan Sumber Daya dari Inti" untuk kelas Anda.
Jumlah total deskriptor Endpoint yang akan ditambahkan untuk semua konfigurasi Anda. Hal ini sangat bergantung pada kelas yang digunakan. Untuk informasi selengkapnya tentang jumlah deskriptor endpoint yang dibutuhkan oleh sebuah instans kelas, lihat “Jumlah endpoint” di bagian “Kebutuhan Sumber Daya dari Inti” kelas Anda. Perhatikan bahwa endpoint kontrol tidak perlu dipertimbangkan di sini. Jumlah total string USB. Menetapkan kuantitas ke nol akan menonaktifkan fitur tersebut. Menonaktifkan ini akan menyebabkan perangkat tidak menyimpan string deskripsi USB apa pun yang diteruskan dari aplikasi. Ini berarti host tidak akan dapat mengambil string deskripsi (seperti produsen dan nama produk). Jumlah total endpoint yang dibuka per konfigurasi. Sebuah perangkat memerlukan setidaknya dua endpoint yang dibuka untuk transfer kontrol, tetapi Anda juga harus menambahkan endpoint dari kelas yang digunakan. Untuk informasi selengkapnya tentang jumlah endpoint yang dibuka oleh sebuah instans kelas, lihat “Jumlah endpoint” di bagian “Kebutuhan Sumber Daya dari Inti” kelas Anda.

Nilai Default
10 10
2
Telepon 20 30 20

Konfigurasi Kelas
Kelas memiliki konfigurasi waktu kompilasi yang spesifik. Lihat Kelas Perangkat USB untuk informasi selengkapnya.
Konfigurasi Informasi Perangkat USB

Konfigurasi sl_usbd_device_config.h file mengelompokkan ulang waktu kompilasi #define-s untuk mengatur informasi dasar mengenai perangkat Anda, seperti ID Vendor/Produk, string perangkat, dll. Tabel di bawah ini menjelaskan setiap informasi konfigurasi yang tersedia dalam konfigurasi ini file.

Tabel – Konfigurasi Informasi Perangkat USB Mendefinisikan

Konstan
SL_USBD_PERANGKAT E_VENDOR_ID
SL_USBD_PERANGKAT E_PRODUK_ID

Deskripsi Nomor identifikasi vendor Anda sebagaimana diberikan oleh USB Implementers Forum. Untuk informasi selengkapnya tentang cara mendapatkan ID vendor, kunjungi http://www.usb.org/developers/vendor/. Nomor identifikasi produk Anda.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

9/174

Lebihview

Konstan

Keterangan

SL_USBD_DEVICE_RELEASE Nomor rilis perangkat Anda. _NUMBER

SL_USBD_DEVICE_MANUFA String yang menjelaskan produsen perangkat Anda. Konfigurasi ini diabaikan ketika

STRING_CTURER

konfigurasi SL_USBD_STRING_QUANTITY diatur ke 0.

SL_USBD_DEVICE_PRODUC String yang menjelaskan produk Anda. Konfigurasi ini diabaikan ketika konfigurasi

T_STRING

SL_USBD_STRING_QUANTITY diatur ke 0.

SL_USBD_DEVICE_SERIAL_N String yang berisi nomor seri perangkat Anda. Konfigurasi ini diabaikan ketika

UMBER_STRING

konfigurasi SL_USBD_STRING_QUANTITY diatur ke 0.

SL_USBD_DEVICE_LANGUA Nomor identifikasi bahasa string perangkat Anda. Nilai yang mungkin adalah:
ID_GE

– 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_PRANCIS

– SL_USBD_LANG_ID_JERMAN

– SL_USBD_LANG_ID_YUNANI

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_PORTUGIS

– SL_USBD_LANG_ID_SANSKRIT

Konfigurasi ini diabaikan ketika konfigurasi SL_USBD_STRING_QUANTITY ditetapkan ke 0.

Konfigurasi Perangkat Keras Perangkat USB

Tergantung pada perangkat Silicon Labs yang Anda gunakan, Anda mungkin perlu mengonfigurasi pin dan port GPIO untuk sinyal USB VBUS Sense. Definisi konfigurasi terdapat di header sl_usbd_hardware_config.h. file.

Konstan
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Keterangan
Port GPIO untuk sinyal USB VBUS Sense pada papan Anda. Pin GPIO untuk sinyal USB VBUS Sense pada papan Anda.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

10/174

Lebihview
Lebihview
Panduan Pemrograman Perangkat USB
Bagian ini menjelaskan cara menggunakan modul Perangkat USB.
Pengaturan Awal Modul Perangkat USB
Bagian ini menjelaskan langkah-langkah dasar yang diperlukan untuk menginisialisasi modul Perangkat USB dan untuk menambahkan, menyiapkan, serta memulai perangkat. Inisialisasi Modul Perangkat USB Inisialisasi Inti Perangkat USB Inisialisasi aCl ss Menambahkan Perangkat USB Membangun Perangkat USB Menambahkan Konfigurasi Menambahkan Fungsi USB Memulai Perangkat USB
Fungsi Pengait Peristiwa
Menginisialisasi Modul Perangkat USB
Inisialisasi Inti Perangkat USB
a US a Mulailah dengan menginisialisasi inti modul perangkat B dengan memanggil fungsi sl_usbd_core_init(). Contoh di bawah ini menunjukkan memanggil sl_usbd_core_init().
Example – Memanggil sl_usbd_core_init()
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
Inisialisasi Kelas
Setelah inti modul perangkat USB diinisialisasi, Anda harus menginisialisasi setiap kelas yang ingin Anda gunakan. Lihat bagian "Panduan Pemrograman" di acl Anda untuk informasi selengkapnya.
Membangun Perangkat USB Anda
Menambahkan Konfigurasi
Setelah Anda berhasil menginisialisasi perangkat, Anda dapat mulai menambahkan fungsi USB ke dalamnya, dimulai dengan konfigurasi baru. Perangkat harus memiliki setidaknya satu konfigurasi. Untuk menambahkan konfigurasi, panggil fungsi sl_usbd_core_dd_configuration(). Fungsi ini harus dipanggil untuk setiap konfigurasi yang ingin Anda tambahkan.ampGambar di bawah menunjukkan cara menambahkan Kecepatan Penuh.
Example – Menambahkan Konfigurasi ke Perangkat Anda

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

11/174

Lebihview

sl_status_t status; uint8_t konfigurasi_nbr_fs;

/* Menambahkan konfigurasi kecepatan penuh ke perangkat. */

status = sl_usbd_core_add_configuration(0,

/* Tidak ada atribut khusus untuk konfigurasi. */

100u,

/* Konsumsi daya maks: 100mA.

*/

SL_USBD_KECEPATAN_PERANGKAT_PENUH,

/* Konfigurasi Kecepatan Penuh.

*/

“Konfigurasi Tambah Exampkonfigurasi Kecepatan Penuh”,

&config_nbr_fs);

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

Menambahkan Fungsi USB
Setelah berhasil menambahkan setidaknya satu konfigurasi ke perangkat Anda, Anda dapat menambahkan antarmuka dan titik akhir ke perangkat Anda. Setiap kelas USB memiliki kebutuhannya sendiri dalam hal jenis, jumlah, dan parameter antarmuka dan titik akhir lainnya. Silicon Labs USB Device menambahkan antarmuka dan titik akhir ke dalam kelas yang ditawarkannya.
Dari aplikasi Anda, Anda dapat membuat instance kelas USB dan menambahkannya ke konfigurasi. Untuk informasi selengkapnya tentang konsep instance kelas perangkat USB, lihat Kelas Perangkat USB. Perlu diketahui bahwa Anda dapat membuat instance dan menambahkan banyak instance kelas yang berbeda ke konfigurasi untuk membuat perangkat multifungsi (komposit).
Sang mantanampGambar di bawah menunjukkan cara membuat instance kelas dan menambahkannya ke konfigurasi.
Example – Menambahkan Instansi Kelas ke Perangkat Anda

sl_status_t status; uint8_t kelas_nbr;
/* Buat instance dari kelas yang ingin Anda gunakan.*/ /* Perhatikan bahwa tergantung pada kelasnya, fungsi ini dapat memiliki lebih banyak argumen. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */ }
/* Tambahkan instance kelas ke konfigurasi Kecepatan Penuh. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* Nomor kelas dikembalikan oleh sl_usbd_ _create_instance. */
config_nbr_fs); /* Nomor konfigurasi dikembalikan oleh sl_usbd_core_add_configuration(). */ if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan harus ditambahkan di sini. */ }
Memulai Perangkat USB Anda
Secara default, perangkat akan dimulai secara otomatis oleh tugas inti perangkat USB setelah inisialisasi perangkat selesai dan kernel dimulai. Untuk mengontrol kapan perangkat dimulai dan terlihat oleh host USB, gunakan konfigurasi yang ditentukan SL_USBD_AUTO_START_USB_DEVICE untuk menonaktifkan fitur mulai otomatis. Jika dinonaktifkan, setelah Anda membangun/mempersiapkan perangkat, Anda dapat memulainya dan membuatnya terlihat oleh host USB dengan memanggil fungsi sl_usbd_core_start_device().
Sang mantanampGambar di bawah menunjukkan cara memulai perangkat Anda menggunakan fungsi sl_usbd_core_start_device().
Example – Memulai Perangkat Anda

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

12/174

Lebihview

sl_status_t status;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan harus ditambahkan di sini. */ }

Fungsi Pengait Peristiwa
Modul inti Perangkat USB menawarkan dua fungsi kait lemah yang dapat Anda definisikan ulang di aplikasi Anda. Fungsi-fungsi ini berfungsi untuk memberi tahu ketika peristiwa bus dan konfigurasi terjadi.
Tabel – Fungsi Pengait Acara USB

Peristiwa

Keterangan

Bis

Dipanggil saat peristiwa Bus USB terjadi

Konfigurasi Dipanggil ketika peristiwa Konfigurasi USB terjadi

Tanda Tangan Fungsi
void sl_usbd_on_bus_event(sl_usbd_bus_event_t acara); void sl_usbd_on_config_event(sl_usbd_config_event_t acara, uint8_t config_nbr);

Example – Fungsi Pengait Peristiwa

void sl_usbd_on_bus_event(sl_usbd_bus_event_t acara) { switch (acara) { case SL_USBD_EVENT_BUS_CONNECT:
// dipanggil saat kabel USB dimasukkan ke pemutusan pengontrol host;
case SL_USBD_EVENT_BUS_DISCONNECT: // dipanggil saat kabel USB dilepas dari pemutusan pengontrol host;
case SL_USBD_EVENT_BUS_RESET: // dipanggil saat host mengirim perintah reset break;
case SL_USBD_EVENT_BUS_SUSPEND: // dipanggil saat host mengirimkan perintah suspend break;
case SL_USBD_EVENT_BUS_RESUME: // dipanggil saat host mengirim perintah bangun break;
default: istirahat; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t acara, uint8_t config_nbr) { switch (acara) { case SL_USBD_EVENT_CONFIG_SET:
// dipanggil saat host menetapkan jeda konfigurasi;
case SL_USBD_EVENT_CONFIG_UNSET: // dipanggil saat konfigurasi tidak disetel break;
default: istirahat; } }

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

13/174

Lebihview

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

14/174

Lebihview
Lebihview

Kelas Perangkat USB

Kelas-kelas USB yang tersedia di Perangkat USB Silicon Labs memiliki beberapa karakteristik umum. Bagian ini menjelaskan karakteristik tersebut dan interaksinya dengan lapisan inti.
Untuk informasi lebih lanjut tentang kelas tertentu, lihat berikut ini:
Kelas CDC ACM Kelas HID Kelas MSC SCSI Kelas Vendor
Tentang Class Instances
Kelas-kelas USB yang tersedia di Perangkat USB mengimplementasikan konsep instans kelas. Instans kelas merepresentasikan satu fungsi dalam suatu perangkat. Fungsi tersebut dapat dideskripsikan oleh satu antarmuka atau oleh sekelompok antarmuka dan termasuk dalam suatu kelas tertentu.
Setiap implementasi kelas USB memiliki beberapa konfigurasi dan fungsi yang sama, berdasarkan konsep instans kelas. Konfigurasi dan fungsi yang sama disajikan dalam tabel di bawah ini. Pada judul kolom 'Konstanta atau Fungsi', karakter XXXX dapat diganti dengan nama kelas: CDC, HID, MSC, CDC_ACM, atau VENDOR (Vendor untuk nama fungsi).
Tabel – Konstanta dan Fungsi Terkait dengan Konsep Beberapa Instansi Kelas

Konstanta atau Fungsi
SL_USBD_XXXX_CL JUMLAH_J ...
SL_USBD_XXXX_KONFIGURASI_KUANTITAS
sl_usb d _XXXX_cre ate _insta nce ()
sl_usbd_XXXX_add_to_conf igration()

Keterangan
Mengonfigurasi jumlah maksimum instansi kelas.
Mengonfigurasi jumlah maksimum konfigurasi. Selama inisialisasi kelas, instans kelas yang dibuat akan ditambahkan ke satu atau beberapa konfigurasi. Membuat instans kelas baru.
Menambahkan instans kelas yang ada ke konfigurasi perangkat yang ditentukan.

Dalam hal implementasi kode, kelas akan mendeklarasikan variabel global lokal yang berisi struktur kontrol kelas. Struktur kontrol kelas ini dikaitkan dengan satu instans kelas dan akan berisi informasi spesifik untuk mengelola instans kelas tersebut.
Gambar-gambar berikut menunjukkan beberapa skenario kasus. Setiap gambar mencakup contoh kode.ample yang sesuai dengan skenario kasus.
Gambar – Beberapa Instansi Kelas – Perangkat FS (1 Konfigurasi dengan 1 Antarmuka) merepresentasikan perangkat USB pada umumnya. Perangkat ini berkecepatan penuh (FS) dan hanya memiliki satu konfigurasi. Fungsi perangkat dijelaskan oleh satu antarmuka yang terdiri dari sepasang titik akhir untuk komunikasi data. Satu instans kelas dibuat dan akan memungkinkan Anda untuk mengelola seluruh antarmuka dengan titik akhir terkaitnya.
Gambar – Beberapa Instansi Kelas – Konfigurasi Perangkat FS 1 dengan 1 Antarmuka)

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

15/174

Lebihview

Kode yang sesuai dengan Gambar – Beberapa Instansi Kelas – Perangkat FS (1 Konfigurasi dengan 1 Antarmuka) ditunjukkan pada contohample di bawah.
Example – Beberapa Instansi Kelas – Konfigurasi Perangkat FS 1 dengan 1 Antarmuka)

sl_status_t status; uint8_t kelas_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Tangani peristiwa pengaktifan Kelas. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Tangani peristiwa penonaktifan Kelas. */ }

sl_usbd_XXXX_panggilan_balik_t kelas_panggilan_balik = {

(1)

.aktifkan = app_usbd_XXXX_aktifkan,

.nonaktifkan = app_usbd_XXXX_nonaktifkan

};

status = sl_usbd_XXXX_init();

(2)

jika (status ! SL_STATUS_OK) {

/* $$$$ Tangani kesalahan. */

}

status = sl_usbd_XXXX_create_instance(&kelas_panggilan_balik,

(3)

&kelas_0);

jika (status ! SL_STATUS_OK) {

/* $$$$ Tangani kesalahan. */

}

status = sl_usbd_XXXX_tambahkan_ke_konfigurasi(kelas_0, konfigurasi_0);

(4)

jika (status ! SL_STATUS_OK) {

/* $$$$ Tangani kesalahan. */

}

(1) Setiap kelas menawarkan serangkaian fungsi panggilan balik untuk peristiwa koneksi/putus perangkat dan untuk peristiwa khusus kelas. Objek struktur panggilan balik diteruskan sebagai argumen saat membuat instans kelas dengan sl_usbd_XXXX_create_instance().
fungsi.
(1) Inisialisasi kelas. Semua variabel internal, struktur, dan port kelas akan diinisialisasi. Perhatikan bahwa fungsi Init() di beberapa kelas mungkin memerlukan argumen lain.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

16/174

Lebihview
(2) Buat instance kelas, yaitu class_0. Fungsi sl_usbd_XXXX_create_instance() mengalokasikan struktur kontrol kelas yang terkait dengan class_0. Bergantung pada kelasnya, sl_usbd_XXXX_create_instance() mungkin memiliki parameter tambahan selain nomor kelas yang mewakili informasi khusus kelas yang disimpan dalam struktur kontrol kelas. (3) Tambahkan instance kelas, class_0, ke nomor konfigurasi yang ditentukan, config_0. sl_usbd_XXXX_add_to_configuration() akan membuat antarmuka 0 dan titik akhir IN dan OUT yang terkait. Akibatnya, instance kelas mencakup antarmuka 0 dan titik akhirnya. Setiap komunikasi yang dilakukan pada antarmuka 0 akan menggunakan nomor instance kelas, class_0. Gambar – Beberapa Instans Kelas – Perangkat FS (2 Konfigurasi dan Beberapa Antarmuka) mewakili contoh yang lebih kompleksample. Perangkat berkecepatan penuh terdiri dari dua konfigurasi. Perangkat tersebut memiliki dua fungsi yang termasuk dalam kelas yang sama, tetapi masing-masing fungsi dijelaskan oleh dua antarmuka dan memiliki sepasang titik akhir dua arah. Dalam contoh iniampMisalnya, dua instans kelas dibuat. Setiap instans kelas dikaitkan dengan sekelompok antarmuka, berbeda dengan Gambar – Beberapa Instans Kelas – Perangkat FS (1 Konfigurasi dengan 1 Antarmuka) dan Gambar – Beberapa Instans Kelas – Perangkat FS (2 Konfigurasi dan Beberapa Antarmuka) di mana instans kelas dikaitkan dengan satu antarmuka.
Gambar – Beberapa Instansi Kelas – Konfigurasi Perangkat FS 2 dan Beberapa Antarmuka)

Kode yang sesuai dengan Gambar – Beberapa Instansi Kelas – Perangkat FS (2 Konfigurasi dan Beberapa Antarmuka) ditunjukkan pada contohample di bawah. Penanganan kesalahan dihilangkan demi kejelasan.
Example – Beberapa Instansi Kelas – Konfigurasi Perangkat FS 2 dan Beberapa Antarmuka)

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

17/174

Lebihview

sl_status_t status; uint8_t kelas_0; uint8_t kelas_1;
status = sl_usbd_XXXX_init();
status = sl_usbd_XXXX_membuat_instansi(&kelas_0); status = sl_usbd_XXXX_membuat_instansi(&kelas_1);
status = sl_usbd_XXXX_tambahkan_ke_konfigurasi(kelas_0, cfg_0); status = sl_usbd_XXXX_tambahkan_ke_konfigurasi(kelas_1, cfg_0);
status = sl_usbd_XXXX_tambahkan_ke_konfigurasi(kelas_0, cfg_1); status = sl_usbd_XXXX_tambahkan_ke_konfigurasi(kelas_1, cfg_1);

(1)
(2) (3)
(4) (5)
(6) (6)

(1) Inisialisasi kelas. Semua variabel internal, struktur, dan port kelas akan diinisialisasi.
(2) Buat instance kelas, class_0 . Fungsi sl_usbd_XXXX_create_instance() mengalokasikan struktur kontrol kelas yang terkait dengan class_0 .
(3) Buat instance kelas, class_1 . Fungsi sl_usbd_XXXX_create_instance() mengalokasikan struktur kontrol kelas lain yang terkait dengan class_1 .
(4) Tambahkan instans kelas, class_0, ke konfigurasi, cfg_0. sl_usbd_XXXX_add_to_configuration() akan membuat antarmuka 0, antarmuka 1, antarmuka alternatif, dan titik akhir IN dan OUT terkait. Nomor instans kelas, class_0, akan digunakan untuk komunikasi data apa pun pada antarmuka 0 atau antarmuka 1.
(5) Tambahkan instans kelas, class_1, ke konfigurasi, cfg_0. sl_usbd_XXXX_add_to_configuration() akan membuat antarmuka 2, antarmuka 3, dan titik akhir MASUK dan OUT yang terkait. Nomor instans kelas, class_1, akan digunakan untuk komunikasi data apa pun pada antarmuka 2 atau antarmuka 3.
(6) Tambahkan instance kelas yang sama, class_0 dan class_1 , ke konfigurasi lainnya, cfg_1 .
Setiap kelas mendefinisikan struktur bertipe sl_usbd_XXXX_callbacks_t. Tujuannya adalah untuk memberikan setiap kelas sekumpulan fungsi panggilan balik yang akan dipanggil ketika suatu peristiwa terjadi. Terdapat dua fungsi panggilan balik di setiap kelas. Fungsi-fungsi tersebut disajikan dalam tabel di bawah ini.
Tabel – Fungsi Panggilan Balik Kelas Umum

Bidang Deskripsi .enable Dipanggil saat instans kelas USB berhasil diaktifkan. .disable Dipanggil saat instans kelas USB dinonaktifkan.

Fungsi Tanda Tangan void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

18/174

Lebihview
Lebihview
Perangkat USB Kelas CDC ACM
Perangkat USB Kelas Dasar CDC Berakhirview Kebutuhan Sumber Daya Kelas CDC ACM Perangkat USB dari Subkelas Inti Perangkat USB CDC ACMview Konfigurasi Kelas ACM CDC Perangkat USB Panduan Pemrograman Kelas ACM CDC Perangkat USB
Bagian ini menjelaskan kelas Communications Device Class (CDC) dan subkelas CDC terkait yang didukung oleh tumpukan Perangkat USB Silicon Labs. Perangkat USB Silicon Labs saat ini mendukung subkelas Abstract Control Model (ACM), yang umum digunakan untuk emulasi serial.
CDC mencakup berbagai perangkat telekomunikasi dan jaringan. Perangkat telekomunikasi meliputi modem analog, telepon analog dan digital, adaptor terminal ISDN, dll. MisalnyaampPerangkat jaringan berisi modem ADSL dan kabel, adaptor Ethernet, dan hub. CDC mendefinisikan kerangka kerja untuk merangkum standar layanan komunikasi yang ada, seperti V.250 (untuk modem melalui jaringan telepon) dan Ethernet (untuk perangkat jaringan area lokal), menggunakan tautan USB. Perangkat komunikasi bertanggung jawab atas manajemen perangkat, manajemen panggilan bila diperlukan, dan transmisi data.
CDC mendefinisikan tujuh kelompok utama perangkat. Setiap kelompok termasuk dalam suatu model komunikasi, yang dapat mencakup beberapa subkelas. Setiap kelompok perangkat memiliki dokumen spesifikasinya sendiri selain kelas dasar CDC. Ketujuh kelompok tersebut adalah:
Jaringan Telepon Umum (PSTN), perangkat termasuk modem pita suara, telepon, dan perangkat emulasi serial. Perangkat Jaringan Digital Layanan Terpadu (ISDN), termasuk adaptor terminal dan telepon. Perangkat Model Kontrol Ethernet (ECM), termasuk perangkat yang mendukung keluarga IEEE 802 (misalnya: modem kabel dan ADSL, adaptor WiFi). Perangkat Mode Transfer Asinkron (ATM), termasuk modem ADSL dan perangkat lain yang terhubung ke jaringan ATM (workstation, router, switch LAN). Perangkat Komunikasi Seluler Nirkabel (WMC), termasuk perangkat handset komunikasi multifungsi yang digunakan untuk mengelola komunikasi suara dan data. Perangkat Model Emulasi Ethernet (EEM) yang bertukar data berbingkai Ethernet. Perangkat Model Kontrol Jaringan (NCM), termasuk perangkat jaringan berkecepatan tinggi (modem Akses Paket Berkecepatan Tinggi, Peralatan Terminal Jalur).
CDC dan implementasi subkelas terkait mematuhi spesifikasi berikut:
Universal Serial Bus, Definisi Kelas untuk Perangkat Komunikasi, Revisi 1.2, 3 November 2010. Universal Serial Bus, Komunikasi, Subkelas untuk Perangkat PSTN, Revisi 1.2, 9 Februari 2007.
Perangkat USB Kelas Dasar CDC Berakhirview
Perangkat CDC terdiri dari antarmuka berikut untuk menerapkan kemampuan komunikasi:
Antarmuka Kelas Komunikasi (CCI) bertanggung jawab atas manajemen perangkat dan secara opsional manajemen panggilan.
Manajemen perangkat memungkinkan konfigurasi dan kontrol umum perangkat serta notifikasi kejadian kepada host. Manajemen panggilan memungkinkan pembentukan dan penghentian panggilan. Manajemen panggilan dapat dimultipleks melalui DCI. CCI wajib untuk semua perangkat CDC. CCI mengidentifikasi fungsi CDC dengan menentukan model komunikasi yang didukung oleh perangkat CDC. Antarmuka setelah CCI dapat berupa antarmuka kelas USB apa pun yang telah ditentukan, seperti Audio atau antarmuka khusus vendor. Antarmuka khusus vendor direpresentasikan secara spesifik oleh DCI.
Antarmuka Kelas Data (DCI) bertanggung jawab atas transmisi data. Data yang dikirim dan/atau diterima tidak mengikuti aturan tertentu.
Format. Data dapat berupa data mentah dari jalur komunikasi, data yang mengikuti format kepemilikan, dll. Semua DCI setelah CCI dapat dilihat sebagai antarmuka subordinat.
Perangkat CDC harus memiliki setidaknya satu CCI dan nol atau lebih DCI. Satu CCI dan setiap DCI subordinat bersama-sama menyediakan fitur bagi host. Kemampuan ini juga disebut sebagai fungsi. Dalam perangkat komposit CDC, Anda dapat memiliki beberapa

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

19/174

Lebihview
Oleh karena itu, perangkat tersebut akan terdiri dari beberapa set CCI dan DCI seperti yang ditunjukkan pada Gambar – Perangkat Komposit CDC.
Gambar – Perangkat Komposit CDC

Perangkat CDC kemungkinan menggunakan kombinasi titik akhir berikut:
Sepasang titik akhir kontrol MASUK dan OUT disebut titik akhir default. Titik akhir MASUK massal atau interupsi opsional. Sepasang titik akhir MASUK dan OUT massal atau isochronous. Perlu diketahui bahwa tumpukan perangkat USB Silicon Labs saat ini tidak mendukung titik akhir isochronous.
Tabel di bawah ini menunjukkan penggunaan berbagai titik akhir dan antarmuka CDC tempat titik akhir tersebut digunakan.
Tabel – Penggunaan Titik Akhir CDC

Titik akhir
Kontrol DI
Kontrol KELUAR
Interupsi atau massal DALAM Massal atau isochronous DALAM Massal atau isochronous
KELUAR

Arah
Perangkat yang dihosting
Host-ke-perangkat
Perangkat yang dihosting
Perangkat yang dihosting
Host-ke-perangkat

Penggunaan Antarmuka

CCI

Permintaan standar untuk enumerasi, permintaan khusus kelas, perangkat

manajemen, dan secara opsional memanggil manajemen.

CCI

Permintaan standar untuk enumerasi, permintaan khusus kelas, perangkat

manajemen, dan secara opsional memanggil manajemen.

CCI

Pemberitahuan kejadian, seperti deteksi dering, status saluran serial, status jaringan.

DCI

Komunikasi data mentah atau terformat.

DCI

Komunikasi data mentah atau terformat.

Sebagian besar perangkat komunikasi menggunakan titik akhir interupsi untuk memberi tahu host tentang kejadian. Titik akhir isokron tidak boleh digunakan untuk transmisi data ketika protokol proprietary bergantung pada transmisi ulang data jika terjadi kesalahan protokol USB. Komunikasi isokron secara inheren dapat kehilangan data karena tidak memiliki mekanisme coba ulang.
Tujuh model komunikasi utama mencakup beberapa subkelas. Sebuah subkelas menjelaskan bagaimana perangkat seharusnya menggunakan CCI untuk menangani manajemen perangkat dan manajemen panggilan. Tabel di bawah ini menunjukkan semua subkelas yang memungkinkan dan model komunikasi yang dimilikinya.
Tabel – Subkelas CDC

Subkelas
Abstrak Model Kontrol Garis Langsung

Model Komunikasi
PSTN
PSTN

ExampJumlah Perangkat yang Menggunakan Subkelas Ini
Perangkat modem yang dikontrol langsung oleh host USB
Perangkat emulasi serial, perangkat modem yang dikontrol melalui set perintah serial

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

20/174

Lebihview

Subkelas

Model Komunikasi

ExampJumlah Perangkat yang Menggunakan Subkelas Ini

Model Kontrol Telepon

PSTN

Model ISDN Kontrol Multi-Saluran

Model Kontrol CAPI ISDN

Model Kontrol ECM Jaringan Ethernet

Jaringan ATM

ATM

Model Kontrol

Model Kontrol Handset Nirkabel

Bahasa Inggris WMC

Manajemen Perangkat WMC

Model Jalur Langsung Seluler

Bahasa Inggris WMC

OBEX

Bahasa Inggris WMC

Model EEM Emulasi Ethernet

Model Kontrol Jaringan

NCM

Perangkat telepon suara
Adaptor terminal tarif dasar, adaptor terminal tarif primer, telepon
Adaptor terminal tarif dasar, adaptor terminal tarif primer, modem kabel DOC-SIS telepon, modem ADSL yang mendukung emulasi PPPoE, adaptor Wi-Fi (keluarga IEEE 802.11), adaptor IEEE 802.3, modem ADSL
Peralatan terminal seluler yang terhubung ke perangkat nirkabel
Peralatan terminal seluler yang terhubung ke perangkat nirkabel Peralatan terminal seluler yang terhubung ke perangkat nirkabel
Peralatan terminal seluler yang terhubung ke perangkat nirkabel. Perangkat yang menggunakan frame Ethernet sebagai lapisan transport berikutnya. Tidak ditujukan untuk perangkat routing dan konektivitas internet. Adaptor IEEE 802.3 yang membawa bandwidth data berkecepatan tinggi di jaringan.

Kebutuhan Sumber Daya Kelas CDC ACM Perangkat USB dari Inti

Setiap kali Anda menambahkan instans kelas CDC ACM ke konfigurasi USB melalui panggilan ke fungsi sl_usbd_cdc_acm_add_to_configuration() , sumber daya berikut akan dialokasikan dari inti.

Sumber
Antarmuka Antarmuka alternatif Titik akhir Grup antarmuka

Kuantitas
Telepon: 2 2 3 1

Perhatikan bahwa angka-angka tersebut adalah per konfigurasi. Saat mengatur nilai konfigurasi SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY, dan SL_USBD_DESCRIPTOR_QUANTITY, jangan lupa untuk memperhitungkan berapa banyak konfigurasi yang akan ditambahkan ke kelas. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, karena titik akhir hanya dibuka ketika konfigurasi ditetapkan oleh host, Anda hanya perlu memperhitungkan jumlah titik akhir yang dibutuhkan untuk sebuah instans kelas.
Subkelas ACM CDC Perangkat USB Berakhirview

Kelas dasar CDC terdiri dari Antarmuka Kelas Komunikasi (CCI) dan Antarmuka Kelas Data (DCI), yang dibahas secara rinci di Kelas Dasar CDC Perangkat USBview Bagian ini membahas CCI tipe ACM. CCI ini terdiri dari titik akhir default untuk elemen manajemen dan titik akhir interupsi untuk elemen notifikasi. Sepasang titik akhir massal digunakan untuk membawa data yang tidak ditentukan melalui DCI.
Subkelas ACM digunakan oleh dua jenis perangkat komunikasi:
Perangkat yang mendukung perintah AT (misalnya, modem pita suara). Perangkat emulasi serial yang juga disebut perangkat port COM Virtual.
Terdapat beberapa permintaan khusus untuk subkelas ACM. Permintaan ini memungkinkan Anda untuk mengontrol dan mengonfigurasi perangkat. Daftar lengkap dan deskripsi semua permintaan ACM dapat ditemukan dalam spesifikasi.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

21/174

Lebihview Subkelas untuk Perangkat PSTN, revisi 1.2, 9 Februari 2007=, bagian 6.2.2.
Dari daftar ini, subkelas ACM Silicon Labs9 mendukung hal berikut:
Tabel – Permintaan ACM yang Didukung oleh Silicon Labs

Deskripsi Permintaan Subkelas

SetCommFeature GetCommFeature ClearCommFeature

Host mengirimkan permintaan ini untuk mengontrol pengaturan fitur komunikasi tertentu. Tidak digunakan untuk emulasi serial.
Host mengirimkan permintaan ini untuk mendapatkan pengaturan terkini untuk fitur komunikasi tertentu. Tidak digunakan untuk emulasi serial.
Host mengirimkan permintaan ini untuk menghapus pengaturan fitur komunikasi tertentu. Tidak digunakan untuk emulasi serial.

SetLineCoding

Host mengirimkan permintaan ini untuk mengonfigurasi pengaturan perangkat ACM: laju baud, jumlah bit henti, jenis paritas, dan jumlah bit data. Untuk emulasi serial, permintaan ini dikirim secara otomatis oleh terminal serial setiap kali Anda mengonfigurasi pengaturan serial untuk port COM virtual yang terbuka.

Dapatkan Kode Baris

Host mengirimkan permintaan ini untuk mendapatkan pengaturan ACM saat ini (laju baud, bit henti, paritas, bit data). Untuk emulasi serial, terminal serial mengirimkan permintaan ini secara otomatis saat port COM virtual dibuka.

SetControlLineState Host mengirimkan permintaan ini untuk mengontrol operator modem half-duplex dan menunjukkan apakah Peralatan Terminal Data (DTE) siap atau tidak. Dalam kasus emulasi serial, DTE adalah terminal serial. Untuk emulasi serial, terminal serial tertentu memungkinkan Anda mengirimkan permintaan ini dengan kontrol yang telah diatur.

Atur Istirahat

Host mengirimkan permintaan ini untuk menghasilkan pemutusan bergaya RS-232. Untuk emulasi serial, terminal serial tertentu memungkinkan Anda mengirimkan permintaan ini.

Subkelas ACM Silicon Labs9 menggunakan titik akhir interupsi IN untuk memberi tahu host tentang status saluran serial saat ini. Saluran serial
status garis adalah bitmap yang memberi tahu host tentang:

Data dibuang karena kelebihan muatan Kesalahan paritas Kesalahan pembingkaian Status deteksi sinyal cincin Status mekanisme deteksi putus Status pembawa transmisi Status deteksi pembawa penerima

Implementasi subkelas ACM Silicon Labs9 mematuhi spesifikasi berikut:
Universal Serial Bus, Komunikasi, Subkelas untuk Perangkat PSTN, revisi 1.2, 9 Februari 2007.
Konfigurasi Kelas ACM CDC Perangkat USB

Bagian ini membahas cara mengonfigurasi Kelas CDC ACM (Kelas Perangkat Komunikasi, Model Kontrol Abstrak). Terdapat dua kelompok parameter konfigurasi:
Konfigurasi Spesifik Aplikasi Kelas CDC ACM Perangkat USB Konfigurasi Instans Kelas CDC ACM Perangkat USB
Konfigurasi Spesifik Aplikasi Kelas CDC ACM Perangkat USB

Kelas Dasar CDC Subkelas ACM
Kelas Dasar CDC

Pertama, untuk menggunakan modul kelas CDC perangkat USB Silicon Labs, Anda perlu menyesuaikan konfigurasi waktu kompilasi CDC #define-s sesuai dengan kebutuhan aplikasi Anda. Konfigurasi tersebut dikelompokkan ulang di dalam header sl_usbd_core_config.h. file di bagian CDC. Tujuannya adalah untuk memberi tahu modul perangkat USB tentang berapa banyak objek CDC USB yang akan dialokasikan.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

22/174

Lebihview

Tabel di bawah ini menjelaskan setiap bidang konfigurasi yang tersedia dalam struktur konfigurasi ini.
Tabel – Definisi Konfigurasi CDC Perangkat USB

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

Keterangan
Jumlah instance kelas yang akan Anda alokasikan melalui panggilan ke fungsi
sl_usbd_cdc_acm_create_instance() .
Jumlah konfigurasi. Instans kelas ACM dapat ditambahkan ke satu atau lebih konfigurasi aaaa vi c ll ke sl_usbd_cdc_acm_add_to_configuration().
Jumlah total antarmuka data (DCI) untuk semua fungsi CDC. Setiap fungsi CDC ACM yang menambahkan vi c ll ke fungsi sl_usbd_cdc_acm_create_instance() akan menambahkan antarmuka dt.

Nilai Default
2
1
2

Subkelas ACM
Subkelas ACM memiliki satu konfigurasi waktu kompilasi yang ditunjukkan dalam tabel di bawah.
Tabel – Definisi Konfigurasi CDC ACM Perangkat USB

Nama Konfigurasi
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY

Keterangan
Mengonfigurasi jumlah instans subkelas yang akan Anda alokasikan melalui panggilan ke
fungsi sl_usbd_cdc_acm_create_instance() .

Nilai Default
2

Konfigurasi Instans Kelas CDC ACM Perangkat USB

Bagian ini mendefinisikan konfigurasi yang terkait dengan instans kelas serial CDC ACM. Pembuatan Instans Kelas, interval status baris, kapabilitas manajemen panggilan, p_acm_callbacks
Pembuatan Instansi Kelas

Untuk membuat instans kelas serial CDC ACM, panggil fungsi T a sl_usbd_cdc_acm_create_instance(). Fungsi ini memiliki tiga argumen konfigurasi, seperti dijelaskan di sini.

interval_keadaan_garis
Ini adalah interval (dalam milidetik) di mana instans kelas serial CDC ACM Anda akan melaporkan pemberitahuan status baris ke host T aa. Nilai ini harus pangkat dua (1, 2, 4, 8, 16, dst.).

kemampuan_manajemen_panggilan
Bitmap Kemampuan Manajemen Panggilan. Nilai bitmap yang mungkin adalah sebagai berikut:

Nilai (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI

Keterangan
Perangkat menangani manajemen panggilan itu sendiri. Perangkat dapat mengirim/menerima informasi manajemen panggilan melalui antarmuka Kelas Data.

p_acm_panggilan_balik

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

23/174

Lebihview

aa M aa p_acm_callbacks adalah penunjuk ke struktur bertipe sl_usbd_cdc_acm_callbacks_t. Tujuannya adalah untuk memberikan CDC AC Cl ss serangkaian fungsi panggilan balik yang akan dipanggil ketika peristiwa CDC ACM terjadi. Tidak semua panggilan balik bersifat wajib dan penunjuk null ( NULL ) dapat diteruskan dalam variabel struktur panggilan balik ketika panggilan balik tidak diperlukan. Tabel di bawah ini menjelaskan setiap kolom konfigurasi yang tersedia dalam struktur konfigurasi ini.
Tabel – Struktur Konfigurasi sl_usbd_cdc_acm _callbacks_t

Lapangan

Keterangan

.memungkinkan

Dipanggil saat instance kelas USB diaktifkan

berhasil.

.cacat

Dipanggil saat instansi kelas USB dinonaktifkan.

.line_control_changed Dipanggil saat perubahan kontrol baris diterima.

line_coding_changed Dipanggil saat perubahan kode baris diterima.

Tanda Tangan Fungsi
batalkan app_usbd_cdc_acm_enable(uint8_t subkelas_nbr);
batalkan 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_pengkodean_baris

Lihat bagian Mendaftarkan Panggilan Balik Pemberitahuan Acara untuk fungsi panggilan balik misalnyaampsaya.
Panduan Pemrograman Kelas ACM CDC Perangkat USB

Bagian ini menjelaskan cara menggunakan kelas Model Kontrol Abstrak CDC. Menginisialisasi Kelas CDC ACM Perangkat USB Menambahkan Instans Kelas CDC ACM Perangkat USB ke Perangkat Anda Berkomunikasi Menggunakan Kelas CDC ACM
Inisialisasi Perangkat USB Kelas CDC ACM

Untuk menambahkan fungsionalitas kelas CDC ACM ke perangkat Anda, Anda harus terlebih dahulu menginisialisasi kelas dasar CDC dan subkelas ACM dengan mengisi fungsi sl_usbd_cdc_init() dan sl_usbd_cdc_acm_init(). Contoh di bawah ini menunjukkan cara memanggil sl_usbd_cdc_init() dan sl_usbd_cdc_acm_init() menggunakan argumen default.

Example – Inisialisasi Kelas ACM CDC

sl_status_t status;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
Menambahkan Instansi Kelas CDC ACM Perangkat USB ke Perangkat Anda
Untuk menambahkan fungsionalitas kelas CDC ACM ke perangkat Anda, Anda harus membuat sebuah instans, lalu menambahkannya ke konfigurasi perangkat Anda.
Membuat Instansi Kelas CDC ACM

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

24/174

Lebihview
Menambahkan Instansi Kelas CDC ACM ke Konfigurasi Perangkat Anda Mendaftarkan Panggilan Balik Pemberitahuan Peristiwa
Membuat Instansi Kelas CDC ACM
aa M aaa Buat instance kelas AC CDC dengan memanggil fungsi sl_usbd_cdc_acm_create_instance(). Contoh di bawah ini menunjukkan cara membuat instance kelas AC CDC melalui sl_usbd_cdc_acm_create_instance().
Example – Membuat Fungsi CDC ACM melalui sl_usbd_cdc_acm_create_instance()

uint8_t subkelas_nbr; sl_status_t status;
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, &nomor_subkelas);
if (status !SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
Menambahkan Instansi Kelas CDC ACM ke Konfigurasi Perangkat Anda
Setelah Anda membuat instance kelas CDC ACM, Anda dapat menambahkannya ke konfigurasi dengan memanggil fungsi
sl_usbd_cdc_acm_tambahkan_ke_konfigurasi() .
Contoh di bawah ini menunjukkan cara memanggil sl_usbd_cdc_acm_add_to_configuration().
Example – Panggilan ke USBD ACM sl_usbd_cdc_acm_add_to_configuration()

sl_status_t status;

status = sl_usbd_cdc_acm_tambahkan_ke_konfigurasi(subkelas_nbr,

(1)

konfigurasi_nbr_fs);

(2)

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

aaa (1) Nomor Cl ss untuk dd ke konfigurasi yang dikembalikan oleh sl_usbd_cdc_acm_create_instance() . (2) Nomor konfigurasi (di sini menambahkannya ke konfigurasi Kecepatan Penuh).
Mendaftarkan Panggilan Balik Notifikasi Acara
Kelas Serial CDC ACM dapat memberi tahu aplikasi Anda tentang perubahan apa pun dalam kontrol baris atau pengkodean melalui fungsi panggilan balik notifikasi. Struktur fungsi panggilan balik dapat diteruskan sebagai argumen selama pembuatan instans ACM. Perhatikan bahwa panggilan balik tersebut bersifat opsional. Contoh:ample – Pendaftaran Panggilan Balik CDC ACM mengilustrasikan penggunaan fungsi pendaftaran panggilan balik.ample – Implementasi Panggilan Balik CDC ACM menunjukkan sebuah contohample implementasi fungsi panggilan balik.
Example – Pendaftaran Panggilan Balik CDC ACM

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

25/174

Lebihview

uint8_t subkelas_nbr; sl_status_t status;
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_berubah, app_usbd_cdc_acm_line_coding_berubah, };
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) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */ }
Example – Implementasi Panggilan Balik CDC ACM

bool app_usbd_cdc_acm_line_coding_berubah (uint8_t

subkelas_nbr,

sl_usbd_cdc_acm_pengkodean_baris_t *p_pengkodean_baris)

{

uint32_t baudrate_baru;

uint8_t paritas_baru;

uint8_t stop_bits_baru;

uint8_t data_bit_baru;

/* TODO Terapkan kode baris baru.*/ baudrate_new = p_line_coding->BaudRate; parity_new = p_line_coding->Parity; stop_bits_new = p_line_coding->StopBits; data_bits_new = p_line_coding->DataBits;

kembali (benar);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ bool rts_state; bool rts_state_berubah; bool dtr_state; bool dtr_state_berubah; bool brk_state; bool brk_state_berubah;

/* TODO Terapkan kontrol baris baru. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((peristiwa_berubah & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? benar : salah;
}

(1) Penting untuk mengembalikan false ke fungsi ini jika penerapan kode baris gagal. Jika tidak, kembalikan true.
Berkomunikasi Menggunakan Kelas ACM CDC
Status Serial
Pengkodean Garis Kontrol Garis

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

26/174

Lebihview

Komunikasi Instansi Subkelas Status Garis
Status Serial
Pengkodean Baris
Host USB mengontrol pengodean baris (laju baud, paritas, dll.) perangkat CDC ACM. Jika diperlukan, aplikasi bertanggung jawab untuk mengatur pengodean baris. Terdapat dua fungsi yang disediakan untuk mengambil dan mengatur pengodean baris saat ini, seperti yang dijelaskan pada tabel di bawah ini.
Tabel – Fungsi Pengkodean Baris CDC ACM

Fungsi
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()

Keterangan
Aplikasi Anda dapat memperoleh pengaturan kode baris saat ini baik dari host dengan permintaan SetLineCoding atau dengan fungsi sl_usbd_cdc_acm_set_line_coding() .
Aplikasi Anda dapat mengatur kode baris. Host dapat mengambil pengaturan tersebut dengan permintaan GetLineCoding.

Kontrol Garis
Host USB mengontrol kontrol jalur (pin RTS dan DTR, sinyal putus, dan sebagainya) perangkat CDC ACM. Bila diperlukan, aplikasi Anda bertanggung jawab untuk menerapkan kontrol jalur. Sebuah fungsi disediakan untuk mengambil dan mengatur kontrol jalur saat ini, seperti yang dijelaskan dalam tabel di bawah ini.
Tabel – Fungsi Kontrol Garis CDC ACM

Fungsi
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()

Aplikasi Anda bisa mendapatkan status garis kontrol terkini yang ditetapkan oleh host dengan permintaan SetControlLineState.

Negara Garis
Host USB mengambil status saluran secara berkala. Aplikasi Anda harus memperbarui status saluran setiap kali berubah. Jika diperlukan, aplikasi Anda bertanggung jawab untuk mengatur status saluran. Dua fungsi disediakan untuk mengambil dan mengatur kontrol saluran saat ini, seperti yang dijelaskan pada tabel di bawah ini.
Tabel – Fungsi CDC ACM Line State

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 dapat mengatur peristiwa status saluran apa pun. Saat mengatur status saluran, transfer interupsi IN dikirim ke host untuk menginformasikan perubahan status saluran serial.
Aplikasi dapat menghapus dua peristiwa status saluran: deteksi pembawa transmisi dan deteksi pembawa penerima. Semua peristiwa lainnya dihapus sendiri oleh subkelas emulasi serial ACM.

Komunikasi Instansi Subkelas

Subkelas ACM Silicon Labs menawarkan fungsi-fungsi berikut untuk berkomunikasi dengan host. Untuk detail lebih lanjut tentang parameter fungsi9, lihat referensi Fungsi Subkelas ACM CDC.

Nama fungsi
sl_usb d _cd c_acm_ baca () sl_usb d _cd c_acm_tulis ()

Operasi
Menerima data dari host melalui titik akhir OUT massal. Fungsi ini memblokir. Mengirim data ke host melalui titik akhir MASUK massal. Fungsi ini memblokir.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

27/174

Lebihview

Tabel – Ringkasan API Komunikasi CDC ACM aaaaa sl_usbd_cdc_acm_read() dan sl_usbd_cdc_acm_write() menyediakan komunikasi sinkron, yang berarti transfer diblokir. Dengan kata lain, setelah memanggil fungsi tersebut, aplikasi akan memblokir hingga transfer selesai dengan atau tanpa kesalahan. Batas waktu dapat ditentukan untuk menghindari menunggu selamanya. Contohamplembar di bawah ini menunjukkan contoh baca dan tulisampfile yang menerima data dari host menggunakan titik akhir OUT massal dan mengirim data ke host menggunakan titik akhir MASUK massal.
Daftar – Serial Baca dan Tulis Example

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

status = sl_usbd_cdc_acm_read(nomor_subkelas,

(1)

rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

status = sl_usbd_cdc_acm_write(nomor_subkelas,

(1)

tx_buf,

(4)

2u,

0u,

(3)

&xfer_len);

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

T aaaaa M (1) Nomor instance kelas yang dibuat dengan sl_usbd_cdc_acm_create_instance() menyediakan referensi internal ke subkelas AC untuk merutekan transfer ke titik akhir OUT atau IN massal yang tepat. (2) Aplikasi Anda harus memastikan bahwa buffer yang disediakan untuk fungsi tersebut cukup besar untuk menampung semua data. Jika tidak, masalah sinkronisasi dapat terjadi. (3) Untuk menghindari situasi pemblokiran tak terbatas, tentukan batas waktu yang dinyatakan dalam milidetik. Nilai 809 membuat tugas aplikasi menunggu selamanya. (4) Aplikasi menyediakan buffer transmisi yang telah diinisialisasi.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

28/174

Lebihview
Lebihview

Kelas HID Perangkat USB

Perangkat USB HID Kelas Atasview Kebutuhan Sumber Daya Kelas HID Perangkat USB dari Inti Konfigurasi Kelas HID Perangkat USB Panduan Pemrograman Kelas HID Perangkat USB Laporan Input Berkala HID Tugas
Bagian ini menjelaskan kelas Perangkat Antarmuka Manusia (HID) yang didukung oleh Perangkat USB Silicon Labs.
Kelas HID mencakup perangkat yang digunakan manusia untuk mengendalikan operasi komputer, seperti papan ketik, tetikus, perangkat penunjuk, dan perangkat permainan.
Kelas HID juga dapat digunakan dalam perangkat komposit yang berisi kontrol seperti kenop, sakelar, tombol, dan penggeser. Misalnya,ampKontrol suara, mute, dan volume pada headset audio dikendalikan oleh fungsi HID headset. Kelas HID dapat bertukar data untuk tujuan apa pun hanya dengan menggunakan transfer kontrol dan interupsi.
Kelas HID adalah salah satu kelas USB tertua dan paling banyak digunakan. Semua sistem operasi host utama menyediakan driver bawaan untuk mengelola perangkat HID, sehingga berbagai perangkat khusus vendor dapat menggunakan kelas HID. Kelas ini juga mencakup berbagai jenis output seperti LED, audio, umpan balik taktil, dll.
Implementasi HID mematuhi spesifikasi berikut:
Definisi Kelas Perangkat untuk Perangkat Antarmuka Manusia (HID), 27/6/01, Versi 1.11. Tabel Penggunaan HID Universal Serial Bus, 28/10/2004, Versi 1.12.
Perangkat USB HID Kelas Atasview
Lebihview
Perangkat HID terdiri dari titik akhir berikut:
Sepasang titik akhir kontrol MASUK dan OUT disebut titik akhir default Titik akhir MASUK interupsi Titik akhir OUT interupsi opsional
Tabel di bawah ini menjelaskan penggunaan titik akhir yang berbeda:
Tabel – Penggunaan Titik Akhir Kelas HID

Penggunaan Arah Titik Akhir

Kontrol DI
Kontrol
KELUAR
Interupsi Masuk
Mengganggu
KELUAR

Perangkat yang dihosting
Host-ke-perangkat
Perangkat yang dihosting
Host-ke-perangkat

Permintaan standar untuk enumerasi, permintaan khusus kelas, dan komunikasi data (Input, laporan Fitur yang dikirim ke host dengan permintaan GET_REPORT). Permintaan standar untuk enumerasi, permintaan khusus kelas, dan komunikasi data (Output, laporan Fitur yang diterima dari host dengan permintaan SET_REPORT). Komunikasi data (Input dan laporan Fitur).
Komunikasi data (Laporan Output dan Fitur).

Laporan

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

29/174

Lebihview

Host dan perangkat HID bertukar data menggunakan laporan. Laporan berisi data terformat yang memberikan informasi tentang kontrol dan entitas fisik lainnya dari perangkat HID. Kontrol dapat dimanipulasi oleh pengguna dan mengoperasikan suatu aspek perangkat. Misalnya,ampMisalnya, kontrol dapat berupa tombol pada tetikus atau papan ketik, sakelar, dll. Entitas lain memberi tahu pengguna tentang status fitur perangkat tertentu. Misalnyaampmisalnya, LED pada keyboard memberitahukan pengguna tentang caps lock yang aktif, keypad numerik yang aktif, dan lain-lain.
Format dan penggunaan data laporan dipahami oleh host dengan menganalisis konten deskriptor Laporan. Analisis konten dilakukan oleh parser. Deskriptor Laporan menjelaskan data yang disediakan oleh setiap kontrol dalam suatu perangkat. Deskriptor ini terdiri dari item-item yang merupakan potongan informasi tentang perangkat dan terdiri dari awalan 1-byte dan panjang variabel.
data. Untuk detail lebih lanjut tentang format item, lihat
1.11=, bagian 5.6 dan 6.2.2.
Ada tiga jenis barang utama:
Item utama mendefinisikan atau mengelompokkan jenis bidang data tertentu.
Item global mendeskripsikan karakteristik data suatu kontrol.
Item lokal mendeskripsikan karakteristik data suatu kontrol.
Setiap jenis barang didefinisikan oleh fungsi yang berbeda. Fungsi barang juga bisa disebut tagFungsi item dapat dilihat sebagai sub-item yang termasuk dalam salah satu dari tiga jenis item utama. Tabel di bawah ini memberikan gambaran singkatview fungsi item9 di setiap jenis barang. Untuk deskripsi lengkap barang di setiap kategori, lihat
Tabel – Deskripsi Fungsi Item untuk Setiap Jenis Item

Item Jenis Item Fungsi

Keterangan

Masukan Utama

Menjelaskan informasi tentang data yang disediakan oleh satu atau lebih kontrol fisik.

Keluaran Utama Menjelaskan data yang dikirim ke perangkat.

Fitur Utama

Menjelaskan informasi konfigurasi perangkat yang dikirim ke atau diterima dari perangkat yang memengaruhi perilaku keseluruhan perangkat atau salah satu komponennya.

Item terkait Grup Koleksi Utama (Input, Output atau Fitur).

Ujung Utama Menutup koleksi. Koleksi

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

30/174

Lebihview

Item Jenis Item Fungsi

Keterangan

Halaman Penggunaan Global

Mengidentifikasi fungsi yang tersedia dalam perangkat.

Logika Global Menentukan batas bawah nilai yang dilaporkan dalam satuan logika. Minimum

Logika Global Menentukan batas atas nilai yang dilaporkan dalam satuan logika. Maksimum

Fisik Global Menentukan batas bawah nilai yang dilaporkan dalam satuan fisik, yaitu Minimum Logis yang dinyatakan dalam satuan fisik.

Fisik Global Menentukan batas atas nilai yang dilaporkan dalam satuan fisik, yaitu Maksimum Logis yang dinyatakan dalam satuan fisik.

Satuan Global

Menunjukkan eksponen satuan dalam basis 10. Eksponen berkisar dari -8 hingga +7.

Eksponen

Satuan Global

Menunjukkan satuan nilai yang dilaporkan. Misalnya, panjang, massa, satuan suhu, dll.

Ukuran Laporan Global

Menunjukkan ukuran bidang laporan dalam bit.

ID Laporan Global Menunjukkan awalan yang ditambahkan ke laporan tertentu.

Jumlah Laporan Global

Menunjukkan jumlah bidang data untuk suatu item.

Dorongan Global

Menempatkan salinan tabel status item global pada tumpukan CPU.

Pop Global

Mengganti tabel status item dengan struktur terakhir dari tumpukan.

Penggunaan Lokal

Mewakili indeks untuk menunjuk Penggunaan tertentu dalam Halaman Penggunaan. Indeks ini menunjukkan saran penggunaan vendor untuk kontrol atau grup kontrol tertentu. Penggunaan memberikan informasi kepada pengembang aplikasi tentang apa yang sebenarnya diukur oleh suatu kontrol.

Penggunaan Lokal

Menentukan penggunaan awal yang dikaitkan dengan array atau bitmap.

Minimum

Penggunaan Lokal

Menentukan penggunaan akhir yang dikaitkan dengan array atau bitmap.

Maksimum

Penanda Lokal Menentukan bagian tubuh yang digunakan untuk kontrol. Indeks menunjuk ke penanda di Fisik

Indeks

deskriptor.

Penanda Lokal Menentukan indeks penanda awal yang terkait dengan array atau bitmap. Minimum

Penanda Lokal Menentukan indeks penanda akhir yang terkait dengan array atau bitmap. Maksimum

Indeks String Lokal

Indeks string untuk deskriptor String. Indeks ini memungkinkan string dikaitkan dengan item atau kontrol tertentu.

String Lokal

Menentukan indeks string pertama saat menetapkan sekelompok string berurutan ke kontrol dalam array

Minimum atau bitmap.

Lokal Lokal

String Maksimum
Pembatas

Menentukan indeks string terakhir saat menetapkan sekelompok string berurutan ke kontrol dalam array atau bitmap.
Menentukan awal atau akhir sekumpulan item lokal.

Data kontrol9 harus mendefinisikan setidaknya item berikut:
Input, Output atau Fitur Item utama Penggunaan Item lokal Halaman Penggunaan Item global Minimum logis Item global Maksimum logis Item global Ukuran laporan Item global

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

31/174

Lebihview
Jumlah Laporan Item Global Tabel di bawah ini menunjukkan representasi konten deskriptor Laporan Mouse dari perspektif parser HID host. Mouse memiliki tiga tombol (kiri, kanan, dan roda). Kode yang disajikan dalam contohampDi bawah ini adalah implementasi kode yang sesuai dengan representasi deskriptor Laporan tetikus ini.
Gambar – Konten Deskriptor Laporan dari Host HID Parser View

(1) Fungsi item Halaman Penggunaan menentukan fungsi umum perangkat. Dalam contoh ini,ample, perangkat HID milik
kontrol desktop generik.
(2) Aplikasi Koleksi mengelompokkan item-item Utama yang memiliki tujuan umum dan mungkin familiar bagi aplikasi. Dalam diagram, kelompok ini terdiri dari tiga item Input Utama. Untuk koleksi ini, penggunaan kontrol yang disarankan adalah mouse seperti yang ditunjukkan oleh item Penggunaan. (3) Koleksi bersarang dapat digunakan untuk memberikan detail lebih lanjut tentang penggunaan satu kontrol atau sekelompok kontrol untuk aplikasi. Dalam contoh ini,ampMisalnya, Koleksi Fisik, yang bersarang di dalam Aplikasi Koleksi, terdiri dari tiga item Input yang sama yang membentuk Aplikasi Koleksi. Koleksi Fisik digunakan untuk sekumpulan item data yang mewakili titik-titik data yang dikumpulkan pada satu titik geometris. Dalam contohample, penggunaan yang disarankan adalah penunjuk seperti yang ditunjukkan oleh item Penggunaan. Di sini, penggunaan penunjuk mengacu pada koordinat posisi tetikus dan perangkat lunak sistem akan menerjemahkan koordinat tetikus dalam gerakan kursor layar. (4) Halaman penggunaan bersarang juga dimungkinkan dan memberikan detail lebih lanjut tentang aspek tertentu dalam fungsi umum perangkat. Dalam hal ini, dua item Masukan dikelompokkan dan sesuai dengan tombol tetikus. Satu item Masukan mendefinisikan tiga tombol tetikus (kanan, kiri, dan roda) dalam hal jumlah bidang data untuk item tersebut (item Jumlah Laporan), ukuran bidang data (item Ukuran Laporan), dan nilai yang mungkin untuk setiap bidang data (Penggunaan Minimum dan Maksimum, item Logika Minimum dan Maksimum). Item Masukan lainnya adalah konstanta 13-bit yang memungkinkan data laporan Masukan disejajarkan pada batas byte. Item Masukan ini hanya digunakan untuk tujuan pengisi. (5) Halaman penggunaan bersarang lainnya yang mengacu pada kontrol desktop generik didefinisikan untuk koordinat posisi tetikus. Untuk halaman penggunaan ini, item Input menjelaskan bidang data yang sesuai dengan sumbu x dan y seperti yang ditentukan oleh dua Penggunaan
barang.
Setelah menganalisis konten deskriptor Laporan tetikus sebelumnya, parser HID host9 dapat menginterpretasikan data laporan Input yang dikirim oleh perangkat dengan transfer MASUK interupsi atau sebagai respons terhadap permintaan GET_REPORT. Data laporan Input yang sesuai dengan deskriptor Laporan tetikus ditunjukkan pada Gambar – Konten Deskriptor Laporan dari Parser HID Host View is

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

32/174

Lebihview

ditunjukkan pada tabel di bawah ini. Ukuran total data laporan adalah 4 byte. Berbagai jenis laporan dapat dikirim melalui titik akhir yang sama. Untuk membedakan berbagai jenis laporan, awalan ID laporan 1-byte ditambahkan ke laporan data. Jika ID laporan digunakan dalam contoh,ample dari laporan mouse, ukuran total data laporan akan menjadi 5 byte.
Tabel – Laporan Input Dikirim ke Host dan Sesuai dengan Status Mouse 3 Tombol

Sedikit Offset
0 1 2 3 16 24

Jumlah Bit 1 1 1 13 8 8

Deskripsi Tombol 1 (tombol kiri). Tombol 2 (tombol kanan). Tombol 3 (tombol roda). Tidak digunakan. Posisi pada sumbu X. Posisi pada sumbu Y.

Deskriptor Fisik menunjukkan bagian atau beberapa bagian tubuh yang dimaksudkan untuk mengaktifkan satu atau beberapa kontrol. Aplikasi dapat menggunakan informasi ini untuk menetapkan fungsionalitas pada kontrol suatu perangkat. Deskriptor Fisik adalah deskriptor opsional khusus kelas, dan sebagian besar perangkat memiliki sedikit keuntungan untuk menggunakannya. Lihat
Kebutuhan Sumber Daya Kelas HID Perangkat USB dari Inti

Setiap kali Anda menambahkan instans kelas HID ke konfigurasi USB melalui panggilan ke fungsi sl_usbd_hid_add_to_configuration() , sumber daya berikut akan dialokasikan dari inti.

Sumber
Antarmuka Antarmuka alternatif Titik akhir Grup antarmuka

Kuantitas
1 1 1 (2 jika titik akhir interupsi OUT diaktifkan) 0

Perhatikan bahwa angka-angka tersebut adalah per konfigurasi. Saat mengatur nilai konfigurasi SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY, dan SL_USBD_DESCRIPTOR_QUANTITY, jangan lupa untuk memperhitungkan berapa banyak konfigurasi yang akan ditambahkan ke kelas. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, karena titik akhir hanya dibuka ketika konfigurasi ditetapkan oleh host, Anda hanya perlu memperhitungkan jumlah titik akhir yang dibutuhkan untuk sebuah instans kelas.
Konfigurasi Kelas HID Perangkat USB

Dua kelompok parameter konfigurasi digunakan untuk mengonfigurasi kelas HID:
Konfigurasi Spesifik Aplikasi Kelas HID Perangkat USB Konfigurasi Instans Kelas HID Perangkat USB
Konfigurasi Khusus Aplikasi Kelas HID Perangkat USB

Pertama, untuk menggunakan modul kelas HID perangkat USB Silicon Labs, sesuaikan definisi konfigurasi waktu kompilasi HID sesuai kebutuhan aplikasi Anda. Konfigurasi-konfigurasi tersebut dikelompokkan kembali di dalam header sl_usbd_core_config.h. file di bagian HID. Konfigurasi ini dapat dibagi menjadi dua bagian, yaitu konfigurasi kuantitas dan konfigurasi tugas HID. Tujuan konfigurasi kuantitas adalah untuk memberi tahu modul perangkat USB tentang berapa banyak objek USB HID yang akan dialokasikan.
Tabel di bawah ini menguraikan setiap definisi konfigurasi.
Tabel – Definisi Konfigurasi HID Perangkat USB

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

33/174

Lebihview

Nama Konfigurasi
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
JUMLAH_URASI_KONFIGURASI_USBD_HID
SL_USBD_HID_LAPORAN_JUMLAH_ID
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T TANYA_UKURAN_TUMPUK
SL_USBD_HID_TIMER_T TANYA_PRIORITAS

Keterangan
Jumlah instance kelas yang akan Anda alokasikan melalui panggilan ke fungsi
sl_usbd_hid_create_instance() .
Jumlah konfigurasi. Instans kelas HID dapat ditambahkan ke satu atau lebih konfigurasi aaaa, lihat di fungsi sl_usbd_hid_add_to_configuration(). Mengonfigurasi jumlah total ID laporan yang akan dialokasikan.
Mengonfigurasi jumlah total item Push/Pop yang akan dialokasikan.
Tugas pengatur waktu menangani semua operasi HID berbasis pengatur waktu. Konfigurasi ini memungkinkan Anda untuk mengatur ukuran tumpukan (dalam jumlah byte). Prioritas tugas HID. Ini adalah prioritas CMSIS-RTOS2.

Nilai Default
2 1 2 0 2048
osPrioritasTinggi

Konfigurasi Instans Kelas HID Perangkat USB Subkelas Pembuatan Instans Kelas
kode negara protokol
interval_masuk dan interval_keluar p_hid_callback Deskripsi Laporan Kelas HID Example Bagian ini mendefinisikan konfigurasi yang terkait dengan instans kelas HID.
Pembuatan Instansi Kelas
Pembuatan instance kelas HID dilakukan dengan memanggil fungsi aaa sl_usbd_hid_create_instance() , yang mengambil beberapa argumen konfigurasi yang dijelaskan di bawah ini.
subkelas
Kode subkelas HID. Nilai yang mungkin adalah:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Perangkat HID yang menggunakan subkelas boot harus menggunakan format laporan standar. Untuk informasi lebih lanjut tentang kode subkelas, lihat bagian 4.2 dari spesifikasi HID revisi 1.11.
protokol
Protokol yang digunakan oleh perangkat HID. Nilai yang mungkin adalah:
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
Jika fungsi HID Anda adalah tetikus, protokolnya harus diatur ke SL_USBD_HID_PROTOCOL_MOUSE. Jika fungsi HID Anda adalah keyboard, protokolnya harus diatur ke SL_USBD_HID_PROTOCOL_KBD. Jika tidak, protokolnya harus diatur ke SL_USBD_HID_PROTOCOL_NONE. Untuk informasi lebih lanjut tentang kode subkelas, lihat bagian 4.3 dari spesifikasi HID revisi 1.11.
kode negara
ID kode negara. Nilai yang mungkin adalah:
SL_USBD_HID_KODE_NEGARA_TIDAK_DIDUKUNG

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

34/174

Lebihview
SL_USBD_HID_KODE_NEGARA_ARAB SL_USBD_HID_KODE_NEGARA_BELGIA SL_USBD_HID_KODE_NEGARA_KANADA_BILINGUAL SL_USBD_HID_KODE_NEGARA_KANADA_PRANCIS SL_USBD_HID_KODE_NEGARA_REPUBLIK_CZECH SL_USBD_HID_KODE_NEGARA_DENMARK SL_USBD_HID_KODE_NEGARA_FINLANDIA SL_USBD_HID_KODE_NEGARA_PRANCIS SL_USBD_HID_KODE_NEGARA_JERMAN SL_USBD_HID_KODE_NEGARA_YUNANI SL_USBD_HID_KODE_NEGARA_IBRANI SL_USBD_HID_KODE_NEGARA_HUNGARIA SL_USBD_HID_KODE_NEGARA_INTERNASIONAL SL_USBD_HID_KODE_NEGARA_ITALIA SL_USBD_HID_KODE_NEGARA_JEPANG_KATAKANA SL_USBD_HID_KODE_NEGARA ... SL_USBD_HID_KODE_NEGARA_SPANISH SL_USBD_HID_KODE_NEGARA_SWEDIA SL_USBD_HID_KODE_NEGARA_SWISS_PRANCIS SL_USBD_HID_KODE_NEGARA_SWISS_JERMAN SL_USBD_HID_KODE_NEGARA_SWISS DAN SL_USBD_HID_KODE_NEGARA_TAIWAN SL_USBD_HID_KODE_NEGARA_TURKI_Q SL_USBD_HID_KODE_NEGARA_INGGRIS SL_USBD_HID_KODE_NEGARA_AS SL_USBD_HID_KODE_NEGARA_YUG OSL AVIA SL_USBD_HID_KODE_NEGARA_TURKI_F
Kode negara menunjukkan negara tempat perangkat keras dilokalkan. Sebagian besar perangkat keras tidak dilokalkan, sehingga kode aaaav ini akan menjadi SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0). Namun, keyboard mungkin menggunakan kolom ini untuk menunjukkan bahasa tombol.
Untuk informasi lebih lanjut tentang kode negara, lihat bagian 6.2.1 dari spesifikasi HID revisi 1.11.
interval_masuk dan interval_keluar
interval_in dan interval_out mewakili interval polling titik akhir interupsi IN dan titik akhir interupsi OUT.
Ini mewakili interval polling titik akhir, dalam milidetik. Pengaturan nilai ini bergantung pada seberapa sering perangkat Anda dapat menghasilkan laporan baru untuk host. Misalnya, jika laporan dihasilkan setiap 16 milidetik, intervalnya harus 16 atau kurang.
Nilainya harus pangkat 2 (1, 2, 4, 8, 16, dst.).
Nilai interval_out diabaikan jika ctrl_rd_en disetel ke true.
p_hid_callback
aaaa p_hid_callback adalah penunjuk ke struktur bertipe sl_usbd_hid_callbacks_t. Tujuannya adalah untuk memberikan HID Cl ss serangkaian fungsi panggilan balik yang akan dipanggil ketika peristiwa HID terjadi.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

35/174

Lebihview

Tidak semua panggilan balik bersifat wajib dan penunjuk null (NULL) dapat diteruskan dalam variabel struktur panggilan balik ketika panggilan balik tidak diperlukan. Tabel di bawah ini menjelaskan setiap kolom konfigurasi yang tersedia dalam struktur konfigurasi ini.
Tabel – Struktur Konfigurasi sl_usbd_hid_callbacks_t

Lapangan

Keterangan

Tanda Tangan Fungsi

.aktifkan .nonaktifkan .dapatkan_laporan_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report

Dipanggil saat instans kelas USB berhasil diaktifkan. Dipanggil saat instans kelas USB dinonaktifkan.
Dipanggil selama pembuatan Instans HID untuk meneruskan deskriptor laporan Anda. Untuk setiap fungsi HID Anda, Anda harus menyediakan deskriptor laporan. Deskriptor laporan menunjukkan kepada host bagaimana laporan berkala yang akan dikirim oleh perangkat harus diurai. Menulis deskriptor laporan Anda sendiri dapat menjadi tantangan, dan itulah sebabnya ada beberapa sumber daya untuk membantu. Ini adalah satu-satunya fungsi panggilan balik wajib. Dipanggil selama pembuatan Instans HID untuk meneruskan deskriptor fisik Anda. Deskriptor fisik adalah deskriptor yang menyediakan informasi tentang bagian atau bagian tertentu dari tubuh manusia yang mengaktifkan kontrol atau kontrol. Untuk informasi lebih lanjut tentang deskriptor fisik, lihat bagian 6.2.3 dari revisi spesifikasi HID 1.11. Deskriptor fisik bersifat opsional dan sebagian besar waktu diabaikan. Buffer yang diteruskan di sini dapat diatur ke NULL dan panjangnya diatur ke 0. Dipanggil ketika host menetapkan laporan seperti yang dijelaskan dalam deskriptor laporan Anda (ketika mengirim laporan).
Dipanggil saat host meminta laporan fitur seperti yang dijelaskan dalam deskriptor laporan Anda.
Dipanggil saat host menetapkan laporan fitur seperti yang dijelaskan dalam deskriptor laporan Anda.

batal app_usbd_hid_enable(uint8_t kelas_nbr); batal app_usbd_hid_disable(uint8_t kelas_nbr); batal app_usbd_hid_get_report_desc(uint8_t kelas_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);

.dapatkan_protokol

Mengambil protokol aktif saat ini.

void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);

.set_protokol

Menetapkan protokol aktif saat ini.

void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protokol);

Deskripsi Laporan Kelas HID Example

Kelas HID Silicon Labsampaplikasi ini menyediakan exampdari deskriptor laporan untuk mouse sederhana. ContohampGambar di bawah menunjukkan deskriptor laporan tetikus.
Example – Deskripsi Laporan Mouse

statis uint8_t app_usbd_hid_report_desc[] = {

(1) (2)

SL_USBD_HID_HALAMAN_PENGGUNAAN_GLOBAL + 1, SL_USBD_HID_HALAMAN_PENGGUNAAN_KONTROL_DESKTOP_UMUM,

SL_USBD_HID_PENGGUNAAN_LOKAL + 1, SL_USBD_HID_CA_MOUSE,

(3)

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

36/174

Lebihview

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)

SL_USBD_HID_PENGGUNAAN_LOKAL +1, SL_USBD_HID_CP_POINTER,(5)

SL_USBD_HID_KOLEKSI_UTAMA +1, SL_USBD_HID_KOLEKSI_FISIK,(6)

SL_USBD_HID_GLOBAL_PAGE_PAGE +1, SL_USBD_HID_PAGE_BUTTON,(7)

SL_USBD_HID_PENGGUNAAN_LOKAL_MIN +1,0 01,

SL_USBD_HID_PENGGUNAAN_LOKAL_MAKS +1,0 03,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,

JUMLAH LAPORAN GLOBAL SL_USBD_HID +1,0 03,

SL_USBD_HID_UKURAN_LAPORAN_GLOBAL +1,0 01,

SL_USBD_HID_MASUKAN_UTAMA +1, SL_USBD_HID_DATA_UTAMA |

SL_USBD_HID_VARIABEL_UTAMA |

SL_USBD_HID_UTAMA_ABSOLUTE,

JUMLAH LAPORAN GLOBAL SL_USBD_HID +1,0 01,(8)

SL_USBD_HID_UKURAN_LAPORAN_GLOBAL +1,0 0D,

SL_USBD_HID_MASUKAN_UTAMA +1, SL_USBD_HID_MASUKAN_KONSTANT,(9)

SL_USBD_HID_HALAMAN_PENGGUNAAN_GLOBAL +1, SL_USBD_HID_HALAMAN_PENGGUNAAN_KONTROL_DESKTOP_UMUM,

SL_USBD_HID_PENGGUNAAN_LOKAL +1, SL_USBD_HID_DV_X,

SL_USBD_HID_PENGGUNAAN_LOKAL +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_UKURAN_LAPORAN_GLOBAL +1,0 08,

JUMLAH LAPORAN GLOBAL SL_USBD_HID +1,0 02,

SL_USBD_HID_MASUKAN_UTAMA +1, SL_USBD_HID_DATA_UTAMA |

SL_USBD_HID_VARIABEL_UTAMA |

SL_USBD_HID_MAIN_RELATIVE,

SL_USBD_HID_MAIN_ENDCOLLECTION,(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1) Tabel yang merepresentasikan deskriptor laporan tetikus diinisialisasi sedemikian rupa sehingga setiap barisnya berkorespondensi dengan item pendek. Item pendek ini dibentuk dari prefiks 1-byte dan data 1-byte. Lihat viewed oleh parser HID host pada Gambar – Konten Deskriptor Laporan dari Parser HID Host View.
(2) Halaman Penggunaan Desktop Generik digunakan.
(3) Di dalam Halaman Penggunaan Desktop Generik, penggunaan tag menunjukkan bahwa kelompok kontrol tersebut dimaksudkan untuk mengendalikan tetikus. Kumpulan tetikus biasanya terdiri dari dua sumbu (X dan Y) dan satu, dua, atau tiga tombol.
(4) Koleksi tikus dimulai.
(5) Dalam koleksi tikus, penggunaan tag Secara lebih spesifik, menunjukkan bahwa kontrol tetikus termasuk dalam koleksi penunjuk. Koleksi penunjuk adalah kumpulan sumbu yang menghasilkan nilai untuk mengarahkan, menunjukkan, atau mengarahkan maksud pengguna ke suatu aplikasi.
(6) Koleksi pointer dimulai.
(7) Halaman Penggunaan Tombol mendefinisikan item Input yang terdiri dari tiga kolom 1-bit. Setiap kolom 1-bit masing-masing mewakili tombol 1, 2, dan 3 pada mouse dan dapat mengembalikan nilai 0 atau 1.
(8) Item Input untuk Halaman Penggunaan Tombol diisi dengan 13 bit lainnya.
(9) Halaman Penggunaan Desktop Generik Lainnya diindikasikan untuk mendeskripsikan posisi mouse dengan sumbu X dan Y. Item Input terdiri dari dua bidang 8-bit yang nilainya dapat berkisar antara -127 dan 127.
(10) Koleksi pointer ditutup.
(11) Koleksi tikus ditutup.
Halaman HID USB.org

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

37/174

Lebihview
Forum Implementer USB (USB-IF) menyediakan alat bernama "Alat Deskriptor HID" beserta informasi lain tentang format deskriptor laporan. Lihat http://www.usb.org/developers/hidpage/ untuk informasi selengkapnya.
Panduan Pemrograman Kelas HID Perangkat USB
Bagian ini menjelaskan cara menggunakan kelas HID. Menginisialisasi Kelas HID Perangkat USB Menambahkan Instans Kelas HID Perangkat USB ke Perangkat Anda Berkomunikasi menggunakan Kelas HID Perangkat USB
Inisialisasi Kelas HID Perangkat USB
Untuk menambahkan fungsionalitas Kelas HID ke perangkat Anda, Anda harus terlebih dahulu menginisialisasi kelas dengan memanggil fungsi sl_usbd_hid_init(). Contoh:ampGambar di bawah ini menunjukkan cara memanggil sl_usbd_hid_init() menggunakan argumen default. Untuk informasi selengkapnya tentang argumen konfigurasi yang akan diteruskan ke sl_usbd_hid_init(), lihat Konfigurasi Spesifik Aplikasi Kelas HID Perangkat USB.
Example – Memanggil sl_usbd_hid_init()
sl_status_t status;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
Menambahkan Instansi Kelas HID Perangkat USB ke Perangkat Anda
Untuk menambahkan fungsionalitas kelas HID ke perangkat Anda, Anda harus membuat sebuah instans, lalu menambahkannya ke konfigurasi perangkat Anda.
Membuat Instansi Kelas HID
Buat instance kelas HID dengan memanggil fungsi sl_usbd_hid_create_instance(). Contoh:ampGambar di bawah ini menunjukkan cara membuat fungsi tetikus sederhana melalui sl_usbd_hid_create_instance() menggunakan argumen default. Untuk informasi selengkapnya tentang argumen konfigurasi yang akan diteruskan ke sl_usbd_hid_create_instance(), lihat Konfigurasi Instans Kelas HID Perangkat USB.
Example – Menambahkan Fungsi Mouse melalui sl_usbd_hid_create_instance()

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

38/174

Lebihview
/* Konstanta global. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_PAGE_PAGE_PENGGUNAAN_GENERIK_DESKTOP_KONTROL, SL_USBD_HID_LOCAL_PAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_PAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_PAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_PENGGUNAAN_LOKAL_MIN + 1, 0 01, SL_USBD_HID_PENGGUNAAN_LOKAL_MAKS + 1, 0 03, SL_USBD_HID_LOG_GLOBAL_MIN + 1, 0 00, SL_USBD_HID_LOG_GLOBAL_MAKS + 1, 0 01, SL_USBD_HID_JUMLAH_LAPORAN_GLOBAL_HID + 1, 0 03, SL_USBD_HID_UKURAN_LAPORAN_GLOBAL_HID + 1, 0 01, SL_USBD_HID_MASUKAN_UTAMA + 1, SL_USBD_HID_DATA_UTAMA | SL_USBD_HID_VARIABEL_UTAMA | SL_USBD_HID_UTAMA_ABSOLUTE, SL_USBD_HID_JUMLAH_LAPORAN_GLOBAL + 1, 0 01, SL_USBD_HID_UKURAN_LAPORAN_GLOBAL + 1, 0 0D, SL_USBD_HID_MASUKAN_UTAMA + 1, SL_USBD_HID_KONSTAN_UTAMA, SL_USBD_HID_HALAMAN_PENGGUNAAN_GLOBAL + 1, SL_USBD_HID_HALAMAN_PENGGUNAAN_GENERIK_DESKTOP_KONTROL, SL_USBD_HID_PENGGUNAAN_LOKAL + 1, SL_USBD_HID_DV_X, SL_USBD_HID_PENGGUNAAN_LOKAL + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_HID_GLOBAL_LOG_MIN + 1, 0 Bahasa Indonesia: 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, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Variabel lokal.*/ uint8_t class_nbr; sl_status_t status;
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)kelas_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(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, benar, &app_usbd_hid_callbacks, &class_nbr);
Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

39/174

Lebihview
/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */}
Menambahkan Instansi Kelas HID ke Konfigurasi Perangkat Anda Setelah Anda membuat instans kelas HID, Anda dapat menambahkannya ke konfigurasi dengan memanggil fungsi
sl_usbd_hid_tambahkan_ke_konfigurasi() .
Sang mantanampGambar di bawah menunjukkan cara memanggil sl_usbd_hid_add_to_configuration().
Example – Memanggil sl_usbd_hid_add_to_configuration()

sl_status_t status;

sl_usbd_hid_tambahkan_ke_konfigurasi(kelas_nbr,

(1)

konfigurasi_nbr_fs); (2)

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

(1) Nomor kelas yang akan ditambahkan ke konfigurasi yang dikembalikan oleh sl_usbd_hid_create_instance(). (2) Nomor konfigurasi (di sini menambahkannya ke konfigurasi Kecepatan Penuh).
Berkomunikasi Menggunakan Kelas HID Perangkat USB
Komunikasi Instansi Kelas Komunikasi Sinkron Komunikasi Instansi Kelas Kelas HID menawarkan fungsi berikut untuk berkomunikasi dengan host.
Tabel – Ringkasan API Komunikasi HID

Nama fungsi
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()

Operasi Menerima data dari host melalui titik akhir interupsi KELUAR. Fungsi ini memblokir. Mengirim data ke host melalui titik akhir interupsi MASUK. Fungsi ini memblokir.

Komunikasi Sinkron Komunikasi sinkron berarti transfer sedang diblokir. Setelah fungsi dipanggil, aplikasi akan memblokir hingga transfer selesai, dengan atau tanpa kesalahan. Batas waktu dapat ditentukan untuk menghindari penantian yang lama. Contoh:ampGambar di bawah menunjukkan pembacaan dan penulisan yang menerima data dari host menggunakan titik akhir interupsi KELUAR dan mengirim data ke host menggunakan titik akhir interupsi MASUK.
Example – Baca dan Tulis HID Sinkron

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

status;

status = sl_usbd_hid_read_sync(kelas_nbr,

(1)

(batal *)rx_buf,

(2)

2u,

0u,

(3)

&xfer_len);

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

40/174

Lebihview
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan 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){/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */}
(1) Nomor instansi kelas yang dibuat dari sl_usbd_hid_create_instance() menyediakan referensi internal bagi kelas HID untuk mengarahkan transfer ke titik akhir OUT atau IN interupsi yang tepat.
(2) Aplikasi harus memastikan bahwa buffer yang disediakan untuk fungsi tersebut cukup besar untuk menampung semua data. Jika tidak, masalah sinkronisasi dapat terjadi. Secara internal, operasi baca dilakukan dengan titik akhir kontrol atau dengan titik akhir interupsi, tergantung pada flag baca kontrol yang ditetapkan saat memanggil sl_usbd_hid_create_instance() .
(3) Untuk menghindari situasi pemblokiran tak terbatas, batas waktu yang dinyatakan dalam milidetik dapat ditentukan. Nilai 809 membuat tugas aplikasi menunggu selamanya.
(4) Aplikasi menyediakan buffer transmisi yang diinisialisasi.
Tugas Laporan Masukan Berkala HID
Untuk menghemat bandwidth, host dapat menonaktifkan laporan dari titik akhir MASUK interupsi dengan membatasi frekuensi pelaporan. Untuk melakukannya, host harus mengirimkan permintaan SET_IDLE. Kelas HID yang diimplementasikan oleh Silicon Labs berisi tugas internal yang mematuhi batasan frekuensi pelaporan yang dapat Anda terapkan pada satu atau beberapa laporan masukan. Gambar Tugas Laporan Masukan Berkala menunjukkan fungsi tugas laporan masukan berkala.
Gambar – Tugas Laporan Masukan Berkala

(1) Perangkat menerima permintaan SET_IDLE. Permintaan ini menentukan durasi idle untuk ID laporan tertentu. Untuk detail lebih lanjut tentang permintaan SET_IDLE, lihat
(2) Struktur ID laporan (yang dialokasikan selama fase inisialisasi kelas HID) diperbarui dengan durasi idle. Penghitung durasi idle diinisialisasi dengan nilai durasi idle. Struktur ID laporan disisipkan di akhir daftar tertaut yang berisi struktur ID laporan masukan. Nilai durasi idle dinyatakan dalam satuan 4 ms yang memberikan rentang 4 hingga 1020 ms.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

41/174

Lebihview
Jika durasi idle kurang dari interval polling titik akhir interupsi IN, laporan dibuat pada interval polling.
(3) Setiap 4 md, tugas laporan masukan berkala menelusuri daftar ID laporan masukan. Untuk setiap ID laporan masukan, tugas melakukan salah satu dari dua kemungkinan operasi. Durasi periode tugas sesuai dengan unit 4 md yang digunakan untuk durasi idle. Jika tidak ada permintaan SET_IDLE yang dikirim oleh host, daftar ID laporan masukan kosong dan tugas tidak memiliki apa pun untuk diproses. Tugas hanya memproses ID laporan yang berbeda dari 0 dan dengan durasi idle lebih besar dari 0.
(4) Untuk ID laporan masukan tertentu, tugas memverifikasi apakah durasi idle telah berlalu. Jika durasi idle belum berlalu, penghitung dikurangi dan tidak ada laporan masukan yang dikirim ke host.
(5) Jika durasi idle telah berlalu (yaitu, penghitung durasi idle telah mencapai nol), laporan masukan dikirim ke host dengan memanggil fungsi sl_usbd_hid_write_sync() melalui titik akhir interupsi IN.
(6) Data laporan masukan yang dikirim oleh tugas berasal dari buffer data internal yang dialokasikan untuk setiap laporan masukan yang dijelaskan dalam deskriptor Laporan. Tugas aplikasi dapat memanggil fungsi sl_usbd_hid_write_sync() untuk mengirim laporan masukan. Setelah mengirim data laporan masukan, sl_usbd_hid_write_sync() memperbarui buffer internal yang terkait dengan ID laporan masukan dengan data yang baru saja dikirim. Kemudian, tugas laporan masukan berkala selalu mengirimkan data laporan masukan yang sama setelah setiap durasi idle berlalu dan hingga tugas aplikasi memperbarui data di buffer internal. Terdapat mekanisme penguncian untuk menghindari kerusakan data ID laporan masukan jika terjadi modifikasi yang terjadi tepat pada waktu transmisi yang dilakukan oleh tugas laporan masukan berkala.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

42/174

Lebihview
Lebihview
Kelas MSC Perangkat USB
Perangkat USB MSC Kelas Atasview Kebutuhan Sumber Daya Kelas MSC Perangkat USB dari Inti Konfigurasi Kelas MSC Perangkat USB Panduan Pemrograman Kelas MSC Perangkat USB Driver Penyimpanan Kelas MSC Perangkat USB
Bagian ini menjelaskan kelas perangkat penyimpanan massal (MSC) yang didukung oleh Silicon Labs USB Device. MSC adalah protokol yang memungkinkan transfer informasi antara perangkat USB dan host. Informasi yang ditransfer adalah apa pun yang dapat disimpan secara elektronik, seperti program yang dapat dieksekusi, kode sumber, dokumen, gambar, data konfigurasi, atau data teks atau numerik lainnya. Perangkat USB muncul sebagai media penyimpanan eksternal bagi host, yang memungkinkan transfer filemelalui drag and drop.
A file sistem mendefinisikan bagaimana files diatur dalam media penyimpanan. Spesifikasi kelas penyimpanan massal USB tidak memerlukan persyaratan khusus file sistem untuk digunakan pada perangkat yang sesuai. Sebaliknya, sistem ini menyediakan antarmuka sederhana untuk membaca dan menulis sektor data menggunakan set perintah transparan Small Computer System Interface (SCSI). Dengan demikian, sistem operasi dapat memperlakukan drive USB seperti hard drive, dan dapat memformatnya dengan perangkat apa pun. file sistem yang mereka sukai.
Kelas perangkat penyimpanan massal USB mendukung dua protokol transportasi, sebagai berikut:
Transportasi Hanya-Massal (BOT) Transportasi Kontrol/Massal/Interupsi (CBI) (hanya digunakan untuk drive disket)
Kelas perangkat penyimpanan massal mengimplementasikan set perintah transparan SCSI hanya menggunakan protokol BOT, yang berarti hanya titik akhir massal yang akan digunakan untuk mengirimkan data dan informasi status. Implementasi MSC mendukung beberapa unit logis.
Implementasi MSC mematuhi spesifikasi berikut:
Spesifikasi Kelas Penyimpanan Massal Bus Serial Universalview, Revisi 1.3 5 September 2008. Transportasi Khusus Kelas Penyimpanan Massal Bus Serial Universal, Revisi 1.0 31 September 1999.
Perangkat USB MSC aCl ss Overview
Titik Akhir Protokol Kelas Permintaan Antarmuka Sistem Komputer Kecil (SCSI)
Protokol
Pada bagian ini, kita akan membahas protokol Bulk-Only Transport (BOT) dari Kelas Penyimpanan Massal. Protokol Bulk-Only Transport memiliki tiga bagian:tagadalah:
Transportasi Perintah Transportasi Data Transportasi Status
Perintah penyimpanan massal dikirim oleh host melalui struktur yang disebut Command Block Wrapper (CBW). Untuk perintah yang memerlukan transfer data,tage, host akan mencoba mengirim atau menerima jumlah byte yang tepat dari perangkat sesuai yang ditentukan oleh panjang dan bidang bendera CBW. Setelah pengiriman datatage, host mencoba menerima Command Status Wrapper (CSW) dari perangkat yang merinci status perintah serta sisa data (jika ada)

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

43/174

Lebihview
apa pun). Untuk perintah yang tidak menyertakan transportasi data stagMisalnya, host mencoba menerima CSW langsung setelah CBW dikirim. Protokol ini dirinci pada Gambar – Protokol MSC.
Gambar – Protokol MSC

Endpoints
Di sisi perangkat, sesuai dengan spesifikasi BOT, MSC terdiri dari titik akhir berikut: Sepasang titik akhir kontrol MASUK dan OUT yang disebut titik akhir default. Sepasang titik akhir MASUK dan OUT massal.
Tabel di bawah menunjukkan berbagai penggunaan titik akhir.
Tabel – Penggunaan Titik Akhir MSC

Titik akhir
Kontrol MASUK Kontrol KELUAR Masuk Massal Keluar Massal

Arah
Perangkat ke Host Host ke Perangkat Perangkat ke Host Host ke Perangkat

Penggunaan
Enumerasi dan permintaan khusus kelas MSC Enumerasi dan permintaan khusus kelas MSC Kirim CSW dan data Terima CBW dan data

Permintaan Kelas
Terdapat dua permintaan kontrol yang telah ditentukan untuk protokol MSC BOT. Permintaan dan deskripsinya dirinci dalam tabel di bawah ini.

Tabel – Permintaan Kelas Penyimpanan Massal

Permintaan Kelas
Reset Penyimpanan Massal Hanya-Massal

Keterangan
Permintaan ini digunakan untuk mengatur ulang perangkat penyimpanan massal dan antarmuka terkaitnya. Permintaan ini mempersiapkan perangkat untuk menerima blok perintah berikutnya.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

44/174

Lebihview

Permintaan Kelas

Keterangan

Dapatkan Maksimum Permintaan ini digunakan untuk mengembalikan nomor unit logis (LUN) tertinggi yang didukung oleh perangkat. Misalnyaample, a

LUN

perangkat dengan LUN 0 dan LUN 1 akan mengembalikan nilai 1. Perangkat dengan satu unit logis akan mengembalikan 0 atau menghentikan

permintaan. Nilai maksimum yang dapat dikembalikan adalah 15.

Antarmuka Sistem Komputer Kecil SCSI

Pada tingkat antarmuka pemrograman, perangkat MSC mengimplementasikan salah satu protokol komunikasi media penyimpanan standar, seperti SCSI dan SFF-8020i (ATAPI). "Antarmuka Pemrograman" menentukan protokol yang diimplementasikan, dan membantu sistem operasi host memuat driver perangkat yang sesuai untuk berkomunikasi dengan perangkat penyimpanan USB. SCSI adalah protokol yang paling umum digunakan dengan perangkat penyimpanan USB MSC. Kami menyediakan implementasi untuk subkelas MSC SCSI yang dapat langsung digunakan oleh pengguna GSDK kami.
SCSI adalah seperangkat standar untuk menangani komunikasi antara komputer dan perangkat periferal. Standar-standar ini mencakup perintah, protokol, antarmuka elektrik, dan antarmuka optik. Perangkat penyimpanan yang menggunakan antarmuka perangkat keras lain, seperti USB, menggunakan perintah SCSI untuk mendapatkan informasi perangkat/host dan mengendalikan operasi perangkat serta mentransfer blok data di media penyimpanan.
Perintah SCSI mencakup berbagai jenis dan fungsi perangkat, sehingga perangkat memerlukan sebagian dari perintah ini. Secara umum, perintah berikut diperlukan untuk komunikasi dasar:
PERTANYAAN KAPASITAS BACA(10) BACA(10) PERMINTAAN UNIT UJI RASA SIAP TULIS(10)
Kebutuhan Sumber Daya Kelas MSC Perangkat USB dari Inti

Setiap kali Anda menambahkan instans kelas MSC ke konfigurasi USB melalui fungsi sl_usbd_msc_add_to_configuration() , sumber daya berikut akan dialokasikan dari inti.

Sumber
Antarmuka Antarmuka alternatif Titik akhir Grup antarmuka

Kuantitas
Telepon: 1 1 2 0

Perhatikan bahwa angka-angka tersebut adalah per konfigurasi. Saat mengatur nilai konfigurasi SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY, dan SL_USBD_DESCRIPTOR_QUANTITY, jangan lupa untuk memperhitungkan berapa banyak konfigurasi yang akan ditambahkan ke kelas. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, karena titik akhir hanya dibuka ketika konfigurasi ditetapkan oleh host, Anda hanya perlu memperhitungkan jumlah titik akhir yang dibutuhkan untuk sebuah instans kelas.
Konfigurasi Kelas MSC Perangkat USB

Dua kelompok parameter konfigurasi digunakan untuk mengonfigurasi kelas MSC:
Konfigurasi Khusus Aplikasi Kelas MSC Perangkat USB Konfigurasi Unit Logis Kelas MSC Perangkat USB
Konfigurasi Khusus Aplikasi Kelas MSC Perangkat USB

Konfigurasi Waktu Kompilasi Kelas Pembuatan Instansi Kelas

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

45/174

Lebihview

Konfigurasi Waktu Kompilasi Kelas
Kelas MSC dan subkelas SCSI Perangkat USB Silicon Labs dapat dikonfigurasi pada waktu kompilasi melalui #defines yang terletak di sl_usbd_core_config.h file.
Tabel – Konstanta Konfigurasi Umum

Nama Konfigurasi

Keterangan

SL_USBD_MSC_CLASS_INST Jumlah instans kelas yang akan Anda alokasikan melalui panggilan ke fungsi

JUMLAH_ANCE

sl_usbd_msc_scsi_create_instance() .

SL_USBD_MSC_CONFIGURA Jumlah konfigurasi yang dapat ditambahkan instance kelas melalui panggilan ke

JUMLAH_TION

fungsi sl_usbd_msc_scsi_add_to_configuration() .

SL_USBD_MSC_LUN_QUANT Jumlah unit logis per instans kelas yang akan Anda tambahkan melalui panggilan ke

KENYATAAN

fungsi sl_usbd_msc_scsi_lun_add() .

SL_USBD_MSC_SCSI_64_BIT Mengaktifkan atau menonaktifkan dukungan untuk Alamat Blok Logis (LBA) 64 bit.
_LBA_ID

SL_USBD_MSC_DATA_BUFF Ukuran buffer data per instans kelas dalam byte ER_SIZE

Nilai Default
2
1
2
0
512

Pembuatan Instansi Kelas
Pembuatan instans kelas MSC SCSI Perangkat USB dilakukan dengan memanggil fungsi sl_usbd_msc_scsi_create_instance(). Fungsi ini menggunakan satu argumen konfigurasi yang dijelaskan di bawah ini.
p_scsi_panggilan_balik
p_scsi_callbacks adalah penunjuk ke struktur konfigurasi bertipe sl_usbd_msc_scsi_callbacks_t. Selain panggilan balik kelas perangkat USB yang umum, yaitu connect/disconnect, ia menyediakan kelas MSC dengan serangkaian fungsi panggilan balik opsional yang dipanggil ketika suatu peristiwa terjadi pada unit logis. Penunjuk null (NULL) dapat diteruskan ke argumen ini jika tidak ada panggilan balik yang diperlukan.
Tabel di bawah ini menjelaskan setiap bidang konfigurasi yang tersedia dalam struktur konfigurasi ini.
Tabel – Struktur Konfigurasi sl_usbd_msc_scsi_callbacks_t

Lapangan

Keterangan

.memungkinkan

Dipanggil saat instans kelas USB berhasil diaktifkan.

.disable Dipanggil saat instans kelas USB dinonaktifkan.

.host_eject Fungsi yang dipanggil saat unit logis dikeluarkan dari host.

Tanda Tangan Fungsi
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
membatalkan app_usbd_msc_scsi_disable(uint8_t kelas_nbr); membatalkan app_usbd_msc_scsi_host_eject(uint8_t kelas_nbr, uint8_t lu_nbr);

Konfigurasi Unit Logika Kelas MSC Perangkat USB

Menambahkan unit logis ke instans kelas MSC dilakukan dengan memanggil fungsi sl_usbd_msc_lun_add(). Fungsi ini menggunakan satu argumen konfigurasi yang dijelaskan di bawah ini.

p_lu_info

p_lu_info adalah penunjuk ke struktur bertipe sl_usbd_msc_scsi_lun_info_t. Tujuannya adalah untuk memberikan informasi tentang unit logis kepada kelas MSC.
Tabel di bawah ini menjelaskan setiap bidang konfigurasi yang tersedia dalam struktur konfigurasi ini.

Tabel – Struktur Konfigurasi sl_usbd_msc_scsi_lun_info_t

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

46/174

Lebihview

Bidang

Keterangan

Bidang
.scsi_lun_api_p tr

Keterangan
Penunjuk ke API driver media yang akan menangani unit logis ini. Lihat Driver Penyimpanan Kelas MSC Perangkat USB untuk informasi selengkapnya tentang driver penyimpanan.

.ve nd o r_id _ p tr
.product_id_ptr
.p ro d uct_ re v isi on_level .is_ read _o nly

Penunjuk ke string yang berisi identifikasi vendor unit logis. Panjang maksimum string adalah 8 karakter. Penunjuk ke string yang berisi identifikasi produk unit logis. Panjang maksimum string adalah 16 karakter. Tingkat revisi produk.
Bendera yang menunjukkan apakah unit logis harus dilihat sebagai hanya baca dari sudut pandang view dari host ( benar ) atau tidak ( salah ).

Panduan Pemrograman Kelas MSC Perangkat USB

Bagian ini menjelaskan cara menggunakan kelas MSC.
Inisialisasi Kelas MSC Perangkat USB Menambahkan Instansi Kelas MSC SCSI Perangkat USB ke Perangkat Anda Penanganan Unit Logis Kelas MSC Perangkat USB
Inisialisasi Kelas MSC Perangkat USB

Untuk menambahkan fungsionalitas kelas MSC SCSI ke perangkat Anda, pertama-tama inisialisasi kelas dasar MSC dan subkelas SCSI dengan memanggil fungsi sl_usbd_msc_init() dan sl_usbd_msc_scsi_init() .
Sang mantanampdi bawah ini 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()

sl_status_t status;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}
Menambahkan Instansi Kelas MSC SCSI Perangkat USB ke Perangkat Anda
Untuk menambahkan fungsionalitas kelas MSC SCSI ke perangkat Anda, pertama-tama buat sebuah instans, lalu tambahkan ke konfigurasi perangkat Anda. Anda harus menambahkan setidaknya satu unit logis ke instans Anda.
Membuat Instansi Kelas MSC SCSI
Buat instans kelas MSC SCSI dengan memanggil fungsi sl_usbd_msc_scsi_create_instance() .
Sang mantanampGambar di bawah ini menunjukkan cara memanggil sl_usbd_msc_scsi_create_instance() menggunakan argumen default. Untuk informasi selengkapnya tentang argumen konfigurasi yang akan diteruskan ke sl_usbd_msc_scsi_create_instance(), lihat Konfigurasi Khusus Aplikasi Kelas MSC Perangkat USB.
Example – Memanggil sl_usbd_ msc_scsi_create_instance()

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

47/174

Lebihview

uint8_t kelas_nbr; sl_status_t status;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .aktifkan = NULL, .nonaktifkan = NULL, .host_eject = NULL };
status = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &kelas_nbr);
if (status !SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */ }
Menambahkan Instansi Kelas MSC ke Konfigurasi Perangkat Anda
Setelah Anda membuat instance kelas MSC, Anda dapat menambahkannya ke konfigurasi dengan memanggil fungsi
sl_usbd_msc_tambahkan_ke_konfigurasi() .
Sang mantanampGambar di bawah menunjukkan cara memanggil sl_usbd_msc_scsi_add_to_configuration() menggunakan argumen default.
Example – Memanggil sl_usbd_ msc_scsi_add_to_configuration()

sl_status_t status;

status = sl_usbd_msc_scsi_add_to_configuration(kelas_nbr,

(1)

konfigurasi_nbr_fs);

(2)

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

(1) Nomor kelas untuk ditambahkan ke konfigurasi yang dikembalikan oleh sl_usbd_msc_scsi_create_instance() . (32) Nomor konfigurasi (di sini menambahkannya ke konfigurasi Kecepatan Penuh).
Penanganan Unit Logika Kelas MSC Perangkat USB
Menambahkan Unit Logika Memasang/Melepas Media Penyimpanan
Menambahkan Unit Logika
Saat menambahkan unit logis ke instans kelas MSC SCSI Anda, unit tersebut harus terhubung ke media penyimpanan (RAMDisk, kartu SD, memori flash, dll.). Kelas MSC menggunakan driver penyimpanan untuk berkomunikasi dengan media penyimpanan. Driver ini perlu disediakan saat menambahkan unit logis.
Sang mantanampdi bawah ini menunjukkan cara menambahkan unit logis melalui sl_usbd_msc_scsi_lun_add().
Example – Menambahkan Unit Logika melalui sl_usbd_msc_scsi_lun_add()

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

48/174

Lebihview

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

= “Silicon Labs”;

lu_info.product_id_ptr

= “perangkat blok exampsaya”;

lu_info.tingkat_revisi_produk = 0x1000u;

lu_info.hanya_baca

= salah;

status = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
if (status !SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */ }

Memasang/Melepas Media Penyimpanan
Setelah unit logis ditambahkan, media penyimpanan harus dipasang agar dapat diakses dari sisi host. Kelas MSC menawarkan dua fungsi untuk mengontrol asosiasi media penyimpanan ke unit logis: sl_usbd_msc_scsi_lun_attach() dan sl_usbd_msc_scsi_lun_detach(). Fungsi-fungsi ini memungkinkan Anda untuk mengemulasikan pelepasan perangkat penyimpanan agar dapat kembali mengakses aplikasi tertanam jika diperlukan.
Sang mantanampGambar di bawah menunjukkan cara menggunakan fungsi sl_usbd_msc_scsi_lun_attach() dan sl_usbd_msc_scsi_lun_detach().
Example – Pasang/Lepaskan Media

sl_status_t status;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}

(1)

status = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); jika (status ! SL_STATUS_OK) {
/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}

(2)

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) jika (status ! SL_STATUS_OK) {
/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */
}

(3)

(1) Mulai saat ini, jika perangkat MSC terhubung ke host, media penyimpanan dapat diakses.
(2) Jika perangkat MSC terhubung ke host, media tersebut sekarang akan tampak tidak tersedia. Saat ini, operasi pada media tersebut dapat dilakukan dari aplikasi tertanam.
(3) Sekali lagi, jika perangkat MSC terhubung ke host, media penyimpanan akan muncul sebagai terhubung.
Driver Penyimpanan Kelas MSC Perangkat USB
Kelas MSC Perangkat USB membutuhkan driver penyimpanan untuk berkomunikasi dengan media penyimpanan. Saat ini, Silicon Labs tidak menyediakan driver.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

49/174

Lebihview
TPY aa driver AI didefinisikan oleh typedef sl_usbd_msc_scsi_lun_api_t. Variabel sl_usbd_msc_scsi_lun_api_t kita harus disertakan untuk aaaaaaaa variabel sl_usbd_msc_scsi_lun_info_t Anda, yang digunakan sebagai argumen ketika Anda menambahkan unit logika l dengan sl_usbd_msc_scsi_lun_add(). Lihat bagian USB Device MSC SCSI API untuk detail lebih lanjut tentang strukturnya. Implementasi driver penyimpanan dapat sesederhana array sektor dalam RAM. Ukuran sektor tipikal (yaitu, ukuran blok) adalah 512 untuk perangkat penyimpanan massal, dan 2048 untuk CD-ROM.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

50/174

Lebihview
Lebihview
Kelas Vendor Perangkat USB
Kelas Vendor Perangkat USB Berakhirview Kebutuhan Sumber Daya Kelas Vendor Perangkat USB dari Konfigurasi Kelas Vendor Perangkat USB Inti Panduan Pemrograman Kelas Vendor Perangkat USB Kelas Vendor memungkinkan Anda membangun perangkat khusus vendor yang dapat mengimplementasikan protokol kepemilikan. Kelas ini bergantung pada sepasang titik akhir massal untuk mentransfer data antara host dan perangkat. Transfer massal nyaman untuk mentransfer sejumlah besar data yang tidak terstruktur dan menyediakan pertukaran data yang andal dengan menggunakan mekanisme deteksi kesalahan dan coba lagi. Selain titik akhir massal, kelas Vendor juga dapat menggunakan sepasang titik akhir interupsi opsional. Sistem operasi (OS) apa pun dapat bekerja dengan kelas Vendor asalkan OS memiliki driver untuk menangani kelas Vendor. Bergantung pada OS, driver dapat berupa driver asli atau khusus vendor. Misalnya, di bawah Microsoft Windows®, aplikasi Anda berinteraksi dengan driver WinUSB yang disediakan oleh Microsoft untuk berkomunikasi dengan perangkat vendor.
Kelas Vendor Perangkat USB Berakhirview
Gambar – Arsitektur Umum Antara Host Windows dan Kelas Vendor menunjukkan arsitektur umum antara host dan perangkat menggunakan kelas Vendor. Dalam contoh ini,ample, sistem operasi host adalah MS Windows.
Gambar – Arsitektur Umum Antara Host MS Windows dan Kelas Vendor

Di sisi MS Windows, aplikasi berkomunikasi dengan perangkat vendor melalui interaksi dengan pustaka USB. Pustaka, seperti libusb, menawarkan API untuk mengelola perangkat dan jalur terkaitnya, serta untuk berkomunikasi dengan perangkat melalui titik akhir kontrol, massal, dan interupsi.
Di sisi perangkat, kelas Vendor terdiri dari titik akhir berikut:
Sepasang titik akhir kontrol MASUK dan KELUAR disebut titik akhir default. Sepasang titik akhir MASUK dan KELUAR massal.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

51/174

Lebihview

Sepasang titik akhir interupsi MASUK dan OUT. Pasangan ini opsional. Tabel di bawah ini menunjukkan penggunaan berbagai titik akhir:
Tabel – Penggunaan Titik Akhir Kelas Vendor

Arah Titik Akhir

Kontrol DI
Kontrol
KELUAR
Massal MASUK

Perangkat-yang-akan-di-host
>Host-ke-perangkat
Perangkat-yang-akan-di-host

KELUARKAN DALAM JUMLAH BESAR
Interupsi Masuk
Mengganggu
KELUAR

Host-ke-perangkat
Perangkat-yang-akan-di-host
Host-ke-perangkat

Penggunaan
Permintaan standar untuk enumerasi dan permintaan khusus vendor.
Permintaan standar untuk enumerasi dan permintaan khusus vendor.
Komunikasi data mentah. Data dapat disusun berdasarkan protokol kepemilikan.
Komunikasi data mentah. Data dapat disusun berdasarkan protokol kepemilikan.
Komunikasi atau notifikasi data mentah. Data dapat disusun berdasarkan protokol kepemilikan. Komunikasi atau notifikasi data mentah. Data dapat disusun berdasarkan protokol kepemilikan.

Aplikasi perangkat dapat menggunakan titik akhir massal dan interupsi untuk mengirim atau menerima data ke atau dari host. Aplikasi hanya dapat menggunakan titik akhir default untuk mendekode permintaan khusus vendor yang dikirim oleh host. Permintaan standar dikelola secara internal oleh lapisan Inti Perangkat USB Silicon Labs.
Kebutuhan Sumber Daya Kelas Vendor Perangkat USB dari Inti

Setiap kali Anda menambahkan instans kelas vendor ke konfigurasi melalui fungsi sl_usbd_vendor_add_to_configuration() , sumber daya berikut akan dialokasikan dari inti.

Sumber
Antarmuka Antarmuka alternatif Titik akhir Grup antarmuka

Kuantitas
1 1 2 (4 jika Anda mengaktifkan titik akhir interupsi) 0

Perhatikan bahwa angka-angka tersebut adalah per konfigurasi. Saat mengatur nilai konfigurasi SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY, dan SL_USBD_DESCRIPTOR_QUANTITY, jangan lupa untuk memperhitungkan berapa banyak konfigurasi yang akan ditambahkan ke kelas. Untuk nilai konfigurasi SL_USBD_OPEN_ENDPOINTS_QUANTITY, karena titik akhir hanya dibuka ketika konfigurasi ditetapkan oleh host, Anda hanya perlu memperhitungkan jumlah titik akhir yang dibutuhkan untuk sebuah instans kelas.
Konfigurasi Kelas Vendor Perangkat USB

Dua kelompok parameter konfigurasi digunakan untuk mengonfigurasi kelas Vendor:
Konfigurasi Spesifik Aplikasi Kelas Vendor Perangkat USB Konfigurasi Instans Kelas Vendor Perangkat USB
Konfigurasi Khusus Aplikasi Kelas Vendor Perangkat USB
Pertama, untuk menggunakan modul kelas Vendor perangkat USB Silicon Labs, sesuaikan definisi konfigurasi waktu kompilasi Vendor sesuai kebutuhan aplikasi Anda. Konfigurasi tersebut dikelompokkan kembali di dalam header sl_usbd_core_config.h. file di bagian Vendor. Tujuan konfigurasi kuantitas adalah untuk memberi tahu modul perangkat USB tentang berapa banyak objek Vendor USB yang akan dialokasikan.
Tabel di bawah ini menguraikan setiap definisi konfigurasi.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

52/174

Lebihview

Tabel – Definisi Konfigurasi Vendor Perangkat USB

Nama Konfigurasi

Keterangan

Nilai Default

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY Jumlah instans kelas yang akan Anda alokasikan melalui panggilan ke fungsi 2 sl_usbd_vendor_create_instance() .

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Jumlah konfigurasi. Instans kelas vendor dapat ditambahkan ke satu atau beberapa konfigurasi melalui pemanggilan fungsi sl_usbd_vendor_add_to_configuration().

Konfigurasi Instans Kelas Vendor Perangkat USB

Bagian ini mendefinisikan konfigurasi yang terkait dengan instans kelas Vendor.
Pembuatan Instansi Kelas intr_en interval p_vendor_callbacks
Pembuatan Instansi Kelas

Pembuatan instance kelas Vendor dilakukan dengan memanggil fungsi sl_usbd_vendor_create_instance(), yang membutuhkan tiga argumen konfigurasi yang dijelaskan di bawah ini.

intr_en
Boolean yang menunjukkan apakah sepasang titik akhir interupsi harus ditambahkan atau tidak.

Nilai
benar salah

Keterangan
Sepasang titik akhir MASUK/KELUAR akan ditambahkan dan tersedia untuk aplikasi tertanam. Tidak ada titik akhir interupsi yang akan ditambahkan. Hanya sepasang titik akhir MASUK/KELUAR Massal yang akan tersedia.

selang
Jika Anda menyetel intr_en ke true, Anda dapat menentukan interval polling titik akhir interupsi (dalam milidetik). Jika Anda menyetel intr_en ke false, Anda dapat menyetel interval ke 0 karena akan diabaikan oleh kelas.
p_vendor_callbacks
p_vendor_callbacks adalah penunjuk ke variabel struktur fungsi panggilan balik yang dapat Anda tentukan untuk menangani permintaan kontrol khusus kelas. Jika Anda tidak menggunakan permintaan khusus kelas atau memerlukan notifikasi pengaktifan/penonaktifan, Anda dapat menyetelnya ke NULL.
Sang mantanampdi bawah ini menyediakan tanda tangan yang diharapkan dari penangan permintaan khusus kelas Anda.
Example – Tanda Tangan Fungsi Permintaan Spesifik Kelas

batalkan app_usbd_vendor_req_handle(uint8_t

kelas_nbr, (1)

const sl_usbd_setup_req_t *p_setup_req); (2)

sl_usbd_vendor_callbacks_t fungsi_panggilan_balik_vendor_usbd =
{
.aktifkan = NULL, .nonaktifkan = NULL, .setup_req = app_usbd_vendor_req_handle,
};

(1) Nomor instansi kelas vendor.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

53/174

Lebihview

(2) Pointer ke permintaan pengaturan yang diterima dari host.
Panduan Pemrograman Kelas Vendor Perangkat USB
Bagian ini menjelaskan cara menggunakan kelas Vendor. Menginisialisasi Kelas Vendor Perangkat USB Menambahkan Instans Kelas Vendor Perangkat USB ke Perangkat Anda Berkomunikasi menggunakan Kelas Vendor Perangkat USB
Menginisialisasi Kelas Vendor Perangkat USB
Untuk menambahkan fungsionalitas Kelas Vendor ke perangkat Anda, pertama-tama inisialisasi kelas dengan memanggil fungsi USBD_Vendor_Init(). Contoh:ampdi bawah ini menunjukkan cara memanggil sl_usbd_vendor_init().
Example – Memanggil sl_usbd_vendor_init()

sl_status_t status;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Terjadi kesalahan. Penanganan kesalahan harus ditambahkan di sini. */ }
Menambahkan Instansi Kelas Vendor Perangkat USB ke Perangkat Anda
Untuk menambahkan fungsionalitas kelas vendor ke perangkat Anda, pertama-tama Anda harus membuat sebuah instans, lalu menambahkannya ke konfigurasi perangkat Anda.
Membuat Instansi Kelas Vendor Menambahkan Instansi Kelas Vendor ke Konfigurasi Perangkat Anda
Membuat Instansi Kelas Vendor
Buat instance kelas Vendor dengan memanggil fungsi sl_usbd_vendor_create_instance(). Contoh:ampGambar di bawah ini menunjukkan cara memanggil sl_usbd_vendor_create_instance() menggunakan argumen default. Untuk informasi selengkapnya tentang argumen konfigurasi yang akan diteruskan ke sl_usbd_vendor_create_instance(), lihat Konfigurasi Instans Kelas Vendor Perangkat USB.
Example – Memanggil sl_usbd_vendor_create_instance()

uint8_t kelas_nbr; sl_status_t status;

status = sl_usbd_vendor_create_instance(salah,

(1)

0u,

(2)

fungsi_panggilan_balik_vendor_usbd_app, (3)

&kelas_nbr);

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

(1) Tidak ada titik akhir Interupsi dengan instans kelas ini. (2) Interval diabaikan karena titik akhir Interupsi dinonaktifkan.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

54/174

Lebihview

(3) Fungsi panggilan balik yang merupakan bagian dari aplikasi Anda yang menangani permintaan kelas khusus vendor. Lihat Berkomunikasi menggunakan Kelas Vendor Perangkat USB untuk informasi selengkapnya. Menambahkan Instans Kelas Vendor ke Konfigurasi Perangkat Anda Setelah Anda membuat instans kelas vendor, Anda dapat menambahkannya ke konfigurasi dengan memanggil fungsi USBD_Vendor_ConfigAdd(). ContohampGambar di bawah menunjukkan cara memanggil sl_usbd_vendor_add_to_configuration() menggunakan argumen default.
Example – Memanggil sl_usbd_vendor_add_to_configuration()

sl_status_t status;

status = sl_usbd_vendor_add_to_configuration(kelas_nbr,

(1)

konfigurasi_nbr_fs);

(2)

jika (status ! SL_STATUS_OK) {

/* Terjadi kesalahan. Penanganan kesalahan perlu ditambahkan di sini. */

}

(1) Nomor kelas untuk ditambahkan ke konfigurasi yang dikembalikan oleh sl_usbd_vendor_create_instance() . (2) Nomor konfigurasi (di sini menambahkannya ke konfigurasi Kecepatan Penuh).
Berkomunikasi Menggunakan Kelas Vendor Perangkat USB
Komunikasi Sinkron Umum Komunikasi Asinkron Permintaan Vendor Umum Kelas Vendor menawarkan fungsi-fungsi berikut untuk berkomunikasi dengan host. Untuk detail selengkapnya tentang parameter fungsi, lihat API Vendor Perangkat USB.
Tabel – Ringkasan API Komunikasi Vendor

Nama fungsi
sl_usb d _v e nd o r_ baca _b ulk_sy nc() sl_usb d _v e nd o r_ tulis _b ulk_sy nc() sl_usb d _v e nd o r_ baca _b ulk_asy nc() sl_usb d _v e nd o r_ tulis _b ulk_asy nc() sl_usb d _v e nd o r_ baca _inte rrup t_sy nc() sl_usb d _v e nd o r_ tulis _inte rrup t_sy nc() sl_usb d _v e nd o r_ baca _inte rrup t_asy nc
()
sl_usb d _v e nd o 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-
pemblokiran.
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 Laboratorium Silikon. Seluruh hak cipta.

55/174

Lebihview

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

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(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) {

/* $$$$ Tangani kesalahan. */

}

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) {

/* $$$$ Tangani kesalahan. */

}

(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 menyediakan buffer transmisi yang diinisialisasi.
(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 Asinkron
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 Laboratorium Silikon. Seluruh hak cipta.

56/174

Lebihview

void app_usbd_vendor_comm (uint8_t class_nbr)

{

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(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) {

/* $$$$ Tangani kesalahan. */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(5)

2u,

app_usbd_vendor_tx_completed,

BATAL,

(4)

false);

(6)

jika (status ! SL_STATUS_OK) {

/* $$$$ Tangani kesalahan. */

}

}

(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. */

} kalau tidak {

/* $$$$ Tangani kesalahan. */

}

}

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. */

} kalau tidak {

/* $$$$ Tangani kesalahan. */

}

}

(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 Laboratorium Silikon. Seluruh hak cipta.

57/174

Lebihview
(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 Laboratorium Silikon. Seluruh hak cipta.

58/174

Lebihview

#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

50 tahun

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;

sl_status_t status;

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;

bawaan:

(6)

// Request is not supported.

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

59/174

Lebihview

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):

tipedef 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 Laboratorium Silikon. Seluruh hak cipta.

60/174

Dokumentasi API
Dokumentasi API
Dokumentasi API
Daftar 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

Keterangan
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 Laboratorium Silikon. Seluruh hak cipta.

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 Laboratorium Silikon. Seluruh hak cipta.

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 Laboratorium Silikon. Seluruh hak cipta.

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 Laboratorium Silikon. Seluruh hak cipta.

64/174

USB Device ACM API

Jenis
ruang kosong

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
Pengembalian

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

Keterangan

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

Jenis
uint16_t
uint16_t

Direction Argument Name

Keterangan

Tidak tersedia

line_state_interval Line state notification interval in milliseconds (value must

be a power of 2).

Tidak tersedia

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 *

Tidak tersedia

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.

Pengembalian

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

Jenis
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.

Pengembalian

Hak Cipta © 2025 Laboratorium Silikon. Seluruh hak cipta.

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

Jenis

Arah

Argument Name

Keterangan

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 Daya

SILICON LABS USB Device Stack [Bahasa Indonesia:] Panduan Instruksi
USB Device Stack, Device Stack, Stack

Referensi

Tinggalkan komentar

Alamat email Anda tidak akan dipublikasikan. Bidang yang wajib diisi ditandai *