SILICON LABS USB Aygıt Yığını Kullanım Kılavuzu

USB Aygıt Yığını

Özellikler

  • USB Sürümü: 1.5.1
  • Çıkış Tarihi: 21 Temmuz 2025
  • Simplicity SDK Sürümü: 2025.6.1

Ürün Bittiview

Silicon Labs'ın USB aygıt yığını çok yönlü ve
IoT projeleri için kullanımı kolay USB bağlantısı,
ağ yardımcı işlemcileri ve ana bilgisayarlar arasındaki iletişim.

Özellikler

  • Verimli USB aygıt yığını
  • IoT projeleri için ideal
  • Ağ yardımcı işlemcileri ve ağlar arasındaki iletişim desteği
    ev sahipleri

Ürün Kullanım Talimatları

USB Aygıt Yapılandırması

USB aygıt ayarlarını projenize göre yapılandırın
USB Aygıt Yapılandırması bölümüne başvurarak gereksinimlerinizi karşılayın
belgelerde.

USB Aygıt Programlama Kılavuzu

USB Aygıt Programlama Kılavuzunu takip ederek nasıl yapılacağını anlayabilirsiniz.
USB aygıtıyla çeşitli işlemler için programlama yapın ve etkileşim kurun
Uygulamalar.

USB Aygıt Sınıfları

USB Aygıt Sınıfları bölümü,view farklı
CDC ACM, HID, MSC SCSI ve Satıcı Sınıfı gibi sınıflar.
Cihazınızın işlevselliğine göre uygun sınıfı seçin.

USB Aygıt Sorun Giderme

USB aygıtıyla ilgili herhangi bir sorunla karşılaşırsanız, bkz.
Çözümler ve hata ayıklama için USB Aygıt Sorun Giderme bölümü
İpuçları.

Microsoft Windows İşletim Sistemi USB Ana Bilgisayarı

USB aygıtını Microsoft Windows işletim sistemiyle kullanıyorsanız USB
Ev sahibi, lütfen aşağıdaki yönergeleri takip ettiğinizden emin olun:
Kusursuz entegrasyon için dokümantasyon.

SSS

S: Bazı yaygın örnekler nelerdir?ampkullanarak inşa edebileceğim cihaz sayısı
bu USB yığını mı?

A: USB yığını, aşağıdaki gibi cihazlar oluşturmanıza olanak tanır:
USB-seri adaptörler, fareler veya klavyeler, çıkarılabilir depolama
cihazlar ve özel cihazlar.

S: Bu yazılımı kullanmak için herhangi bir özel yazılım gereksinimi var mı?
USB aygıt yığını mı?

A: Uyumlu yazılımlar arasında Simplicity SDK, Simplicity
Stüdyo, Simplicity Commander, GCC (GNU Derleyici Koleksiyonu),
ARM için IAR Embedded Workbench ve IAR EWARM.

Evrensel Seri Veri Yolu USB

Evrensel Seri Veri Yolu USB

USB Üzerindenview Üzerindeview
Sürüm Notları USB
Özellikler ve Özelliklerview
USB Aygıt Yapılandırması Bittiview
USB Aygıt Programlama Kılavuzu Bittiview
USB Aygıt Sınıfları Bittiview CDC ACM Sınıfı Bittiview HID Sınıfı Üzeriview MSC SCSI Sınıfı Bittiview Satıcı Sınıfı Üzeriview
USB API API Belgeleri USB Aygıt API'si USB Aygıt ACM API'si a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB Aygıt CDC API'si a sl_usbd_cdc_subcl ss_driver_t USB Aygıt Çekirdek API'si
sl_usbd_device_config_t sl_usbd_setup_req_t
sl_usbd_cl ss_driver_t USB Aygıt HID API'si
sl_usbd_hid_callbacks_t USB Aygıtı MSC API'si
sl_usbd_msc_subcl ss_driver_t USB Aygıtı MSC SCSI API
sl_usbd_msc_scsi_callbacks_t

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

1/174

Evrensel Seri Veri Yolu USB
bir sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB Aygıt Satıcısı API'si sl_usbd_vendor_callbacks_t
API Belgeleri USB Aygıt Sorun Giderme
Üzerindeview Microsoft Windows İşletim Sistemi USB Ana Bilgisayarı
Üzerindeview

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

2/174

Üzerindeview
Üzerindeview
USB Aygıtı
USB, bilgisayar sistemleri tarihindeki en başarılı iletişim arayüzlerinden biridir ve bilgisayar çevre birimlerini bağlamak için fiili standarttır. Silicon Labs USB Aygıt yığını, gömülü sistemler için özel olarak tasarlanmış bir USB aygıt modülüdür. Silicon Labs'ın kalitesi, ölçeklenebilirliği ve güvenilirliğiyle sıfırdan geliştirilen bu aygıt, USB 2.0 spesifikasyonuna uyum sağlamak için titiz bir doğrulama sürecinden geçmiştir. Bu belge, Silicon Labs USB Aygıt yığınının nasıl başlatılacağını, başlatılacağını ve kullanılacağını açıklamaktadır. Çeşitli yapılandırma değerlerini ve kullanımlarını açıklar. Ayrıca,view teknolojinin, yapılandırma olanaklarının türlerinin, uygulama prosedürlerinin ve eskiampHer mevcut sınıf için tipik kullanım örnekleri.
USB kavramlarını hızlı bir şekilde anlamanıza yardımcı olmak için, dokümantasyonda birçok örnek yer almaktadır.ampTemel işlevlere sahip USB bellekler. Bunlaramples, cihazları hızlı bir şekilde oluşturmanıza olanak tanıyan bir çerçeve sağlayacaktır. Bu örneklerampBunlar şunları içerir:
USB-seri adaptör (İletişim Aygıtı Sınıfı) Fare veya klavye (İnsan Arabirimi Aygıtı Sınıfı) Çıkarılabilir depolama aygıtı (Yığın Depolama Sınıfı) Özel aygıt (Satıcı Sınıfı)
Aşağıdakiler bittiview belgeleme bölümlerinin:
Özellikler ve Özellikler USB Aygıt Yapılandırması USB Aygıt Programlama Kılavuzu USB Aygıt Sınıfları
CDC ACM Sınıfı HID ​​Sınıfı MSC SCSI Sınıfı Satıcı Sınıfı USB Aygıtı Sorun Giderme Microsoft Windows İşletim Sistemi USB Ana Bilgisayarı

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

3/174

USB
USB

USB Sürüm 1.5.1 21 Temmuz 2025 – Sürüm Notları
Simplicity SDK Sürüm 2025.6.1
Silicon Labs'ın verimli USB cihaz yığını, ağ yardımcı işlemcileri ve ana bilgisayarlar arasındaki iletişim de dahil olmak üzere IoT projeleri için ideal, çok yönlü ve kullanımı kolay USB bağlantısı sunar. Daha önceki sürümler için buraya tıklayın.
Yayın Özeti
Temel Özellikler | API Değişiklikleri | Hata Düzeltmeleri | Çip Etkinleştirme
Temel Özellikler
Sadece altta yatan platform değişir.
API Değişiklikleri
Hiçbiri.
Hata Düzeltmeleri
Hiçbiri.
Çip Etkinleştirme
Hiçbiri.
Temel Özellikler
Yeni Özellikler | Geliştirmeler | Kaldırılan Özellikler | Kullanımdan Kaldırılan Özellikler
Yeni Özellikler
Hiçbiri.
Geliştirmeler
Sadece altta yatan platform değişir.
Kaldırılan Özellikler
Hiçbiri.
Kullanımdan Kaldırılan Özellikler
Hiçbiri.
API Değişiklikleri
Yeni API'ler | Değiştirilen API'ler | Kaldırılan API'ler | Kullanımdan Kaldırılan API'ler
Yeni API'ler

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

4/174

USB
Hiçbiri.
Değiştirilmiş API'ler
Hiçbiri.
Kaldırılan API'ler
Hiçbiri.
Kullanımdan kaldırılan API'ler
Hiçbiri.
Hata Düzeltmeleri
Hiçbiri.
Çip Etkinleştirme
Hiçbiri.
Uygulama Örn.ample Değişiklikler
Yeni Eskiamples | Değiştirilmiş Eskiamples | Kaldırılan Eskiamples | Eski Sürümamples
Yeni Eskiamples
Hiçbiri.
Değiştirilmiş Eskiamples
Hiçbiri.
Eski kaldırıldıamples
Hiçbiri.
Eskimiş Eskiamples
Hiçbiri.
Sürüm Değişikliklerinin Etkisi
Etki Beyanları | Göç Rehberi
Etki Beyanları
Hiçbiri.
Taşıma Kılavuzu
Hiçbiri.
Bilinen Sorunlar ve Sınırlamalar
Hiçbiri.
Bu Sürümü Kullanma

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

5/174

USB

Sürümde Neler Var? | Uyumlu Yazılımlar | Kurulum ve Kullanım | Yardım ve Geri Bildirim

Sürümde neler var?

USB Aygıt Yığını Uygulama Örn.amples
Uyumlu Yazılım

Yazılım
Simplicity SDK Simplicity Studio Simplicity Commander GCC (GNU Derleyici Koleksiyonu) IAR ARM için Gömülü Çalışma Tezgahı IAR EWARM

Uyumlu Sürüm veya Varyant
2025.6.0 5.11.0 1.18.2 (Simplicity Studio ile sağlanır) 12.2.1 (Simplicity Studio ile sağlanır) 9.40.1 (Simplicity Studio ile sağlanır)

Kurulum ve Kullanım

Gelişiminizi başlatmak için şunlara bakın:
USB Aygıt Programlama Kılavuzu. API Dokümantasyonu.
Secure Vault Entegrasyonu hakkında bilgi için Secure Vault'a bakın.
Yırttıview Güvenlik ve Yazılım Danışma bildirimlerini alın ve bildirim tercihlerinizi yönetin:
ò https://community.silabs.com/ adresine gidin. ó Hesap bilgilerinizle giriş yapın. ô Profesyonelinize tıklayınfile Sayfanın sağ üst köşesindeki simge.
õ Açılır menüden Bildirimler'i seçin. ö Bildirimler bölümünde, Ürün Bildirimlerim sekmesine gidin.view tarihsel Güvenlik ve Yazılım Danışmanlığı
bildirimler
÷ Tercihlerinizi yönetmek için, hangi ürün güncellemelerini ve uyarılarını almak istediğinizi özelleştirmek üzere Bildirimleri Yönet sekmesini kullanın.
almak.
Önerilen yapılandırma ayarları için buraya bakın.
Bu sürümdeki yazılım hakkında daha fazla bilgi edinmek için çevrimiçi dokümanlarımızı inceleyin.
Yardım ve Geri Bildirim

Silicon Labs Destek ekibiyle iletişime geçin. Sorularınıza cevap bulmak için Yapay Zeka Sorusu aracımızı kullanmak üzere bu sayfanın üst kısmındaki arama alanına bakın.

Not: Ask AI deneyseldir.

Geliştirici topluluğumuzdan yardım alın.
SDK Sürüm ve Bakım Politikası
SDK Sürüm ve Bakım Politikamızı inceleyin.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

6/174

Üzerindeview
Üzerindeview
Özellikler
“Evrensel Seri Veri Yolu spesifikasyonu revizyon 2.0” ile uyumludur “Arayüz İlişkilendirme Tanımlayıcı Mühendislik Değişiklik Bildirimi (ECN)”ni uygular Aktarım türleri
Toplu Kesinti USB sınıflarını kontrol edin İletişim Cihazı Sınıfı (CDC) Soyut Kontrol Modeli (ACM) İnsan Arabirimi Cihazı (HID) Toplu Depolama Sınıfı (MSC) Satıcıya özgü sınıf çerçevesi
Özellikler
Bellek alanını en aza indirmek için yalnızca gerekli özellikleri içerecek şekilde ölçeklenebilir Tam hızı (12 Mbit/s) destekler Bileşik (çok işlevli) cihazları destekler Çoklu yapılandırma cihazlarını destekler USB güç tasarrufu işlevlerini (cihazı askıya alma ve devam ettirme) destekler Mass Storage Class'ın Micrium OS'ye tam entegrasyonu File Sistem modülü CMSIS-RTOS2 soyutlama katmanı ile geliştirilerek farklı işletim sistemleriyle uyumlu çalışabilmektedir. Silicon Labs GSDK, FreeRTOS ve Micrium OS portlarıyla birlikte gelmektedir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

7/174

Üzerindeview
Üzerindeview

USB Aygıt Yapılandırması

Bu bölümde, Silicon Labs USB Aygıtının nasıl yapılandırılacağı açıklanmaktadır. Aşağıdaki gibi üç grup yapılandırma parametresi vardır:
USB Aygıt Çekirdek Yapılandırması USB Aygıt Bilgi Yapılandırması USB Aygıt Donanım Yapılandırması
USB Aygıt Çekirdek Yapılandırması
Silicon Labs USB Aygıtı, sl_usbd_core_config.h dosyasında bulunan bir dizi #define aracılığıyla derleme zamanında yapılandırılabilir fileUSB Aygıtı, mümkün olduğunda #defines kullanır çünkü bu, kod ve veri boyutlarının derleme zamanında hangi özelliklerin etkinleştirildiğine bağlı olarak ölçeklenmesine olanak tanır. Bu, Silicon Labs USB Aygıtının salt okunur bellek (ROM) ve rastgele erişimli bellek (RAM) ayak izlerinin, uygulamanızın gereksinimlerine göre ayarlanmasına olanak tanır.
Öneri: Yapılandırma sürecini varsayılan değerlerle (kalın olarak vurgulanmıştır) başlatın.
Aşağıdaki bölümler şablon yapılandırmasındaki sıraya göre düzenlenmiştir file, sl_usbd_core_config.h.
Çekirdek Yapılandırma Sınıfları Yapılandırması
Çekirdek Yapılandırması
Tablo – USB Aygıt Çekirdek Yapılandırma Sabitleri

Sabit Açıklama

Varsayılan Değer

SL_USBD_TA SK_STACK_ BOYUTU

USBD çekirdek görevinin yığın boyutunu bayt cinsinden yapılandırır

4096

SL_USBD_TA SK_ÖNCELİK Y

USBD çekirdek görevinin önceliğini yapılandırır. Bu bir CMSIS-RTOS2 önceliğidir.

osÖncelikYüksek

SL_USBD_A UTO_START _USB_DEVIC E

Etkinleştirilirse, çekirdek başlatıldığında ve 1 USBD çekirdek görevi ilk kez planlandığında USB aygıtı otomatik olarak başlatılır. Devre dışı bırakılırsa, uygulamanızın USB ana bilgisayarı tarafından algılanmaya hazır olduğunda sl_usbd_core_start_device() işlevini çağırması gerekir.

SL_USBD_C sl_usbd_add_configuration() yoluyla eklenecek yapılandırmaların toplam sayısı

1

ONFİGÜRATI fonksiyonu.

ON_QUANTI

TY

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

8/174

Üzerindeview

Devamlı
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ANTİTE
SL_USBD _TANIM
PTOR_Q
BÜYÜKLÜK
SL_USBD _DİZİ _MİKTAR
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY

Açıklama Tüm yapılandırmalarınız için eklenecek toplam USB arabirimi sayısı. Bu sayı, kullanılan sınıf(lar)a büyük ölçüde bağlıdır. Bir sınıf örneğinin kaç arabirim gerektirdiği hakkında daha fazla bilgi için, sınıf(lar)ınızın "Çekirdek Kaynak İhtiyaçları" bölümüne bakın.
Tüm yapılandırmalarınız için eklenecek toplam USB alternatif arayüz sayısı. Bu sayı, kullanılan sınıf(lar)a büyük ölçüde bağlıdır. Bu değer her zaman SL_USBD_INTERFACE_QUANTITY değerine eşit veya daha büyük olmalıdır. Bir sınıf örneğinin kaç alternatif arayüz gerektirdiği hakkında daha fazla bilgi için, sınıf(lar)ınızın "Çekirdek Kaynak İhtiyaçları" bölümüne bakın.
Tüm yapılandırmalarınız için eklenecek toplam USB arayüz grubu sayısı. Bu sayı, büyük ölçüde kullanılan sınıf(lar)a bağlıdır. Kaç arayüz grubunun bir sınıf örneği gerektirdiği hakkında daha fazla bilgi için, sınıf(lar)ınızın "Çekirdek Kaynak İhtiyaçları" bölümüne bakın.
Tüm yapılandırmalarınız için eklenecek toplam Uç Nokta tanımlayıcı sayısı. Bu büyük ölçüde kullanılan sınıf(lar)a bağlıdır. Bir sınıf örneğinin kaç uç nokta tanımlayıcısı gerektirdiği hakkında daha fazla bilgi için, sınıf(lar)ınızın "Çekirdek Kaynak İhtiyaçları" bölümündeki "Uç Nokta Sayısı"na bakın. Kontrol uç noktalarının burada dikkate alınması gerekmediğini unutmayın. Toplam USB dizesi sayısı. Miktarı sıfıra ayarlamak özelliği devre dışı bırakacaktır. Bu özelliği devre dışı bırakmak, cihazın uygulamadan geçirilen hiçbir USB açıklama dizesini depolamamasına neden olacaktır. Bu, ana bilgisayarın açıklama dizelerini (üretici ve ürün adı gibi) alamayacağı anlamına gelir. Yapılandırma başına toplam açık uç nokta sayısı. Bir cihaz, kontrol aktarımları için en az iki açık uç noktaya ihtiyaç duyar, ancak kullanılan sınıf(lar)ın uç noktalarını da eklemeniz gerekir. Bir sınıf örneğinin kaç açık uç noktaya ihtiyaç duyduğu hakkında daha fazla bilgi için, sınıf(lar)ınızın "Çekirdek Kaynak İhtiyaçları" bölümündeki "Uç Nokta Sayısı"na bakın.

Varsayılan Değer
10 10
2
20 30 20

Sınıf Yapılandırması
Sınıfların belirli derleme zamanı yapılandırmaları vardır. Daha fazla bilgi için USB Aygıt Sınıfları'na bakın.
USB Aygıt Bilgisi Yapılandırması

sl_usbd_device_config.h yapılandırması file Cihazınızla ilgili temel bilgileri (Satıcı/Ürün Kimliği, cihaz dizeleri vb.) ayarlamak için derleme zamanı #define-s'lerini yeniden gruplandırır. Aşağıdaki tablo, bu yapılandırmada mevcut olan her bilgi yapılandırma tanımını açıklar. file.

Tablo – USB Aygıt Bilgisi Yapılandırması Tanımları

Devamlı
SL_USBD_DEVIC E_SATICI_KIMLIĞI
SL_USBD_DEVIC E_ÜRÜN_KIMLIĞI

Açıklama USB Uygulayıcıları Forumu tarafından size verilen satıcı kimlik numaranız. Satıcı kimliğini nasıl edinebileceğiniz hakkında daha fazla bilgi için http://www.usb.org/developers/vendor/ adresini ziyaret edin. Ürün kimlik numaranız.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

9/174

Üzerindeview

Devamlı

Tanım

SL_USBD_DEVICE_RELEASE Cihazınızın sürüm numarası. _NUMBER

SL_USBD_DEVICE_MANUFA Cihazınızın üreticisini açıklayan dize. Bu yapılandırma,

CTURER_STRING

SL_USBD_STRING_QUANTITY yapılandırması 0 olarak ayarlandı.

SL_USBD_DEVICE_PRODUC Ürününüzü tanımlayan dize. Bu yapılandırma, yapılandırma sırasında göz ardı edilir.

T_DİZGİSİ

SL_USBD_STRING_QUANTITY 0 olarak ayarlandı.

SL_USBD_DEVICE_SERIAL_N Cihazınızın seri numarasını içeren dize. Bu yapılandırma,

UMBER_DİZİSİ

SL_USBD_STRING_QUANTITY yapılandırması 0 olarak ayarlandı.

SL_USBD_DEVICE_LANGUA Cihazınızın dizelerinin dilinin tanımlama numarası. Olası değerler şunlardır:
GE_ID

– SL_USBD_LANG_ID_ARABIC_SUUDI_ARABIA

– SL_USBD_LANG_ID_ÇİN_TAYVAN

– SL_USBD_LANG_ID_İNGİLİZCE_ABD

– SL_USBD_LANG_ID_İNGİLİZCE_BK

– SL_USBD_LANG_ID_FRANSIZCA

– SL_USBD_LANG_ID_ALMANCA

– SL_USBD_LANG_ID_YUNANCA

– SL_USBD_LANG_ID_İTALYAN

– SL_USBD_LANG_ID_PORTEKİZCE

– SL_USBD_LANG_ID_SANSKRIT

SL_USBD_STRING_QUANTITY yapılandırması 0 olarak ayarlandığında bu yapılandırma göz ardı edilir.

USB Aygıt Donanım Yapılandırması

Kullandığınız Silicon Labs cihazına bağlı olarak, USB VBUS Sense sinyali için yapılandırılacak GPIO pini ve portuna sahip olabilirsiniz. Yapılandırma tanımları sl_usbd_hardware_config.h başlığındadır. file.

Devamlı
SL_USBD_DRIVER_VBUS_SENSE_PORT SL_USBD_DRIVER_VBUS_SENSE_PIN

Tanım
Kartınızdaki USB VBUS Sense sinyali için GPIO Portu. Kartınızdaki USB VBUS Sense sinyali için GPIO Pin.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

10/174

Üzerindeview
Üzerindeview
USB Aygıt Programlama Kılavuzu
Bu bölümde USB Aygıt modülünün nasıl kullanılacağı açıklanmaktadır.
USB Aygıt Modülünün İlk Kurulumu
Bu bölüm, USB Aygıt modülünü başlatmak ve bir aygıt eklemek, hazırlamak ve başlatmak için gereken temel adımları açıklamaktadır. USB Aygıt Modülünü Başlatma USB Aygıt Çekirdeğini Başlatma aCl ss(ler)ini Başlatma USB Aygıtınızı Ekleme USB Aygıtınızı Oluşturma Yapılandırma(lar) Ekleme USB İşlev(ler)ini Ekleme USB Aygıtınızı Başlatma
Olay Kancası İşlevleri
USB Aygıt Modülünün Başlatılması
USB Aygıt Çekirdeğini Başlatma
a ABD a B aygıt modülü çekirdeğini sl_usbd_core_init() fonksiyonunu çağırarak başlatarak başlayın. Aşağıdaki örnek sl_usbd_core_init() fonksiyonunun çağrılmasını göstermektedir.
Example – sl_usbd_core_init() çağrılıyor
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
Sınıf(lar)ın Başlatılması
USB aygıt modülü çekirdeği başlatıldıktan sonra, kullanmak istediğiniz her sınıfı başlatmanız gerekir. Daha fazla bilgi için acl ss(ler)inizin "Programlama Kılavuzu" bölümüne bakın.
USB Cihazınızı Oluşturma
Yapılandırma(lar) Ekleniyor
Cihazınızı başarıyla başlattıktan sonra, yeni bir yapılandırmayla başlayarak USB işlevlerini eklemeye başlayabilirsiniz. Bir cihazın en az bir yapılandırması olmalıdır. Yapılandırma eklemek için aa sl_usbd_core_dd_configurtion() fonksiyonunu çağırın. Bu fonksiyon, eklemek istediğiniz her yapılandırma için çağrılmalıdır. Örnek:ampAşağıda Tam Hız'ın nasıl ekleneceğini görebilirsiniz.
Example – Cihazınıza Yapılandırma(lar) Ekleme

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

11/174

Üzerindeview

sl_status_t durumu; uint8_t yapılandırma_nbr_fs;

/* Cihaza tam hız yapılandırması ekleniyor. */

durum = sl_usbd_core_add_configuration(0,

/* Yapılandırmaya özel bir nitelik yok. */

100sen,

/* Maksimum güç tüketimi: 100mA.

*/

SL_USBD_CİHAZ_HIZI_TAM,

/* Tam Hızlı yapılandırma.

*/

"Yapılandırma Ekle Examp"Tam Hızlı Yapılandırma"

&config_nbr_fs);

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

USB İşlevi(leri)nin Eklenmesi
Cihazınıza en az bir yapılandırmayı başarıyla ekledikten sonra, arayüzleri ve uç noktaları cihazınıza ekleyebilirsiniz. Her USB sınıfının, arayüz ve uç nokta türü, sayısı ve diğer parametreler açısından kendine özgü ihtiyaçları vardır. Silicon Labs USB Aygıtı, sunduğu sınıflara arayüzler ve uç noktalar ekler.
Uygulamanızdan bir USB sınıfı örneği oluşturabilir ve bir yapılandırmaya ekleyebilirsiniz. USB aygıt sınıfı örnekleri kavramı hakkında daha fazla bilgi için USB Aygıt Sınıfları bölümüne bakın. Çok işlevli (bileşik) bir aygıt oluşturmak için birçok farklı sınıf örneği örneği oluşturup bir yapılandırmaya ekleyebileceğinizi unutmayın.
Eski sevgiliampAşağıdaki şekilde bir sınıf örneğinin nasıl oluşturulacağı ve bir yapılandırmaya nasıl ekleneceği gösterilmektedir.
Example – Aygıtınıza Bir Sınıf Örneği Ekleme

sl_status_t durumu; uint8_t sınıf_numarası;
/* Kullanmak istediğiniz sınıfın bir örneğini oluşturun.*/ /* Sınıfa bağlı olarak bu fonksiyonun daha fazla argümana sahip olabileceğini unutmayın. */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }
/* Sınıf örneğini Tam Hız yapılandırmasına ekleyin. */ status = sl_usbd_ _add_to_configuration(class_nbr, /* sl_usbd_ tarafından döndürülen sınıf numarası _örnek_oluştur. */
config_nbr_fs); /* sl_usbd_core_add_configuration() tarafından döndürülen yapılandırma numarası. */ if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }
USB Aygıtınızı Başlatma
Varsayılan olarak, aygıt başlatma işlemi tamamlandıktan ve çekirdek başlatıldıktan sonra aygıt, USB aygıt çekirdek görevi tarafından otomatik olarak başlatılır. Aygıtın ne zaman başlatılacağını ve USB ana bilgisayarı tarafından ne zaman görünür hale geleceğini kontrol etmek için, otomatik başlatma özelliğini devre dışı bırakmak üzere SL_USBD_AUTO_START_USB_DEVICE yapılandırmasını kullanın. Devre dışı bırakıldığında, aygıtınızı oluşturduktan/hazırladıktan sonra, sl_usbd_core_start_device() işlevini çağırarak aygıtı başlatabilir ve USB ana bilgisayarı tarafından görünür hale getirebilirsiniz.
Eski sevgiliampAşağıdaki videoda sl_usbd_core_start_device() fonksiyonunu kullanarak cihazınızı nasıl başlatacağınız gösterilmektedir.
Example – Cihazınızı Başlatma

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

12/174

Üzerindeview

sl_status_t durumu;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }

Olay Kancası İşlevleri
USB Aygıt çekirdek modülü, uygulamanızda yeniden tanımlayabileceğiniz iki zayıf bağlantı işlevi sunar. Amaçları, veri yolu ve yapılandırma olayları meydana geldiğinde bildirimde bulunmaktır.
Tablo – USB Olay Kancası İşlevleri

Etkinlik

Tanım

Otobüs

USB Veri Yolu olayı meydana geldiğinde çağrılır

USB Yapılandırma olayı gerçekleştiğinde çağrılan Yapılandırma

Fonksiyon İmzası
void sl_usbd_on_bus_event(sl_usbd_bus_event_t olayı); void sl_usbd_on_config_event(sl_usbd_config_event_t olayı, uint8_t yapılandırma_nbr);

Example – Olay Kancası İşlevleri

void sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { switch (event) { case SL_USBD_EVENT_BUS_CONNECT:
// USB kablosu ana denetleyiciye takıldığında çağrılır;
case SL_USBD_EVENT_BUS_DISCONNECT: // USB kablosu ana denetleyiciden çıkarıldığında çağrılır;
case SL_USBD_EVENT_BUS_RESET: // ana bilgisayar sıfırlama komutu gönderdiğinde çağrılır break;
case SL_USBD_EVENT_BUS_SUSPEND: // ana bilgisayar askıya alma komutunu gönderdiğinde çağrılır break;
case SL_USBD_EVENT_BUS_RESUME: // ana bilgisayar uyandırma komutu gönderdiğinde çağrılır break;
varsayılan: kes; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr) { switch (olay) { case SL_USBD_EVENT_CONFIG_SET:
// ana bilgisayar bir yapılandırma kesintisi ayarladığında çağrılır;
case SL_USBD_EVENT_CONFIG_UNSET: // bir yapılandırma ayarlanmadığında çağrılır break;
varsayılan: kes; } }

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

13/174

Üzerindeview

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

14/174

Üzerindeview
Üzerindeview

USB Aygıt Sınıfları

Silicon Labs USB Aygıtında bulunan USB sınıfları bazı ortak özelliklere sahiptir. Bu bölümde, bu özellikler ve çekirdek katmanla etkileşimleri açıklanmaktadır.
Belirli bir sınıf hakkında daha fazla bilgi için aşağıdakilere bakın:
CDC ACM Sınıfı HID ​​Sınıfı MSC SCSI Sınıfı Satıcı Sınıfı
Sınıf Örnekleri Hakkında
USB Aygıtında bulunan USB sınıfları, sınıf örnekleri kavramını uygular. Bir sınıf örneği, bir aygıt içindeki bir işlevi temsil eder. İşlev, bir arayüz veya bir arayüz grubu tarafından tanımlanabilir ve belirli bir sınıfa aittir.
Her USB sınıf uygulamasının, sınıf örneği kavramına dayalı bazı ortak yapılandırmaları ve işlevleri vardır. Ortak yapılandırmalar ve işlevler aşağıdaki tabloda sunulmaktadır. 'Sabitler veya İşlev' sütun başlığında, XXXX yer tutucusu sınıfın adıyla değiştirilebilir: CDC, HID, MSC, CDC_ACM veya VENDOR (işlev adları için Satıcı).
Tablo – Çoklu Sınıf Örnekleri Kavramıyla İlgili Sabitler ve Fonksiyonlar

Sabit veya Fonksiyon
SL_USBD_XXXX_CL ASS_INS TANCE_QUANTITY
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_cre ate _instance ()
sl_usbd_XXXX_add_to_conf iguration()

Tanım
Sınıf örneklerinin maksimum sayısını yapılandırır.
Maksimum yapılandırma sayısını yapılandırır. Sınıf başlatma sırasında, oluşturulan bir sınıf örneği bir veya daha fazla yapılandırmaya eklenir. Yeni bir sınıf örneği oluşturur.
Belirtilen aygıt yapılandırmasına mevcut bir sınıf örneği ekler.

Kod uygulaması açısından, sınıf, bir sınıf kontrol yapısı içeren yerel bir küresel değişken bildirecektir. Bu sınıf kontrol yapısı, bir sınıf örneğiyle ilişkilendirilir ve sınıf örneğini yönetmek için belirli bilgiler içerir.
Aşağıdaki şekiller çeşitli vaka senaryolarını göstermektedir. Her şekil bir kod örneği içermektedir.ampDurum senaryosuna uygun olanı seçin.
Şekil – Çoklu Sınıf Örnekleri – FS Cihazı (1 Arayüzlü 1 Yapılandırma), tipik bir USB cihazını temsil eder. Cihaz Tam Hızlı (FS) olup tek bir yapılandırma içerir. Cihazın işlevi, veri iletişimi için bir çift uç noktadan oluşan tek bir arayüzle tanımlanır. Bir sınıf örneği oluşturulur ve ilgili uç noktasıyla birlikte tüm arayüzü yönetmenize olanak tanır.
Şekil – Çoklu Sınıf Örnekleri – FS Aygıtı 1 Yapılandırması (1 Arayüz ile)

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

15/174

Üzerindeview

Şekil – Çoklu Sınıf Örnekleri – FS Aygıtı (1 Arayüzlü 1 Yapılandırma) ile ilgili kod örnekte gösterilmiştir.ampAşağıda.
Example – Çoklu Sınıf Örnekleri – FS Aygıtı 1 Yapılandırması 1 Arayüz ile)

sl_status_t durumu; uint8_t sınıf_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* Sınıf etkinleştirme olayını işle. */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* Sınıf devre dışı bırakma olayını işle. */ }

sl_usbd_XXXX_geri_çağrılar_t sınıf_geri_çağrıları = {

(1)

.etkinleştir = app_usbd_XXXX_etkinleştir,

.disable = app_usbd_XXXX_disable

};

durum = sl_usbd_XXXX_init();

(2)

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

durum = sl_usbd_XXXX_create_instance(&sınıf_geri_çağrıları,

(3)

&sınıf_0);

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

durum = sl_usbd_XXXX_yapılandırmaya_ekle(sınıf_0, yapılandırma_0);

(4)

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

(1) Her sınıf, cihaz bağlantı/bağlantı kesme olayları ve sınıfa özgü olaylar için bir dizi geri çağırma işlevi sunar. Geri çağırma yapısı nesnesi, sl_usbd_XXXX_create_instance() ile sınıf örneği oluşturulurken argüman olarak geçirilir.
işlev.
(1) Sınıfı başlatın. Tüm dahili değişkenler, yapılar ve sınıf portları başlatılacaktır. Bazı sınıflardaki Init() işlevinin başka argümanlar alabileceğini unutmayın.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

16/174

Üzerindeview
(2) class_0 olan sınıf örneğini yaratın. sl_usbd_XXXX_create_instance() fonksiyonu class_0 ile ilişkili bir sınıf denetim yapısı ayırır. Sınıfa bağlı olarak, sl_usbd_XXXX_create_instance() fonksiyonu sınıf denetim yapısında saklanan sınıf-özel bilgileri temsil eden sınıf numarasının dışında ek parametrelere sahip olabilir. aaa (3) Belirtilen yapılandırma numarası config_0'a sınıf örneği class_0'ı ekleyin. sl_usbd_XXXX_add_to_configuration() fonksiyonu arayüz 0'ı ve ilişkili GİRİŞ ve ÇIKIŞ uç noktalarını yaratacaktır. Sonuç olarak, sınıf örneği arayüz 0'ı ve uç noktalarını kapsar. Arayüz 0 üzerinde yapılan herhangi bir iletişim sınıf örneği numarası class_0'ı kullanacaktır. Şekil – Çoklu Sınıf Örnekleri – FS Aygıtı (2 Yapılandırma ve Çoklu Arabirimler) daha karmaşık bir örneği temsil ederampÖrneğin, tam hızlı bir cihaz iki konfigürasyondan oluşur. Cihazın aynı sınıfa ait iki işlevi vardır, ancak her işlev iki arayüzle tanımlanır ve bir çift çift yönlü uç noktaya sahiptir. Bu örnekte,ampÖrneğin, iki sınıf örneği oluşturulur. Her sınıf örneği, Şekil - Çoklu Sınıf Örnekleri - FS Aygıtı (1 Yapılandırma ve 1 Arabirim) ve Şekil - Çoklu Sınıf Örnekleri - FS Aygıtı (2 Yapılandırma ve Çoklu Arabirim) örneklerinde sınıf örneğinin tek bir arabirimle ilişkilendirilmiş olmasının aksine, bir arabirim grubuyla ilişkilendirilir.
Şekil – Çoklu Sınıf Örnekleri – FS Aygıt 2 Yapılandırmaları ve Çoklu Arayüzler)

Şekil – Çoklu Sınıf Örnekleri – FS Aygıtı (2 Yapılandırma ve Çoklu Arayüzler) ile ilgili kod örnekte gösterilmiştir.ampAşağıdaki gibi. Hata yönetimi açıklık sağlamak için çıkarılmıştır.
Example – Çoklu Sınıf Örnekleri – FS Aygıt 2 Yapılandırmaları ve Çoklu Arabirimler)

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

17/174

Üzerindeview

sl_status_t durumu; uint8_t sınıf_0; uint8_t sınıf_1;
durum = sl_usbd_XXXX_init();
durum = sl_usbd_XXXX_create_instance(&sınıf_0); durum = sl_usbd_XXXX_create_instance(&sınıf_1);
durum = sl_usbd_XXXX_yapılandırmaya_ekle(sınıf_0, cfg_0); durum = sl_usbd_XXXX_yapılandırmaya_ekle(sınıf_1, cfg_0);
durum = sl_usbd_XXXX_yapılandırmaya_ekle(sınıf_0, cfg_1); durum = sl_usbd_XXXX_yapılandırmaya_ekle(sınıf_1, cfg_1);

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

(1) Sınıfı başlatın. Tüm dahili değişkenler, yapılar ve sınıf portları başlatılacaktır.
(2) Sınıf örneğini, class_0 oluşturun. sl_usbd_XXXX_create_instance() işlevi, class_0 ile ilişkili bir sınıf denetim yapısı ayırır.
(3) Sınıf örneğini, class_1 oluşturun. sl_usbd_XXXX_create_instance() işlevi, class_1 ile ilişkili başka bir sınıf denetim yapısı ayırır.
(4) Sınıf örneği class_0'ı cfg_0 yapılandırmasına ekleyin. sl_usbd_XXXX_add_to_configuration(), arayüz 0'ı, arayüz 1'i, alternatif arayüzleri ve ilişkili GİRİŞ ve ÇIKIŞ uç noktalarını oluşturacaktır. Sınıf örneği numarası class_0, arayüz 0 veya arayüz 1 üzerindeki herhangi bir veri iletişimi için kullanılacaktır.
(5) Sınıf örneği class_1'i cfg_0 yapılandırmasına ekleyin. sl_usbd_XXXX_add_to_configuration(), arayüz 2, arayüz 3 ve bunlarla ilişkili GİRİŞ ve ÇIKIŞ uç noktalarını oluşturacaktır. Sınıf örneği numarası class_1, arayüz 2 veya arayüz 3 üzerindeki herhangi bir veri iletişimi için kullanılacaktır.
(6) Aynı sınıf örneklerini, class_0 ve class_1, diğer yapılandırmaya, cfg_1, ekleyin.
Her sınıf, sl_usbd_XXXX_callbacks_t türünde bir yapı tanımlar. Amacı, her sınıfa bir olay meydana geldiğinde çağrılacak bir dizi geri çağırma işlevi sağlamaktır. Her sınıfta iki geri çağırma işlevi bulunur. Bunlar aşağıdaki tabloda sunulmaktadır.
Tablo – Ortak Sınıf Geri Çağırma Fonksiyonları

Alanlar Açıklama .enable USB sınıf örneği başarıyla etkinleştirildiğinde çağrılır. .disable USB sınıf örneği devre dışı bırakıldığında çağrılır.

İşlev İmzası void app_usbd_XXXX_enable(uint8_t sınıf_nbr); void app_usbd_XXXX_disable(uint8_t sınıf_nbr);

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

18/174

Üzerindeview
Üzerindeview
USB Aygıtı CDC ACM Sınıfı
USB Aygıtı CDC Taban Sınıfı Üzeriview USB Aygıtı CDC ACM Sınıfı Kaynak İhtiyaçları Çekirdek USB Aygıtı CDC ACM Alt Sınıfı Üzerindenview USB Aygıtı CDC ACM Sınıfı Yapılandırması USB Aygıtı CDC ACM Sınıfı Programlama Kılavuzu
Bu bölümde, Silicon Labs'ın USB Aygıt yığınının desteklediği İletişim Aygıtı Sınıfı (CDC) sınıfı ve ilişkili CDC alt sınıfı açıklanmaktadır. Silicon Labs USB Aygıtı şu anda seri öykünme için yaygın olarak kullanılan Soyut Kontrol Modeli (ACM) alt sınıfını desteklemektedir.
CDC, çeşitli telekomünikasyon ve ağ cihazlarını içerir. Telekomünikasyon cihazları arasında analog modemler, analog ve dijital telefonlar, ISDN terminal adaptörleri vb. yer alır. Örneğin;ampÖrneğin, ağ cihazları ADSL ve kablo modemler, Ethernet adaptörleri ve hub'lar içerir. CDC, V.250 (telefon şebekesi üzerinden modemler için) ve Ethernet (yerel alan ağı cihazları için) gibi mevcut iletişim hizmeti standartlarını bir USB bağlantısı kullanarak kapsayan bir çerçeve tanımlar. Bir iletişim cihazı, cihaz yönetiminden, gerektiğinde çağrı yönetiminden ve veri iletiminden sorumludur.
CDC, yedi ana cihaz grubu tanımlar. Her grup, birkaç alt sınıfı içerebilen bir iletişim modeline aittir. Her cihaz grubunun, CDC temel sınıfının yanı sıra kendi teknik özellik belgesi vardır. Yedi grup şunlardır:
Ses bandı modemler, telefonlar ve seri emülasyon cihazları dahil olmak üzere Genel Anahtarlı Telefon Şebekesi (PSTN) cihazları. Terminal adaptörleri ve telefonlar dahil olmak üzere Entegre Hizmetler Dijital Ağı (ISDN) cihazları. IEEE 802 ailesini destekleyen cihazlar (örneğin: kablo ve ADSL modemler, WiFi adaptörleri) dahil olmak üzere Ethernet Kontrol Modeli (ECM) cihazları. ADSL modemler ve ATM ağlarına bağlı diğer cihazlar (iş istasyonları, yönlendiriciler, LAN anahtarları) dahil olmak üzere Asenkron Aktarım Modu (ATM) cihazları. Ses ve veri iletişimini yönetmek için kullanılan çok işlevli iletişim el cihazı cihazları dahil olmak üzere Kablosuz Mobil İletişim (WMC) cihazları. Ethernet çerçeveli verileri değiştiren Ethernet Emülasyon Modeli (EEM) cihazları. Yüksek hızlı ağ cihazları (Yüksek Hızlı Paket Erişim modemleri, Hat Terminal Ekipmanları) dahil olmak üzere Ağ Kontrol Modeli (NCM) cihazları.
CDC ve ilişkili alt sınıf uygulaması aşağıdaki özelliklere uygundur:
Evrensel Seri Veri Yolu, İletişim Aygıtları için Sınıf Tanımları, Revizyon 1.2, 3 Kasım 2010. Evrensel Seri Veri Yolu, İletişim, PSTN Aygıtları için Alt Sınıf, Revizyon 1.2, 9 Şubat 2007.
USB Aygıtı CDC Taban Sınıfı Üzeriview
Bir CDC cihazı, iletişim yeteneğini uygulamak için aşağıdaki arayüzlerden oluşur:
İletişim Sınıfı Arayüzü (CCI), cihaz yönetiminden ve isteğe bağlı olarak çağrı yönetiminden sorumludur.
Cihaz yönetimi, cihazın genel yapılandırmasını ve kontrolünü ve ana bilgisayara olayların bildirilmesini sağlar. Çağrı yönetimi, çağrıların başlatılmasını ve sonlandırılmasını sağlar. Çağrı yönetimi bir DCI aracılığıyla çoklanabilir. Tüm CDC cihazları için bir CCI zorunludur. CDC cihazı tarafından desteklenen iletişim modelini belirterek CDC işlevini tanımlar. CCI'ı takip eden arayüz(ler), Ses veya satıcıya özgü bir arayüz gibi herhangi bir tanımlanmış USB sınıfı arayüz olabilir. Satıcıya özgü arayüz, özel olarak bir DCI ile temsil edilir.
Veri Sınıfı Arayüzü (DCI), veri iletiminden sorumludur. İletilen ve/veya alınan veriler belirli bir
Veriler, bir iletişim hattından gelen ham veriler, tescilli bir formatı izleyen veriler vb. olabilir. CCI'yi izleyen tüm DCI'ler, alt arayüzler olarak görülebilir.
Bir CDC cihazında en az bir CCI ve sıfır veya daha fazla DCI bulunmalıdır. Bir CCI ve herhangi bir alt DCI birlikte ana bilgisayara bir özellik sağlar. Bu kabiliyet aynı zamanda bir fonksiyon olarak da adlandırılır. Bir CDC bileşik cihazında, birkaç tane olabilir:

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

19/174

Üzerindeview
Fonksiyonlar. Bu nedenle, cihaz Şekil – CDC Kompozit Cihazı'nda gösterildiği gibi birkaç CCI ve DCI setinden oluşacaktır.
Şekil – CDC Kompozit Cihazı

Bir CDC cihazının aşağıdaki uç nokta kombinasyonlarını kullanması muhtemeldir:
Varsayılan uç nokta olarak adlandırılan bir çift kontrol GİRİŞ ve ÇIKIŞ uç noktası. İsteğe bağlı bir toplu veya kesinti GİRİŞ uç noktası. Bir çift toplu veya eşzamansız GİRİŞ ve ÇIKIŞ uç noktası. Silicon Labs USB aygıt yığınının şu anda eşzamansız uç noktaları desteklemediğini unutmayın.
Aşağıdaki tablo farklı uç noktaların kullanımını ve CDC'nin hangi arayüzü tarafından kullanıldıklarını göstermektedir.
Tablo – CDC Son Nokta Kullanımı

Son nokta
Kontrol GİRİŞİ
Kontrol ÇIKIŞ
Kesinti veya toplu Toplu veya izokron Toplu veya izokron
DIŞARI

Yön
Cihazdan ana bilgisayara
Ana bilgisayardan cihaza
Cihazdan ana bilgisayara
Cihazdan ana bilgisayara
Ana bilgisayardan cihaza

Arayüz Kullanımı

CCI

Numaralandırma için standart istekler, sınıf özel istekler, cihaz

yönetimi ve isteğe bağlı olarak yönetimi çağırın.

CCI

Numaralandırma için standart istekler, sınıf özel istekler, cihaz

yönetimi ve isteğe bağlı olarak yönetimi çağırın.

CCI

Halka algılama, seri hat durumu, ağ durumu gibi olay bildirimleri.

Başçavuş

Ham veya biçimlendirilmiş veri iletişimi.

Başçavuş

Ham veya biçimlendirilmiş veri iletişimi.

Çoğu iletişim cihazı, ana bilgisayarı olaylardan haberdar etmek için bir kesme uç noktası kullanır. Tescilli bir protokol, USB protokol hataları durumunda veri yeniden iletimine dayanıyorsa, veri iletimi için izokron uç noktalar kullanılmamalıdır. İzokron iletişim, yeniden deneme mekanizmasına sahip olmadığı için doğası gereği veri kaybına neden olabilir.
Yedi ana iletişim modeli birkaç alt sınıfı kapsar. Bir alt sınıf, cihazın cihaz yönetimi ve çağrı yönetimi için CCI'ı nasıl kullanması gerektiğini açıklar. Aşağıdaki tablo, olası tüm alt sınıfları ve ait oldukları iletişim modelini göstermektedir.
Tablo – CDC Alt Sınıfları

Alt sınıf
Doğrudan Hat Kontrol Modeli Soyut Kontrol Modeli

İletişim Modeli
PSTN
PSTN

ExampBu Alt Sınıfı Kullanan Aygıtların Listesi
USB ana bilgisayarı tarafından doğrudan kontrol edilen modem aygıtları
Seri emülasyon cihazları, seri komut seti aracılığıyla kontrol edilen modem cihazları

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

20/174

Üzerindeview

Alt sınıf

İletişim Modeli

ExampBu Alt Sınıfı Kullanan Aygıtların Listesi

Telefon Kontrol Modeli

PSTN

Çok Kanallı Kontrol ISDN Modeli

CAPI Kontrol Modeli ISDN

Ethernet Ağ ECM Kontrol Modeli

ATM Ağları

ATM

Kontrol Modeli

Kablosuz El Cihazı Kontrol Modeli

WMC

Aygıt Yönetimi WMC

Mobil Doğrudan Hat Modeli

WMC

OBEX

WMC

Ethernet Emülasyonu EEM Modeli

Ağ Kontrol Modeli

NCM

Sesli telefon cihazları
Temel tarifeli terminal adaptörleri, birincil tarifeli terminal adaptörleri, telefonlar
Temel oranlı terminal adaptörleri, birincil oranlı terminal adaptörleri, telefonlar DOC-SIS kablo modemleri, PPPoE emülasyonunu destekleyen ADSL modemler, Wi-Fi adaptörleri (IEEE 802.11 ailesi), IEEE 802.3 adaptörleri ADSL modemler
Kablosuz cihazlara bağlanan mobil terminal ekipmanı
Kablosuz cihazlara bağlanan mobil terminal ekipmanı Kablosuz cihazlara bağlanan mobil terminal ekipmanı
Kablosuz cihazlara bağlanan mobil terminal ekipmanı. Bir sonraki taşıma katmanı olarak Ethernet çerçeveleri kullanan cihazlar. Yönlendirme ve İnternet bağlantı cihazları için tasarlanmamıştır. Ağ üzerinde yüksek hızlı veri bant genişliği taşıyan IEEE 802.3 adaptörleri.

USB Aygıtı CDC ACM Sınıfı Kaynak İhtiyaçları Çekirdekten

sl_usbd_cdc_acm_add_to_configuration() fonksiyonuna yapılan bir çağrı yoluyla bir CDC ACM sınıf örneği her eklediğinizde, çekirdekten aşağıdaki kaynaklar tahsis edilecektir.

Kaynak
Arayüzler Alternatif arayüzler Uç noktalar Arayüz grupları

Miktar
2 2 3 1

Bu sayıların yapılandırma başına olduğunu unutmayın. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY ve SL_USBD_DESCRIPTOR_QUANTITY yapılandırma değerlerinizi ayarlarken, sınıfın kaç yapılandırma ekleneceğini hesaba katmayı unutmayın. SL_USBD_OPEN_ENDPOINTS_QUANTITY yapılandırma değeri için, uç noktalar yalnızca ana bilgisayar tarafından bir yapılandırma ayarlandığında açıldığından, bir sınıf örneği için gereken uç nokta sayısını hesaba katmanız yeterlidir.
USB Aygıtı CDC ACM Alt Sınıfı Üzeriview

CDC temel sınıfı, USB Aygıt CDC Temel Sınıfı Hakkında ayrıntılı olarak açıklanan İletişim Sınıfı Arayüzü (CCI) ve Veri Sınıfı Arayüzünden (DCI) oluşur.view Bu bölümde, ACM türünde bir CCI ele alınmaktadır. Bu CCI, yönetim öğesi için varsayılan bir uç nokta ve bildirim öğesi için bir kesme uç noktasından oluşur. Belirtilmemiş verileri DCI üzerinden taşımak için bir çift toplu uç nokta kullanılır.
ACM alt sınıfı iki tür iletişim cihazı tarafından kullanılır:
AT komutlarını destekleyen cihazlar (örneğin, ses bandı modemler). Sanal COM port cihazları olarak da adlandırılan seri emülasyon cihazları.
ACM alt sınıfı için alt sınıfa özgü birkaç istek bulunmaktadır. Bunlar, cihazı kontrol etmenize ve yapılandırmanıza olanak tanır. Tüm ACM isteklerinin tam listesi ve açıklaması teknik özelliklerde bulunabilir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

21/174

Üzerindeview PSTN Aygıtları için Alt Sınıf, revizyon 1.2, 9 Şubat 2007=, bölüm 6.2.2.
Bu listeden, Silicon Labs9 ACM alt sınıfı aşağıdakileri destekler:
Tablo – Silicon Labs Tarafından Desteklenen ACM İstekleri

Alt Sınıf İsteği Açıklaması

SetCommFeature GetCommFeature ClearCommFeature

Ana bilgisayar, belirli bir iletişim özelliğinin ayarlarını kontrol etmek için bu isteği gönderir. Seri emülasyon için kullanılmaz.
Ana bilgisayar, belirli bir iletişim özelliği için geçerli ayarları almak amacıyla bu isteği gönderir. Seri emülasyon için kullanılmaz.
Ana bilgisayar, belirli bir iletişim özelliğinin ayarlarını temizlemek için bu isteği gönderir. Seri emülasyon için kullanılmaz.

SetLineCoding

Ana bilgisayar, ACM cihaz ayarlarını yapılandırmak için bu isteği gönderir: baud hızı, durdurma biti sayısı, eşlik türü ve veri biti sayısı. Seri emülasyon için, açık bir sanal COM bağlantı noktası için seri ayarlarını her yapılandırdığınızda bu istek bir seri terminal tarafından otomatik olarak gönderilir.

GetLineCoding

Ana bilgisayar, mevcut ACM ayarlarını (baud hızı, durdurma bitleri, eşlik, veri bitleri) almak için bu isteği gönderir. Seri emülasyon için, seri terminaller sanal COM bağlantı noktası açılışı sırasında bu isteği otomatik olarak gönderir.

SetControlLineState Ana bilgisayar, yarı çift yönlü modemler için taşıyıcıyı kontrol etmek ve Veri Terminali Ekipmanı'nın (DTE) hazır olup olmadığını belirtmek için bu isteği gönderir. Seri emülasyon durumunda, DTE bir seri terminaldir. Seri emülasyon için, belirli seri terminaller bu isteği kontroller ayarlıyken göndermenize olanak tanır.

SetBreak

Ana bilgisayar, RS-232 tarzı bir kesinti oluşturmak için bu isteği gönderir. Seri emülasyon için, belirli seri terminaller bu isteği göndermenize olanak tanır.

Silicon Labs9 ACM alt sınıfı, ana bilgisayara geçerli seri hat durumu hakkında bildirimde bulunmak için kesme GİRİŞ uç noktasını kullanır. Seri
satır durumu, ana bilgisayara şu konularda bilgi veren bir bit eşlemdir:

Taşma nedeniyle atılan veriler Eşlik hatası Çerçeveleme hatası Halka sinyalinin tespiti durumu Kopma tespit mekanizmasının durumu İletim taşıyıcısının durumu Alıcı taşıyıcısının tespiti durumu

Silicon Labs9 ACM alt sınıf uygulaması aşağıdaki spesifikasyona uygundur:
Evrensel Seri Veri Yolu, İletişim, PSTN Aygıtları için Alt Sınıf, revizyon 1.2, 9 Şubat 2007.
USB Aygıtı CDC ACM Sınıf Yapılandırması

Bu bölümde, CDC ACM Sınıfının (İletişim Cihazı Sınıfı, Soyut Kontrol Modeli) nasıl yapılandırılacağı açıklanmaktadır. İki yapılandırma parametresi grubu vardır:
USB Aygıt CDC ACM Sınıfı Uygulamaya Özel Yapılandırmalar USB Aygıt CDC ACM Sınıfı Örnek Yapılandırmaları
USB Aygıtı CDC ACM Sınıfı Uygulamaya Özel Yapılandırmalar

CDC Temel Sınıfı ACM Alt Sınıfı
CDC Temel Sınıfı

Öncelikle, Silicon Labs USB aygıtı CDC sınıf modülünü kullanmak için, CDC derleme zamanı yapılandırmasını #define-s'yi uygulama ihtiyaçlarınıza göre ayarlamanız gerekir. Bunlar sl_usbd_core_config.h başlığında yeniden gruplandırılmıştır. file CDC bölümü altında. Amaçları, USB cihaz modülüne kaç adet USB CDC nesnesi tahsis edileceğini bildirmektir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

22/174

Üzerindeview

Aşağıdaki tablo, bu yapılandırma yapısında bulunan her yapılandırma alanını açıklamaktadır.
Tablo – USB Aygıt CDC Yapılandırması Tanımları

Yapılandırma Adı
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY

Tanım
Fonksiyona yapılan bir çağrı yoluyla tahsis edeceğiniz sınıf örneklerinin sayısı
sl_usbd_cdc_acm_create_instance() .
Yapılandırma sayısı. ACM sınıf örnekleri, sl_usbd_cdc_acm_add_to_configuration() fonksiyonuna bir veya daha fazla aaaa yapılandırmasına eklenebilir.
Tüm CDC işlevleri için toplam veri arayüzü (DCI) sayısı. Her CDC ACM işlevi, sl_usbd_cdc_acm_create_instance() işlevine eklendiğinde, dt arayüzü eklenecektir.

Varsayılan Değer
2
1
2

ACM Alt Sınıfı
ACM alt sınıfının aşağıdaki tabloda gösterilen bir derleme zamanı yapılandırması vardır.
Tablo – USB Aygıtı CDC ACM Yapılandırması Tanımı

Yapılandırma Adı
SL_USBD_CDC_ACM_SUBCL ASS_I ÖRNEK_MİKTARI

Tanım
Çağrı yoluyla tahsis edeceğiniz alt sınıf örneklerinin sayısını yapılandırır
sl_usbd_cdc_acm_create_instance() işlevi.

Varsayılan Değer
2

USB Aygıt CDC ACM Sınıf Örneği Yapılandırmaları

Bu bölüm, CDC ACM seri sınıf örnekleriyle ilgili yapılandırmaları tanımlar. Sınıf Örneği Oluşturma satırı durum aralığı çağrı yönetimi yetenekleri p_acm_callbacks
Sınıf Örneği Oluşturma

Bir CDC ACM seri sınıf örneği oluşturmak için T a sl_usbd_cdc_acm_create_instance() fonksiyonunu çağırın. Bu fonksiyon burada açıklandığı gibi üç yapılandırma argümanı kullanır.

satır_durum_aralığı
Bu, CDC ACM seri sınıf örneğinizin Taa ana bilgisayarına hat durumu bildirimlerini bildireceği aralıktır (milisaniye cinsinden). Bu değer iki üssü olmalıdır (1, 2, 4, 8, 16, vb.).

çağrı_yönetim_yetenekleri
Çağrı Yönetim Yetenekleri bitmap'i. Bitmap'in olası değerleri aşağıdaki gibidir:

Değer (bit)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI

Tanım
Cihaz çağrı yönetimini kendisi gerçekleştirir. Cihaz, Veri Sınıfı arayüzü üzerinden çağrı yönetimi bilgilerini gönderip alabilir.

p_acm_geri_çağrıları

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

23/174

Üzerindeview

aa M aa p_acm_callbacks, sl_usbd_cdc_acm_callbacks_t türündeki bir yapıya işaretçidir. Amacı, bir CDC ACM olayı meydana geldiğinde çağrılacak CDC AC Cl ss geri çağırma işlevleri kümesini sağlamaktır. Tüm geri çağırmalar zorunlu değildir ve geri çağırmaya ihtiyaç duyulmadığında geri çağırma yapısı değişkenine bir boş işaretçi (NULL) geçirilebilir. Aşağıdaki tablo, bu yapılandırma yapısında bulunan her yapılandırma alanını açıklamaktadır.
Tablo – sl_usbd_cdc_acm _callbacks_t Yapılandırma Yapısı

Alanlar

Tanım

.olanak vermek

USB sınıf örneği etkinleştirildiğinde çağrılır

Başarılı bir şekilde.

.devre dışı bırakmak

USB sınıf örneği devre dışı bırakıldığında çağrılır.

.line_control_changed Bir satır denetim değişikliği alındığında çağrılır.

line_coding_changed Bir satır kodlama değişikliği alındığında çağrılır.

Fonksiyon İmzası
void app_usbd_cdc_acm_enable(uint8_t alt sınıf_nbr);
void app_usbd_cdc_acm_disable(uint8_t alt sınıf_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t alt sınıf_nbr, uint8_t olayı, uint8_t olay_değiştirme); bool app_usbd_cdc_acm_line_coding_changed(uint8_t alt sınıf_nbr, alt sınıf_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_kodlama

Geri arama işlevleri için Olay Bildirimi Geri Aramalarını Kaydetme bölümüne bakın.ampley.
USB Aygıtı CDC ACM Sınıfı Programlama Kılavuzu

Bu bölümde, CDC Soyut Kontrol Modeli sınıfının nasıl kullanılacağı açıklanmaktadır. USB Aygıtı CDC ACM Sınıfını Başlatma Aygıtınıza Bir USB Aygıtı CDC ACM Sınıf Örneği Ekleme CDC ACM Sınıfını Kullanarak İletişim Kurma
USB Aygıtı CDC ACM Sınıfının Başlatılması

Cihazınıza CDC ACM sınıfı işlevselliğini eklemek için, öncelikle sl_usbd_cdc_init() ve sl_usbd_cdc_acm_init() işlevlerini çalıştırarak CDC temel sınıfını ve ACM alt sınıfını başlatmanız gerekir. Aşağıdaki örnek, varsayılan argümanları kullanarak sl_usbd_cdc_init() ve sl_usbd_cdc_acm_init() işlevlerinin nasıl çalıştırılacağını gösterir.

Example – CDC ACM Sınıfının Başlatılması

sl_status_t durumu;
durum = sl_usbd_cdc_init(); eğer (durum ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
durum = sl_usbd_cdc_acm_init(); eğer (durum ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
Aygıtınıza bir USB Aygıtı CDC ACM Sınıf Örneği Ekleme
Aygıtınıza CDC ACM sınıfı işlevselliğini eklemek için bir örnek oluşturmalı ve ardından bunu aygıtınızın yapılandırmasına/yapılandırmalarına eklemelisiniz.
CDC ACM Sınıf Örneği Oluşturma

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

24/174

Üzerindeview
CDC ACM Sınıf Örneğini Aygıtınızın Yapılandırmasına Ekleme Olay Bildirimi Geri Aramalarını Kaydetme
CDC ACM Sınıf Örneği Oluşturma
aa M aaa sl_usbd_cdc_acm_create_instance() fonksiyonunu çağırarak CDC AC cl ss örneği oluşturun. T aaa M aaa Aşağıdaki örnek, sl_usbd_cdc_acm_create_instance() fonksiyonuyla CDC AC cl ss örneğinin nasıl oluşturulacağını gösterir.
Example – sl_usbd_cdc_acm_create_instance() aracılığıyla bir CDC ACM İşlevi Oluşturma

uint8_t alt sınıf_nbr; sl_status_t durum;
durum = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, NULL, &altsınıf_numarası);
if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
CDC ACM Sınıf Örneğini Aygıtınızın Yapılandırmasına Ekleme
Bir CDC ACM sınıf örneği oluşturduktan sonra, işlevi çağırarak bunu bir yapılandırmaya ekleyebilirsiniz
sl_usbd_cdc_acm_configuration'a_ekle() .
Aşağıdaki örnek sl_usbd_cdc_acm_add_to_configuration() fonksiyonunun nasıl çalıştırılacağını göstermektedir.
Example – USBD ACM'ye çağrı sl_usbd_cdc_acm_add_to_configuration()

sl_status_t durumu;

durum = sl_usbd_cdc_acm_add_to_configuration(alt_sınıf_nbr,

(1)

yapılandırma_nbr_fs);

(2)

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

aaa (1) sl_usbd_cdc_acm_create_instance() tarafından döndürülen yapılandırmaya eklenecek CL ss numarası. (2) Yapılandırma numarası (burada Tam Hızlı bir yapılandırmaya ekleniyor).
Olay Bildirimi Geri Aramalarını Kaydetme
CDC ACM Serial sınıfı, bildirim geri çağırma işlevleri aracılığıyla satır denetimindeki veya kodlamadaki herhangi bir değişikliği uygulamanıza bildirebilir. Geri çağırma işlevleri yapısı, ACM örneği oluşturulurken bağımsız değişken olarak aktarılabilir. Bu geri çağırmaların isteğe bağlı olduğunu unutmayın. Örn.ample – CDC ACM Geri Arama Kaydı, geri arama kayıt işlevlerinin kullanımını gösterir. Örn.ample – CDC ACM Geri Arama Uygulaması bir örnek gösteriyorampGeri arama fonksiyonlarının uygulanma biçimi.
Example – CDC ACM Geri Arama Kaydı

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

25/174

Üzerindeview

uint8_t alt sınıf_nbr; sl_status_t durum;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
durum = 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, &altsınıf_nbr);
if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }
Example – CDC ACM Geri Arama Uygulaması

bool app_usbd_cdc_acm_line_coding_changed (uint8_t

alt sınıf_nbr,

sl_usbd_cdc_acm_line_coding_t *p_line_coding)

{

uint32_t baud hızı_yeni;

uint8_t parity_new;

uint8_t stop_bits_new;

uint8_t veri_bitleri_yeni;

/* TODO Yeni satır kodlamasını uygula.*/ 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;

dönüş (true);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t alt sınıf_nbr, uint8_t olayı, uint8_t olay_değiştirildi)
{ bool rts_durumu; bool rts_durumu_değişti; bool dtr_durumu; bool dtr_durumu_değişti; bool brk_durumu; bool brk_durumu_değişti;

/* TODO Yeni satır denetimini uygula. */ 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_durum_değişti = ((olay_değişti & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}

(1) Satır kodlaması uygulanamazsa bu fonksiyona false döndürmek önemlidir. Aksi takdirde true döndürün.
CDC ACM Sınıfını Kullanarak İletişim Kurma
Seri Durumu
Hat Kodlama Hat Kontrolü

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

26/174

Üzerindeview

Satır Durumu Alt Sınıf Örneği İletişimi
Seri Durumu
Satır Kodlaması
USB ana bilgisayarı, CDC ACM cihazının hat kodlamasını (baud hızı, parite vb.) kontrol eder. Gerektiğinde, hat kodlamasını ayarlamak uygulama sorumluluğundadır. Aşağıdaki tabloda açıklandığı gibi, mevcut hat kodlamasını almak ve ayarlamak için iki işlev mevcuttur.
Tablo – CDC ACM Hat Kodlama Fonksiyonları

İşlev
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()

Tanım
Uygulamanız, SetLineCoding istekleriyle veya sl_usbd_cdc_acm_set_line_coding() fonksiyonuyla ana bilgisayardan ayarlanan mevcut satır kodlama ayarlarını alabilir.
Uygulamanız satır kodlamasını ayarlayabilir. Sunucu, GetLineCoding isteğiyle ayarları alabilir.

Hat Kontrolü
USB ana bilgisayarı, CDC ACM cihazının hat kontrolünü (RTS ve DTR pinleri, kesme sinyali vb.) kontrol eder. Gerektiğinde, hat kontrollerini uygulamaktan uygulamanız sorumludur. Aşağıdaki tabloda açıklandığı gibi, mevcut hat kontrollerini almak ve ayarlamak için bir işlev sağlanmıştır.
Tablo – CDC ACM Hat Kontrol Fonksiyonları

İşlev
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()

Uygulamanız SetControlLineState isteği ile ana bilgisayar tarafından ayarlanan geçerli kontrol satırı durumunu alabilir.

Hat Durumu
USB ana bilgisayarı, hat durumunu düzenli aralıklarla alır. Uygulamanız, hat durumu her değiştiğinde güncellemelidir. Gerektiğinde, hat durumunu ayarlamak uygulamanızın sorumluluğundadır. Aşağıdaki tabloda açıklandığı gibi, mevcut hat kontrollerini almak ve ayarlamak için iki işlev sağlanmıştır.
Tablo – CDC ACM Hat Durumu Fonksiyonları

İşlev
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()

Uygulamanız herhangi bir hat durumu olayını ayarlayabilir. Hat durumu ayarlanırken, ana bilgisayara seri hat durumundaki bir değişiklik hakkında bilgi vermek için bir IN (İÇERİ) kesintisi gönderilir.
Uygulama, hat durumunun iki olayını temizleyebilir: iletim taşıyıcısı ve alıcı taşıyıcısı algılama. Diğer tüm olaylar, ACM seri emülasyon alt sınıfı tarafından kendi kendine temizlenir.

Alt Sınıf Örneği İletişimi

Silicon Labs'ın ACM alt sınıfı, ana bilgisayarla iletişim kurmak için aşağıdaki işlevleri sunar. functions9 parametreleri hakkında daha fazla bilgi için CDC ACM Alt Sınıf İşlevleri referansına bakın.

Fonksiyon adı
sl_usb d _cd c_acm_ re ad () sl_usb d _cd c_acm_write ()

Operasyon
Toplu ÇIKIŞ uç noktası aracılığıyla ana bilgisayardan veri alır. Bu işlev engelleyicidir. Toplu GİRİŞ uç noktası aracılığıyla ana bilgisayara veri gönderir. Bu işlev engelleyicidir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

27/174

Üzerindeview

Tablo – CDC ACM İletişim API Özeti aaaaa sl_usbd_cdc_acm_read() ve sl_usbd_cdc_acm_write() eş zamanlı iletişim sağlar; bu da aktarımın engellendiği anlamına gelir. Başka bir deyişle, işlevi çağırdıktan sonra uygulama, aktarım bir hatayla veya hata olmadan tamamlanana kadar engeller. Sonsuza kadar beklemekten kaçınmak için bir zaman aşımı belirtilebilir. Örnek:ampAşağıdaki örnekte okuma ve yazma örneği gösterilmektedirampToplu ÇIKIŞ uç noktasını kullanarak ana bilgisayardan veri alan ve toplu GİRİŞ uç noktasını kullanarak ana bilgisayara veri gönderen dosya.
Listeleme – Seri Okuma ve Yazma Örn.ample

__HİZALAMIŞ(4) uint8_t rx_buf[2];

__HİZALAMIŞ(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_durumu_t

durum;

durum = sl_usbd_cdc_acm_read(alt sınıf_nbr,

(1)

rx_buf,

(2)

2sen,

0sen,

(3)

&xfer_len);

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

durum = sl_usbd_cdc_acm_write(alt_sınıf_nbr,

(1)

tx_buf,

(4)

2sen,

0sen,

(3)

&xfer_len);

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

T aaaaa M (1) sl_usbd_cdc_acm_create_instance() ile oluşturulan sınıf örneği numarası, aktarımı uygun toplu ÇIKIŞ veya GİRİŞ uç noktasına yönlendirmek için AC alt sınıfına dahili bir l referansı sağlar. (2) Uygulamanız, işleve sağlanan arabelleğin tüm verileri barındıracak kadar büyük olduğundan emin olmalıdır. Aksi takdirde, senkronizasyon sorunları oluşabilir. (3) Sonsuz bir engelleme durumundan kaçınmak için, milisaniyelerle ifade edilen bir zaman aşımı belirtin. 809 değeri, uygulama görevinin sonsuza kadar beklemesini sağlar. (4) Uygulama, başlatılan aktarım arabelleğini sağlar.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

28/174

Üzerindeview
Üzerindeview

USB Aygıt HID Sınıfı

USB Aygıtı HID ​​Sınıfı Üzerindeview USB Aygıt HID Sınıfı Kaynak İhtiyaçları Çekirdek USB Aygıt HID Sınıfı Yapılandırması USB Aygıt HID Sınıfı Programlama Kılavuzu HID Periyodik Giriş Raporları Görevi
Bu bölümde Silicon Labs USB Aygıtı tarafından desteklenen İnsan Arabirim Aygıtı (HID) sınıfı açıklanmaktadır.
HID sınıfı, klavyeler, fareler, işaretleme aygıtları ve oyun aygıtları gibi insanların bilgisayar işlemlerini kontrol etmek için kullandığı aygıtları kapsar.
HID sınıfı, düğmeler, anahtarlar, butonlar ve kaydırıcılar gibi kontrolleri içeren bir bileşik aygıtta da kullanılabilir. Örneğin;ampBir ses kulaklığındaki ses, sessize alma ve ses seviyesi kontrolleri, kulaklığın HID fonksiyonu tarafından kontrol edilir. HID sınıfı, yalnızca kontrol ve kesme transferlerini kullanarak herhangi bir amaç için veri alışverişi yapabilir.
HID sınıfı, en eski ve en yaygın kullanılan USB sınıflarından biridir. Tüm büyük ana bilgisayar işletim sistemleri, HID cihazlarını yönetmek için yerel bir sürücü sağlar; bu nedenle çeşitli satıcıya özgü cihazlar HID sınıfıyla çalışır. Bu sınıf ayrıca LED'ler, ses, dokunsal geri bildirim vb. gibi çeşitli çıkış öğelerini de içerir.
HID uygulaması aşağıdaki özelliklere uygundur:
İnsan Arabirim Aygıtları (HID) için Aygıt Sınıfı Tanımı, 27.06.2001, Sürüm 1.11. Evrensel Seri Veri Yolu HID Kullanım Tabloları, 28.10.2004, Sürüm 1.12.
USB Aygıtı HID ​​Sınıfı Üzerindeview
Üzerindeview
Bir HID aygıtı aşağıdaki uç noktalardan oluşur:
Varsayılan uç nokta olarak adlandırılan bir çift kontrol GİRİŞ ve ÇIKIŞ uç noktası Bir kesme GİRİŞ uç noktası Bir isteğe bağlı kesme ÇIKIŞ uç noktası
Aşağıdaki tabloda farklı uç noktaların kullanımı açıklanmaktadır:
Tablo – HID Sınıf Uç Noktalarının Kullanımı

Son Nokta Yön Kullanımı

Kontrol GİRİŞİ
Kontrol
DIŞARI
Kesinti Girişi
Yarıda kesmek
DIŞARI

Cihazdan ana bilgisayara
Ana bilgisayardan cihaza
Cihazdan ana bilgisayara
Ana bilgisayardan cihaza

Numaralandırma, sınıfa özgü istekler ve veri iletişimi için standart istekler (Giriş, GET_REPORT isteğiyle ana bilgisayara gönderilen Özellik raporları). Numaralandırma, sınıfa özgü istekler ve veri iletişimi için standart istekler (Çıkış, SET_REPORT isteğiyle ana bilgisayardan alınan Özellik raporları). Veri iletişimi (Giriş ve Özellik raporları).
Veri iletişimi (Çıktı ve Özellik raporları).

Rapor

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

29/174

Üzerindeview

Bir ana bilgisayar ve bir HID cihazı, raporlar kullanarak veri alışverişinde bulunur. Bir rapor, HID cihazının kontrolleri ve diğer fiziksel varlıkları hakkında bilgi veren biçimlendirilmiş veriler içerir. Bir kontrol, kullanıcı tarafından değiştirilebilir ve cihazın bir yönünü çalıştırır. Örneğin:ampÖrneğin, bir kontrol fare veya klavyedeki bir düğme, bir anahtar vb. olabilir. Diğer varlıklar, kullanıcıyı cihazın belirli özelliklerinin durumu hakkında bilgilendirir. Örneğin,ampÖrneğin, klavyedeki LED'ler kullanıcıya Caps Lock tuşunun açık olduğunu, sayısal tuş takımının aktif olduğunu vb. bildirir.
Bir rapor verisinin biçimi ve kullanımı, sunucu tarafından bir Rapor tanımlayıcısının içeriğinin analiz edilmesiyle anlaşılır. İçeriğin analizi bir ayrıştırıcı tarafından yapılır. Rapor tanımlayıcısı, bir cihazdaki her denetim tarafından sağlanan verileri tanımlar. Cihaz hakkında bilgi parçaları olan ve 1 baytlık bir önek ve değişken uzunluktaki öğelerden oluşur.
Veri. Öğe biçimi hakkında daha fazla bilgi için bkz.
1.11=, bölüm 5.6 ve 6.2.2.
Üç temel öğe türü vardır:
Ana öğe belirli türdeki veri alanlarını tanımlar veya gruplandırır.
Küresel öğe, bir kontrolün veri özelliklerini tanımlar.
Yerel öğe, bir denetimin veri özelliklerini tanımlar.
Her öğe türü farklı işlevlerle tanımlanır. Bir öğe işlevi aynı zamanda bir tagBir öğe işlevi, üç ana öğe türünden birine ait bir alt öğe olarak görülebilir. Aşağıdaki tablo, bu işlevin kısa bir özetini sunmaktadır.view Her öğe türündeki item9s işlevlerinin tam açıklaması için bkz.
Tablo – Her Öğe Türü için Öğenin İşlev Açıklaması

Öğe Öğe Türü İşlevi

Tanım

Ana Giriş

Bir veya daha fazla fiziksel kontrol tarafından sağlanan verilerle ilgili bilgileri açıklar.

Ana Çıktı Cihaza gönderilen verileri tanımlar.

Ana Özellik

Cihazın veya bileşenlerinden birinin genel davranışını etkileyen, cihaza gönderilen veya cihazdan alınan cihaz yapılandırma bilgilerini açıklar.

Ana Koleksiyon Grubu ile ilgili öğeler (Giriş, Çıkış veya Özellik).

Koleksiyonun Sonu. Koleksiyonu kapatır.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

30/174

Üzerindeview

Öğe Öğe Türü İşlevi

Tanım

Küresel Kullanım Sayfası

Cihazda mevcut bir işlevi tanımlar.

Küresel Mantıksal Bildirilen değerlerin mantıksal birimlerdeki alt sınırını tanımlar. Minimum

Küresel Mantıksal Bildirilen değerlerin mantıksal birimlerdeki üst sınırını tanımlar. Maksimum

Küresel Fiziksel Bildirilen değerlerin fiziksel birimlerdeki alt sınırını, yani fiziksel birimlerle ifade edilen Mantıksal Minimum Minimum'u tanımlar.

Küresel Fiziksel Bildirilen değerlerin fiziksel birimlerdeki üst sınırını, yani fiziksel birimlerle ifade edilen Mantıksal Maksimum Maksimum'u tanımlar.

Küresel Birim

10 tabanındaki birim üssünü belirtir. Üs -8 ile +7 arasında değişir.

Üs

Küresel Birim

Bildirilen değerlerin birimini belirtir. Örneğin; uzunluk, kütle, sıcaklık birimleri vb.

Küresel Rapor Boyutu

Rapor alanlarının boyutunu bit cinsinden belirtir.

Küresel Rapor Kimliği Belirli bir rapora eklenen öneki belirtir.

Küresel Rapor Sayısı

Bir öğeye ait veri alanlarının sayısını belirtir.

Küresel İtme

Küresel öğe durum tablosunun bir kopyasını CPU yığınına yerleştirir.

Küresel Pop

Öğe durum tablosunu yığındaki son yapı ile değiştirir.

Yerel Kullanım

Bir Kullanım Sayfası içinde belirli bir Kullanımı belirtmek için bir indeksi temsil eder. Satıcının belirli bir denetim veya denetim grubu için önerdiği kullanımı belirtir. Bir kullanım, bir uygulama geliştiricisine bir denetimin gerçekte neyi ölçtüğü hakkında bilgi sağlar.

Yerel Kullanım

Bir dizi veya bitmap ile ilişkili başlangıç ​​kullanımını tanımlar.

Asgari

Yerel Kullanım

Bir dizi veya bitmap ile ilişkili bitiş kullanımını tanımlar.

Maksimum

Yerel Belirleyici Bir kontrol için kullanılan vücut parçasını belirler. Dizin, Fiziksel'deki bir belirleyiciye işaret eder.

Dizin

tanımlayıcı.

Yerel Belirleyici Bir dizi veya bit eşlemiyle ilişkili başlangıç ​​belirleyicisinin dizinini tanımlar. Minimum

Yerel Belirleyici Bir dizi veya bit eşlemiyle ilişkili bitiş belirleyicisinin dizinini tanımlar. Maksimum

Yerel Dize Dizini

Dize tanımlayıcısı için dize dizini. Bir dizenin belirli bir öğe veya denetimle ilişkilendirilmesini sağlar.

Yerel Dize

Bir dizideki denetimlere ardışık dizeler grubu atarken ilk dize dizinini belirtir

Minimum veya bitmap.

Yerel Yerel

Dize Maksimum
Ayırıcı

Bir dizi veya bitmap'teki denetimlere ardışık dizeler grubu atarken son dize dizinini belirtir.
Yerel öğelerin kümesinin başlangıcını veya sonunu tanımlar.

Bir kontrolün verileri en azından aşağıdaki öğeleri tanımlamalıdır:
Giriş, Çıkış veya Özellik Ana öğeler Kullanım Yerel öğe Kullanım Sayfası Genel öğe Mantıksal Minimum Genel öğe Mantıksal Maksimum Genel öğe Rapor Boyutu Genel öğe

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

31/174

Üzerindeview
Rapor Sayısı Genel Öğe Aşağıdaki tablo, bir Fare Raporu tanımlayıcı içeriğinin ana bilgisayar HID ayrıştırıcısı perspektifinden gösterimini göstermektedir. Farenin üç düğmesi vardır (sol, sağ ve tekerlek). Örnekte sunulan kod:ampAşağıda bu fare Rapor tanımlayıcı gösterimine karşılık gelen bir kod uygulaması bulunmaktadır.
Şekil – Bir Ana Bilgisayar HID Ayrıştırıcısından Rapor Tanımlayıcı İçeriği View

(1) Kullanım Sayfası öğesi işlevi, cihazın genel işlevini belirtir. Bu örnekte,ampHID aygıtı bir cihaza aittir
genel masaüstü kontrolü.
(2) Koleksiyon Uygulaması, ortak bir amacı olan ve uygulamalara tanıdık gelebilecek Ana öğeleri gruplandırır. Diyagramda, grup üç Giriş Ana öğesinden oluşur. Bu koleksiyon için, kontroller için önerilen kullanım, Kullanım öğesinde belirtildiği gibi faredir. (3) İç içe geçmiş koleksiyonlar, uygulamalara tek bir kontrolün veya kontrol grubunun kullanımı hakkında daha fazla ayrıntı vermek için kullanılabilir. Bu örnekte,ampÖrneğin, Koleksiyon Uygulaması'na yerleştirilmiş olan Koleksiyon Fiziksel, Koleksiyon Uygulamasını oluşturan aynı üç Giriş öğesinden oluşur. Koleksiyon Fiziksel, tek bir geometrik noktada toplanan veri noktalarını temsil eden bir veri öğeleri kümesi için kullanılır. ÖrnekteampÖrneğin, önerilen kullanım Kullanım öğesinde belirtildiği gibi bir işaretçidir. Burada işaretçi kullanımı fare konum koordinatlarını ifade eder ve sistem yazılımı fare koordinatlarını ekran imlecinin hareketine göre çevirir. (4) İç içe kullanım sayfaları da mümkündür ve cihazın genel işlevi içinde belirli bir husus hakkında daha fazla ayrıntı verir. Bu durumda, iki Giriş öğesi gruplanır ve farenin düğmelerine karşılık gelir. Bir Giriş öğesi, öğe için veri alanı sayısı (Rapor Sayısı öğesi), bir veri alanının boyutu (Rapor Boyutu öğesi) ve her veri alanı için olası değerler (Kullanım Minimum ve Maksimum, Mantıksal Minimum ve Maksimum öğeleri) açısından farenin üç düğmesini (sağ, sol ve tekerlek) tanımlar. Diğer Giriş öğesi, Giriş rapor verilerinin bir bayt sınırında hizalanmasına izin veren 13 bitlik bir sabittir. Bu Giriş öğesi yalnızca dolgu amacıyla kullanılır. (5) Genel bir masaüstü denetimine atıfta bulunan başka bir iç içe kullanım sayfası, fare konum koordinatları için tanımlanmıştır. Bu kullanım sayfası için Giriş öğesi, iki Kullanım tarafından belirtildiği gibi x ve y eksenine karşılık gelen veri alanlarını açıklar.
öğeler.
Önceki fare Rapor tanımlayıcısı içeriğini analiz ettikten sonra, ana bilgisayarın HID ayrıştırıcısı, cihaz tarafından bir kesinti IN aktarımıyla veya bir GET_REPORT isteğine yanıt olarak gönderilen Giriş rapor verilerini yorumlayabilir. Şekilde gösterilen fare Rapor tanımlayıcısına karşılık gelen Giriş rapor verileri – Bir Ana Bilgisayar HID Ayrıştırıcısından Gelen Rapor Tanımlayıcısı İçeriği View is

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

32/174

Üzerindeview

Aşağıdaki tabloda gösterilmiştir. Rapor verilerinin toplam boyutu 4 bayttır. Aynı uç nokta üzerinden farklı rapor türleri gönderilebilir. Farklı rapor türlerini ayırt etmek amacıyla, veri raporuna 1 baytlık bir rapor kimliği öneki eklenir. Örnekte bir rapor kimliği kullanılmışsa,ampFare raporunun toplam boyutu 5 bayt olacaktır.
Tablo – Ana Bilgisayara Gönderilen ve 3 Düğmeli Farenin Durumuna Karşılık Gelen Giriş Raporu

Bit Ofseti
0 1 2 3 16 24

Bit Sayısı 1 1 1 13 8 8

Açıklama Düğme 1 (sol düğme). Düğme 2 (sağ düğme). Düğme 3 (tekerlek düğmesi). Kullanılmıyor. X eksenindeki konum. Y eksenindeki konum.

Fiziksel tanımlayıcı, bir veya birden fazla kontrolü etkinleştirmek üzere tasarlanan vücut parçasını veya parçalarını belirtir. Bir uygulama, bir cihazın kontrolüne bir işlevsellik atamak için bu bilgiyi kullanabilir. Fiziksel tanımlayıcı, isteğe bağlı, sınıfa özgü bir tanımlayıcıdır ve çoğu cihaz için kullanımı çok az kazanç sağlar. Bkz.
USB Aygıtı HID ​​Sınıfı Kaynak İhtiyaçları Çekirdekten

sl_usbd_hid_add_to_configuration() fonksiyonuna yapılan bir çağrı yoluyla bir HID sınıf örneği bir USB yapılandırmasına her eklediğinizde, çekirdekten aşağıdaki kaynaklar tahsis edilecektir.

Kaynak
Arayüzler Alternatif arayüzler Uç noktalar Arayüz grupları

Miktar
1 1 1 (kesme ÇIKIŞ uç noktası etkinleştirilmişse 2) 0

Bu sayıların yapılandırma başına olduğunu unutmayın. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY ve SL_USBD_DESCRIPTOR_QUANTITY yapılandırma değerlerinizi ayarlarken, sınıfın kaç yapılandırma ekleneceğini hesaba katmayı unutmayın. SL_USBD_OPEN_ENDPOINTS_QUANTITY yapılandırma değeri için, uç noktalar yalnızca ana bilgisayar tarafından bir yapılandırma ayarlandığında açıldığından, bir sınıf örneği için gereken uç nokta sayısını hesaba katmanız yeterlidir.
USB Aygıt HID Sınıf Yapılandırması

HID sınıfını yapılandırmak için iki grup yapılandırma parametresi kullanılır:
USB Aygıt HID Sınıfı Uygulamaya Özel Yapılandırmalar USB Aygıt HID Sınıfı Örnek Yapılandırmaları
USB Aygıt HID Sınıfı Uygulamaya Özel Yapılandırmalar

Öncelikle, Silicon Labs USB aygıtı HID ​​sınıf modülünü kullanmak için, HID derleme zamanı yapılandırma tanımlarını uygulama ihtiyaçlarınıza göre ayarlayın. Bunlar sl_usbd_core_config.h başlığında yeniden gruplandırılmıştır. file HID bölümünün altında. Bunlar, miktar yapılandırmaları ve HID görev yapılandırmaları olmak üzere iki bölüme ayrılabilir. Miktar yapılandırmalarının amacı, USB aygıt modülüne kaç adet USB HID nesnesi tahsis edileceğini bildirmektir.
Aşağıdaki tablo her bir yapılandırma tanımını açıklamaktadır.
Tablo – USB Aygıt HID Yapılandırması Tanımları

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

33/174

Üzerindeview

Yapılandırma Adı
SL_USBD_HID_CL ASS_I ÖRNEK_MİKTARI
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_RAPOR_KİMLİK_MİKTARI
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ÖNCELİKLİLİĞİ SOR

Tanım
Fonksiyona yapılan bir çağrı yoluyla tahsis edeceğiniz sınıf örneklerinin sayısı
sl_usbd_hid_create_instance() .
Yapılandırma sayısı. HID sınıf örnekleri, sl_usbd_hid_add_to_configuration() işlevine bir veya daha fazla aaaa yapılandırmasına eklenebilir. Tahsis edilecek toplam rapor kimliği sayısını yapılandırır.
Tahsis edilecek toplam Push/Pop öğesi sayısını yapılandırır.
Zamanlayıcı görevi, zamanlayıcı tabanlı tüm HID işlemlerini yönetir. Bu yapılandırma, yığın boyutunu (bayt sayısı olarak) ayarlamanıza olanak tanır. HID görevinin önceliği. Bu, bir CMSIS-RTOS2 önceliğidir.

Varsayılan Değer
2 1 2 0 2048
osÖncelikYüksek

USB Aygıt HID Sınıf Örneği Yapılandırmaları Sınıf Örneği Oluşturma alt sınıfı
protokol ülke_kodu
interval_in ve interval_out p_hid_callback HID Sınıf Raporu Tanımlayıcısı Örn.ampBu bölüm HID sınıf örnekleriyle ilgili yapılandırmaları tanımlar.
Sınıf Örneği Oluşturma
Bir HID sınıf örneği oluşturmak, aşağıda açıklanan çeşitli yapılandırma argümanlarını kullanan aaa sl_usbd_hid_create_instance() fonksiyonunu çağırarak yapılır.
alt sınıf
HID alt sınıfının kodu. Olası değerler şunlardır:
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
Önyükleme alt sınıfını kullanan bir HID aygıtı, standart rapor biçimlerini kullanmalıdır. Alt sınıf kodları hakkında daha fazla bilgi için HID spesifikasyonu revizyon 1.11'in 4.2 bölümüne bakın.
protokol
HID cihazı tarafından kullanılan protokol. Olası değerler şunlardır:
SL_USBD_HID_PROTOKOL_YOK SL_USBD_HID_PROTOKOL_KBD SL_USBD_HID_PROTOKOL_FARE
HID işleviniz bir fare ise, protokol SL_USBD_HID_PROTOCOL_MOUSE olarak ayarlanmalıdır. Klavye ise, SL_USBD_HID_PROTOCOL_KBD olarak ayarlanmalıdır. Aksi takdirde, protokol SL_USBD_HID_PROTOCOL_NONE olarak ayarlanmalıdır. Alt sınıf kodları hakkında daha fazla bilgi için HID spesifikasyonu revizyon 1.11'in 4.3 bölümüne bakın.
ülke_kodu
Ülke kodunun kimliği. Olası değerler şunlardır:
SL_USBD_HID_ÜLKE_KODU_DESTEKLENMİYOR

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

34/174

Üzerindeview
SL_USBD_HID_COUNTRY_CODE_ARAPÇA SL_USBD_HID_COUNTRY_CODE_BELÇİKA SL_USBD_HID_COUNTRY_CODE_KANADA_İKİ DİLLİ SL_USBD_HID_COUNTRY_CODE_KANADA_FRANSIZ SL_USBD_HID_COUNTRY_CODE_ÇEK CUMHURİYETİ SL_USBD_HID_COUNTRY_CODE_DANİMARKA SL_USBD_HID_COUNTRY_CODE_FİNCE SL_USBD_HID_COUNTRY_CODE_FRANSIZ SL_USBD_HID_COUNTRY_CODE_ALMANCA SL_USBD_HID_COUNTRY_CODE_YUNANCA SL_USBD_HID_COUNTRY_CODE_İBREW SL_USBD_HID_COUNTRY_CODE_MACARİSTAN SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALYAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_L ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORVEÇ SL_USBD_HID_COUNTRY_CODE_FARSÇA SL_USBD_HID_COUNTRY_CODE_POLONYA VE SL_USBD_HID_COUNTRY_CODE_PORTEKİZ SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKYA SL_USBD_HID_COUNTRY_CODE_İSPANCA SL_USBD_HID_COUNTRY_CODE_İSVEÇ SL_USBD_HID_COUNTRY_CODE_İSVİÇRE_FRANSIZ SL_USBD_HID_COUNTRY_CODE_İSVİÇRE_ALMANCA SL_USBD_HID_COUNTRY_CODE_İSVİÇRE VE SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TÜRK_Q SL_USBD_HID_COUNTRY_CODE_BK SL_USBD_HID_COUNTRY_CODE_ABD SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TÜRK_F
Ülke kodu, donanımın hangi ülke için yerelleştirildiğini belirtir. Çoğu donanım yerelleştirilmemiştir, bu nedenle bu alan SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0) olacaktır. Ancak, klavyeler bu alanı tuş başlıklarının dilini belirtmek için kullanabilir.
Ülke kodları hakkında daha fazla bilgi için HID spesifikasyonu revizyon 1.11'in 6.2.1 bölümüne bakın.
aralık_giriş ve aralık_çıkış
interval_in ve interval_out, GİRİŞ kesme uç noktasının ve ÇIKIŞ kesme uç noktasının yoklama aralığını temsil eder.
Bu, uç noktanın sorgulama aralığını milisaniye cinsinden gösterir. Bu değerin ayarlanması, cihazınızın ana bilgisayar için ne sıklıkla yeni bir rapor oluşturma eğiliminde olduğuna bağlıdır. Örneğin, her 16 milisaniyede bir rapor oluşturuluyorsa, aralık 16 veya daha az olmalıdır.
Değer 2'nin bir kuvveti (1, 2, 4, 8, 16, vb.) olmalıdır.
ctrl_rd_en true olarak ayarlandığında interval_out değeri göz ardı edilir.
p_hid_geri_çağrı
aaaa p_hid_callback, sl_usbd_hid_callbacks_t türündeki yapıya bir işaretçidir. Amacı, bir HID olayı meydana geldiğinde çağrılacak HID Cl ss geri arama işlevleri kümesini vermektir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

35/174

Üzerindeview

Tüm geri aramalar zorunlu değildir ve geri aramaya ihtiyaç duyulmadığında geri arama yapısı değişkenine bir boş işaretçi (NULL) geçirilebilir. Aşağıdaki tablo, bu yapılandırma yapısında bulunan her yapılandırma alanını açıklamaktadır.
Tablo – sl_usbd_hid_callbacks_t Yapılandırma Yapısı

Alanlar

Tanım

Fonksiyon İmzası

.etkinleştir .devre dışı bırak .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report

USB sınıf örneği başarıyla etkinleştirildiğinde çağrılır. USB sınıf örneği devre dışı bırakıldığında çağrılır.
Rapor tanımlayıcınızı geçirmek için HID Örneği oluşturma sırasında çağrılır. HID işlevlerinizin her biri için bir rapor tanımlayıcısı sağlamanız gerekir. Rapor tanımlayıcısı, cihaz tarafından gönderilecek periyodik raporun nasıl ayrıştırılacağını ana bilgisayara belirtir. Kendi rapor tanımlayıcınızı yazmak zor olabilir ve bu nedenle yardımcı olacak bazı kaynaklar vardır. Bu, tek zorunlu geri arama işlevidir. Fiziksel tanımlayıcınızı geçirmek için HID Örneği oluşturma sırasında çağrılır. Fiziksel tanımlayıcı, bir veya daha fazla denetimi etkinleştiren insan vücudunun belirli bir parçası veya parçaları hakkında bilgi sağlayan bir tanımlayıcıdır. Fiziksel tanımlayıcılar hakkında daha fazla bilgi için HID spesifikasyonu revizyon 1.11'in 6.2.3 bölümüne bakın. Fiziksel tanımlayıcı isteğe bağlıdır ve çoğu zaman yok sayılır. Buraya geçirilen tampon NULL olarak ve uzunluk 0 olarak ayarlanabilir. Ana bilgisayar, rapor tanımlayıcınızda açıklandığı gibi bir rapor ayarladığında (bir rapor gönderdiğinde) çağrılır.
Rapor tanımlayıcınızda açıklandığı gibi, ana bilgisayar bir özellik raporu istediğinde çağrılır.
Sunucu, rapor tanımlayıcınızda açıklandığı gibi bir özellik raporu ayarladığında çağrılır.

void app_usbd_hid_enable(uint8_t sınıf_nbr); void app_usbd_hid_disable(uint8_t sınıf_nbr); void app_usbd_hid_get_report_desc(uint8_t sınıf_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t sınıf_nbr, sabit uint8_t *p_rapor_ptr, uint16_tp_rapor_len);
void app_usbd_hid_set_output_report(uint8_t sınıf_nbr, uint8_t rapor_kimliği, uint8_t *p_rapor_buf, uint16_t rapor_uzunluğu); void app_usbd_hid_get_feature_report(uint8_t sınıf_nbr, uint8_t rapor_kimliği, uint8_t *p_rapor_buf, uint16_t rapor_uzunluğu); void app_usbd_hid_set_feature_report(uint8_t sınıf_nbr, uint8_t rapor_kimliği, uint8_t *p_rapor_buf, uint16_t rapor_uzunluğu);

.get_protokolü

Mevcut etkin protokolü alır.

void app_usbd_hid_get_protocol(uint8_t sınıf_nbr, uint8_t *p_protocol);

.set_protokolü

Mevcut etkin protokolü ayarlar.

void app_usbd_hid_set_protocol(uint8_t sınıf_nbr, uint8_t protokolü);

HID Sınıf Raporu Tanımlayıcısı Örn.ample

Silicon Labs'ın HID sınıflarıampuygulama bir örnek sağlarampBasit bir fare için bir rapor tanımlayıcısının örneği.ampAşağıdaki şekilde bir fare rapor tanımlayıcısı gösterilmektedir.
Example – Fare Raporu Tanımlayıcısı

statik uint8_t app_usbd_hid_report_desc[] = {

(1) (2)

SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_MASAÜSTÜ_KONTROLLERİ,

SL_USBD_HID_YEREL_KULLANIM + 1, SL_USBD_HID_CA_FARE,

(3)

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

36/174

Üzerindeview

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_APPLICATION,(4)

SL_USBD_HID_LOCAL_USAGE +1, SL_USBD_HID_CP_POINTER,(5)

SL_USBD_HID_MAIN_COLLECTION +1, SL_USBD_HID_COLLECTION_FİZİKSEL,(6)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_BUTTON,(7)

SL_USBD_HID_YEREL_KULLANIM_MIN +1,0 01,

SL_USBD_HID_YEREL_KULLANIM_MAKS +1,0 03,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,

SL_USBD_HID_GLOBAL_RAPOR_SAYISI +1,0 03,

SL_USBD_HID_GLOBAL_RAPOR_BOYUTU +1,0 01,

SL_USBD_HID_ANA_GİRİŞ +1, SL_USBD_HID_ANA_VERİ |

SL_USBD_HID_ANA_DEĞİŞKEN |

SL_USBD_HID_ANA_MUTLAK,

SL_USBD_HID_GLOBAL_RAPOR_SAYISI +1,0 01,(8)

SL_USBD_HID_GLOBAL_RAPOR_BOYUTU +1,0 0D,

SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,

SL_USBD_HID_YEREL_KULLANIM +1, SL_USBD_HID_DV_X,

SL_USBD_HID_YEREL_KULLANIM +1, SL_USBD_HID_DV_Y,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F,

SL_USBD_HID_GLOBAL_RAPOR_BOYUTU +1,0 08,

SL_USBD_HID_GLOBAL_RAPOR_SAYISI +1,0 02,

SL_USBD_HID_ANA_GİRİŞ +1, SL_USBD_HID_ANA_VERİ |

SL_USBD_HID_ANA_DEĞİŞKEN |

SL_USBD_HID_ANA_BAĞLAYICI,

SL_USBD_HID_MAIN_ENDCOLLECTION,(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1) Bir fare rapor tanımlayıcısını temsil eden tablo, her satırın kısa bir öğeye karşılık gelecek şekilde başlatılır. Kısa öğe, 1 baytlık bir önek ve 1 baytlık bir veriden oluşur. Bkz. viewŞekilde bir ana HID ayrıştırıcısı tarafından düzenlendi – Ana HID Ayrıştırıcısından Rapor Tanımlayıcı İçeriği View.
(2) Genel Masaüstü Kullanım Sayfası kullanılır.
(3) Genel Masaüstü Kullanım Sayfasında, kullanım tag Kontrol grubunun bir fareyi kontrol etmek için olduğunu öne sürüyor. Bir fare koleksiyonu genellikle iki eksenden (X ve Y) ve bir, iki veya üç düğmeden oluşur.
(4) Fare toplama işlemi başlatılır.
(5) Fare koleksiyonunda bir kullanım tag Daha spesifik olarak, fare kontrollerinin işaretçi koleksiyonuna ait olduğunu öne sürer. Bir işaretçi koleksiyonu, kullanıcı niyetlerini bir uygulamaya yönlendirmek, göstermek veya işaret etmek için bir değer üreten bir eksen koleksiyonudur.
(6) İşaretçi toplama işlemi başlatılır.
(7) Düğme Kullanım Sayfası, üç adet 1 bitlik alandan oluşan bir Giriş öğesi tanımlar. Her 1 bitlik alan, sırasıyla farenin 1, 2 ve 3 numaralı düğmelerini temsil eder ve 0 veya 1 değerini döndürebilir.
(8) Düğme Kullanım Sayfası için Giriş Öğesi 13 başka bit ile doldurulur.
(9) X ve Y eksenleriyle fare konumunu tanımlamak için başka bir Genel Masaüstü Kullanım Sayfası belirtilmiştir. Giriş öğesi, değeri -127 ile 127 arasında olabilen iki adet 8 bitlik alandan oluşur.
(10) İşaretçi koleksiyonu kapalıdır.
(11) Fare koleksiyonu kapalıdır.
USB.org HID Sayfası

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

37/174

Üzerindeview
USB Uygulayıcıları Forumu (USB-IF), rapor tanımlayıcı biçimi hakkında diğer bilgilerin yanı sıra "HID Tanımlayıcı Aracı" adlı bir araç sunmaktadır. Daha fazla bilgi için http://www.usb.org/developers/hidpage/ adresine bakın.
USB Aygıtı HID ​​Sınıfı Programlama Kılavuzu
Bu bölümde HID sınıfının nasıl kullanılacağı açıklanmaktadır. USB Aygıt HID Sınıfını Başlatma Aygıtınıza bir USB Aygıt HID Sınıfı Örneği Ekleme USB Aygıt HID Sınıfını Kullanarak İletişim Kurma
USB Aygıt HID Sınıfının Başlatılması
Cihazınıza HID Sınıfı işlevselliği eklemek için, öncelikle sl_usbd_hid_init() işlevini çağırarak sınıfı başlatmanız gerekir. Örnek:ampAşağıdaki dosya, sl_usbd_hid_init() işlevinin varsayılan argümanlar kullanılarak nasıl çağrılacağını göstermektedir. sl_usbd_hid_init() işlevine geçirilecek yapılandırma argümanları hakkında daha fazla bilgi için USB Aygıt HID Sınıfı Uygulamaya Özel Yapılandırmalar bölümüne bakın.
Example – sl_usbd_hid_init() çağrılıyor
sl_status_t durumu;
durum = sl_usbd_hid_init(); eğer (durum ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
Aygıtınıza bir USB Aygıt HID Sınıf Örneği Ekleme
Aygıtınıza HID sınıfı işlevselliği eklemek için bir örnek oluşturmalı ve ardından bunu aygıtınızın yapılandırmasına/yapılandırmalarına eklemelisiniz.
HID Sınıf Örneği Oluşturma
sl_usbd_hid_create_instance() fonksiyonunu çağırarak bir HID sınıf örneği oluşturun.ampAşağıdaki dosya, varsayılan argümanları kullanarak sl_usbd_hid_create_instance() aracılığıyla basit bir fare fonksiyonunun nasıl oluşturulacağını göstermektedir. sl_usbd_hid_create_instance() fonksiyonuna geçirilecek yapılandırma argümanları hakkında daha fazla bilgi için USB Aygıt HID Sınıfı Örnek Yapılandırmaları bölümüne bakın.
Example – sl_usbd_hid_create_instance() aracılığıyla bir Fare İşlevi Ekleme

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

38/174

Üzerindeview
/* Küresel sabitler. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_APPLICATION, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CP_POINTER, SL_USBD_HID_MAIN_COLLECTION + 1, SL_USBD_HID_COLLECTION_PHYSICAL, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_BUTTON, SL_USBD_HID_LOCAL_USAGE_MIN + 1, 0 01, SL_USBD_HID_LOCAL_USAGE_MAX + 1, 0 03, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 00, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 03, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_ABSOLUTE, SL_USBD_HID_GLOBAL_REPORT_COUNT + 1, 0 01, SL_USBD_HID_GLOBAL_REPORT_SIZE + 1, 0 0D, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_CONSTANT, SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_X, SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_DV_Y, SL_USBD_HID_GLOBAL_LOG_MIN + 1, 0 81, SL_USBD_HID_GLOBAL_LOG_MAX + 1, 0 7F, SL_USBD_HID_GLOBAL_RAPOR_BOYUTU + 1, 0 08, SL_USBD_HID_GLOBAL_RAPOR_SAYISI + 1, 0 02, SL_USBD_HID_MAIN_GİRİŞ + 1, SL_USBD_HID_MAIN_VERİ | SL_USBD_HID_MAIN_DEĞİŞKEN | SL_USBD_HID_MAIN_RELATIVE, SL_USBD_HID_MAIN_ENDCOLLECTION, SL_USBD_HID_MAIN_ENDCOLLECTION };
/* Yerel değişkenler.*/ uint8_t sınıf_noktası; sl_status_t durum;
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 sınıf_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)sınıf_numarası;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
durum = sl_usbd_hid_create_instance(SL_USBD_HID_ALTSINIF_ÖNYÜKLEME, SL_USBD_HID_PROTOKOL_FARE, SL_USBD_HID_ÜLKE_KODU_DESTEKLENMİYOR, Ex_USBD_HID_Fare_RaporAçıklaması, sizeof(Ex_USBD_HID_Fare_RaporAçıklaması), 2u, 2u, doğru, &app_usbd_hid_geriçağrıları, &sınıf_nbr);
Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

39/174

Üzerindeview
/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */}
HID Sınıf Örneğini Aygıtınızın Yapılandırmasına Ekleme Bir HID sınıf örneği oluşturduktan sonra, aşağıdaki işlevi çağırarak bunu bir yapılandırmaya ekleyebilirsiniz:
sl_usbd_hid_add_to_configuration() .
Eski sevgiliampAşağıdaki sl_usbd_hid_add_to_configuration() fonksiyonunun nasıl çağrılacağını göstermektedir.
Example – sl_usbd_hid_add_to_configuration() çağrılıyor

sl_status_t durumu;

sl_usbd_hid_add_to_configuration(sınıf_nbr,

(1)

yapılandırma_nbr_fs); (2)

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

(1) sl_usbd_hid_create_instance() tarafından döndürülen yapılandırmaya eklenecek sınıf numarası. (2) Yapılandırma numarası (burada Tam Hızlı bir yapılandırmaya ekleniyor).
USB Aygıtı HID ​​Sınıfını Kullanarak İletişim Kurma
Sınıf Örneği İletişimi Eşzamanlı İletişim Sınıf Örneği İletişimi HID sınıfı, ana bilgisayarla iletişim kurmak için aşağıdaki işlevleri sunar.
Tablo – HID İletişim API Özeti

Fonksiyon adı
sl_usb d _hid _ re ad _sy nc() sl_usb d _hid _write _sy nc()

İşlem: Ana bilgisayardan kesme ÇIKIŞ uç noktası aracılığıyla veri alır. Bu işlev engelleyicidir. Ana bilgisayara kesme GİRİŞ uç noktası aracılığıyla veri gönderir. Bu işlev engelleyicidir.

Eşzamanlı İletişim Eşzamanlı iletişim, aktarımın engellendiği anlamına gelir. Fonksiyon çağrısı üzerine, uygulama aktarım hatasız veya hatasız tamamlanana kadar engeller. Sonsuza kadar beklememek için bir zaman aşımı belirtilebilir. Örnek:ampAşağıdaki şekilde, ana bilgisayardan kesme OUT uç noktasını kullanarak veri alan ve ana bilgisayara kesme IN uç noktasını kullanarak veri gönderen bir okuma ve yazma işlemi gösterilmektedir.
Example – Eşzamanlı HID ​​Okuma ve Yazma

__HİZALAMIŞ(4) uint8_t rx_buf[2];

__HİZALAMIŞ(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_durumu_t

durum;

durum = sl_usbd_hid_read_sync(sınıf_nbr,

(1)

(void *)rx_buf,

(2)

2sen,

0sen,

(3)

&xfer_len);

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

40/174

Üzerindeview
durum =sl_usbd_hid_read_sync(sınıf_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(durum ! SL_STATUS_OK){/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */}
durum =sl_usbd_hid_write_sync(sınıf_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(durum ! SL_STATUS_OK){/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */}
(1) sl_usbd_hid_create_instance()'dan oluşturulan sınıf örneği numarası, aktarımı uygun kesme ÇIKIŞ veya GİRİŞ uç noktasına yönlendirmek için HID sınıfına yönelik dahili bir referans sağlar.
(2) Uygulama, işleve sağlanan arabelleğin tüm verileri barındıracak kadar büyük olduğundan emin olmalıdır. Aksi takdirde senkronizasyon sorunları oluşabilir. Dahili olarak, okuma işlemi, sl_usbd_hid_create_instance() çağrılırken ayarlanan kontrol okuma bayrağına bağlı olarak kontrol uç noktası veya kesme uç noktasıyla gerçekleştirilir.
(3) Sonsuz bir engelleme durumundan kaçınmak için, milisaniye cinsinden ifade edilen bir zaman aşımı belirtilebilir. 809 değeri, uygulama görevinin sonsuza kadar beklemesine neden olur.
(4) Uygulama, başlatılmış iletim tamponunu sağlar.
HID Periyodik Giriş Raporları Görevi
Bant genişliğinden tasarruf etmek için, ana bilgisayar, raporlama sıklığını sınırlayarak bir kesme GİRİŞ uç noktasından gelen raporları sessize alma olanağına sahiptir. Bunu yapmak için ana bilgisayarın SET_IDLE isteğini göndermesi gerekir. Silicon Labs tarafından uygulanan HID sınıfı, bir veya daha fazla giriş raporuna uygulayabileceğiniz raporlama sıklığı sınırlamasına uyan dahili bir görev içerir. Şekil Periyodik Giriş Raporları Görevi, periyodik giriş raporları görevlerinin işleyişini göstermektedir.
Şekil – Periyodik Giriş Raporları Görevi

(1) Cihaz bir SET_IDLE isteği alır. Bu istek, belirli bir rapor kimliği için bir boşta kalma süresi belirtir. SET_IDLE isteği hakkında daha fazla bilgi için bkz.
(2) HID sınıfı başlatma aşamasında tahsis edilen bir rapor kimliği yapısı, boşta kalma süresiyle güncellenir. Boşta kalma süresi sayacı, boşta kalma süresi değeriyle başlatılır. Rapor kimliği yapısı, giriş rapor kimliği yapılarını içeren bir bağlantılı listenin sonuna eklenir. Boşta kalma süresi değeri, 4 ila 1020 ms arasında bir aralık veren 4 ms biriminde ifade edilir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

41/174

Üzerindeview
Boşta kalma süresi, kesme GİRİŞİ uç noktasının sorgulama aralığından daha az ise raporlar sorgulama aralığında oluşturulur.
(3) Periyodik giriş raporu görevi, her 4 ms'de bir giriş raporu kimlik listesini tarar. Her giriş raporu kimliği için görev, iki olası işlemden birini gerçekleştirir. Görev periyodunun süresi, boşta kalma süresi için kullanılan 4 ms birimiyle eşleşir. Ana bilgisayar tarafından herhangi bir SET_IDLE isteği gönderilmemişse, giriş raporu kimlik listesi boştur ve görevin işleyecek bir şeyi yoktur. Görev, yalnızca 0'dan farklı ve boşta kalma süresi 0'dan büyük olan rapor kimliklerini işler.
(4) Belirli bir giriş raporu kimliği için görev, boşta kalma süresinin geçip geçmediğini doğrular. Boşta kalma süresi dolmamışsa, sayaç azaltılır ve ana bilgisayara herhangi bir giriş raporu gönderilmez.
(5) Boşta kalma süresi dolduğunda (yani, boşta kalma süresi sayacı sıfıra ulaştığında), kesme GİRİŞ uç noktası aracılığıyla sl_usbd_hid_write_sync() işlevini çağırarak ana bilgisayara bir giriş raporu gönderilir.
(6) Görev tarafından gönderilen girdi raporu verileri, Rapor tanımlayıcısında açıklanan her girdi raporu için ayrılmış dahili bir veri tamponundan gelir. Bir uygulama görevi, bir girdi raporu göndermek için sl_usbd_hid_write_sync() işlevini çağırabilir. Giriş raporu verileri gönderildikten sonra, sl_usbd_hid_write_sync() işlevi, bir girdi raporu kimliğiyle ilişkili dahili tamponu yeni gönderilen verilerle günceller. Ardından, periyodik girdi raporu görevi, her boşta kalma süresi geçtikten sonra ve uygulama görevi dahili tampondaki verileri güncelleyene kadar her zaman aynı girdi raporu verilerini gönderir. Periyodik girdi raporu görevi tarafından yapılan iletim sırasında bir değişiklik olması durumunda, girdi raporu kimliği verilerinin bozulmasını önlemek için bir kilitleme mekanizması vardır.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

42/174

Üzerindeview
Üzerindeview
USB Aygıtı MSC Sınıfı
USB Aygıtı MSC Sınıfı Üzeriview USB Aygıtı MSC Sınıfı Kaynak İhtiyaçları Çekirdek USB Aygıtı MSC Sınıfı Yapılandırması USB Aygıtı MSC Sınıfı Programlama Kılavuzu USB Aygıtı MSC Sınıfı Depolama Sürücüleri
Bu bölüm, Silicon Labs USB Aygıtı tarafından desteklenen toplu depolama aygıtı sınıfını (MSC) açıklamaktadır. MSC, bir USB aygıtı ile bir ana bilgisayar arasında bilgi aktarımını sağlayan bir protokoldür. Aktarılan bilgi, yürütülebilir programlar, kaynak kodu, belgeler, resimler, yapılandırma verileri veya diğer metin veya sayısal veriler gibi elektronik olarak depolanabilen her şeydir. USB aygıtı, ana bilgisayara harici bir depolama ortamı olarak görünür ve bu da veri aktarımını mümkün kılar. fileSürükle ve bırak yoluyla.
A file sistem, nasıl tanımlandığını tanımlar files, depolama ortamında düzenlenir. USB yığın depolama sınıfı spesifikasyonu herhangi bir özel gereksinim gerektirmez. file Uyumlu cihazlarda kullanılacak bir sistemdir. Bunun yerine, Küçük Bilgisayar Sistemi Arayüzü (SCSI) şeffaf komut setini kullanarak veri sektörlerini okumak ve yazmak için basit bir arayüz sağlar. Bu nedenle, işletim sistemleri USB sürücüsünü bir sabit disk sürücüsü gibi ele alabilir ve herhangi bir şekilde biçimlendirebilir. file beğendikleri sistem.
USB toplu depolama aygıtı sınıfı aşağıdaki gibi iki taşıma protokolünü destekler:
Yalnızca Toplu Taşıma (BOT) Denetim/Toplu/Kesinti (CBI) Taşıma (yalnızca disket sürücüleri için kullanılır)
Toplu depolama aygıtı sınıfı, SCSI şeffaf komut kümesini yalnızca BOT protokolünü kullanarak uygular; bu da, veri ve durum bilgilerini iletmek için yalnızca toplu uç noktaların kullanılacağı anlamına gelir. MSC uygulaması, birden fazla mantıksal birimi destekler.
MSC uygulaması aşağıdaki özelliklere uygundur:
Evrensel Seri Veri Yolu Toplu Depolama Sınıfı Spesifikasyonuview, Revizyon 1.3 5 Eylül 2008. Evrensel Seri Veri Yolu Toplu Depolama Sınıfı Yalnızca Toplu Taşıma, Revizyon 1.0 31 Eylül 1999.
USB Aygıtı MSC aCl ss Üzerindenview
Protokol Son Noktaları Sınıf İstekleri Küçük Bilgisayar Sistemi Arayüzü (SCSI)
Protokol
Bu bölümde, Toplu Depolama Sınıfı'nın Yalnızca Toplu Taşıma (BOT) protokolünü ele alacağız. Yalnızca Toplu Taşıma protokolünün üç özelliği vardır:tagTürkçe:
Komut Taşıma Veri Taşıma Durum Taşıma
Toplu depolama komutları, ana bilgisayar tarafından Komut Bloğu Sarmalayıcı (CBW) adı verilen bir yapı aracılığıyla gönderilir. Veri taşıma gerektiren komutlar içintage, ana bilgisayar, CBW'nin uzunluk ve işaret alanlarında belirtildiği gibi cihazdan tam sayıda bayt göndermeyi veya almayı deneyecektir. Veri aktarımı tamamlandıktan sonratage, ana bilgisayar, komutun durumunu ve herhangi bir veri kalıntısını (eğer varsa) ayrıntılı olarak açıklayan bir Komut Durumu Sarmalayıcısı (CSW) almaya çalışır.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

43/174

Üzerindeview
(herhangi bir) Veri taşıma içermeyen komutlar içintage, ana bilgisayar CBW gönderildikten hemen sonra CSW'yi almaya çalışır. Protokol, Şekil - MSC Protokolü'nde ayrıntılı olarak açıklanmıştır.
Şekil – MSC Protokolü

Uç noktalar
Cihaz tarafında, BOT spesifikasyonuna uygun olarak, MSC aşağıdaki uç noktalardan oluşur: Varsayılan uç nokta adı verilen bir çift kontrol GİRİŞ ve ÇIKIŞ uç noktası. Bir çift toplu GİRİŞ ve ÇIKIŞ uç noktası.
Aşağıdaki tablo uç noktaların farklı kullanımlarını göstermektedir.
Tablo – MSC Son Nokta Kullanımı

Son nokta
Kontrol GİRİŞ Kontrol ÇIKIŞ Toplu GİRİŞ Toplu ÇIKIŞ

Yön
Cihazdan Ana Bilgisayara Ana Bilgisayardan Cihaza Cihazdan Ana Bilgisayara Ana Bilgisayardan Cihaza

Kullanım
Sayım ve MSC sınıfına özgü istekler Sayım ve MSC sınıfına özgü istekler CSW ve veri gönderme CBW ve veri alma

Sınıf Talepleri
MSC BOT protokolü için iki adet tanımlanmış kontrol talebi bulunmaktadır. Bu talepler ve açıklamaları aşağıdaki tabloda ayrıntılı olarak açıklanmıştır.

Tablo – Toplu Depolama Sınıfı İstekleri

Sınıf Talepleri
Yalnızca Toplu Depolama Sıfırlaması

Tanım
Bu istek, toplu depolama aygıtını ve ilişkili arayüzünü sıfırlamak için kullanılır. Bu istek, aygıtı bir sonraki komut bloğunu almaya hazırlar.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

44/174

Üzerindeview

Sınıf Talepleri

Tanım

Maksimum Al Bu istek, cihaz tarafından desteklenen en yüksek mantıksal birim numarasını (LUN) döndürmek için kullanılır. Örneğinample, bir

Ay

LUN 0 ve LUN 1'e sahip bir cihaz 1 değerini döndürecektir. Tek bir mantıksal birime sahip bir cihaz 0 döndürecek veya

istek. Döndürülebilecek maksimum değer 15'tir.

Küçük Bilgisayar Sistemi Arayüzü SCSI

Programlama arayüzü düzeyinde, MSC cihazı SCSI ve SFF-8020i (ATAPI) gibi standart depolama ortamı iletişim protokollerinden birini uygular. "Programlama Arayüzü", hangi protokolün uygulanacağını belirtir ve ana işletim sisteminin USB depolama cihazıyla iletişim kurmak için uygun cihaz sürücüsünü yüklemesine yardımcı olur. SCSI, USB MSC depolama cihazlarında kullanılan en yaygın protokoldür. GSDK kullanıcılarımızın kullanıma hazır olarak kullanabileceği bir MSC SCSI alt sınıfı uygulaması sunuyoruz.
SCSI, bilgisayarlar ve çevre birimleri arasındaki iletişimi yönetmek için kullanılan bir standartlar kümesidir. Bu standartlar arasında komutlar, protokoller, elektriksel arayüzler ve optik arayüzler bulunur. USB gibi diğer donanım arayüzlerini kullanan depolama aygıtları, aygıt/ana bilgisayar bilgilerini almak, aygıtın çalışmasını kontrol etmek ve depolama ortamındaki veri bloklarını aktarmak için SCSI komutlarını kullanır.
SCSI komutları çok çeşitli cihaz türlerini ve işlevlerini kapsar ve bu nedenle cihazların bu komutların bir alt kümesine ihtiyacı vardır. Genel olarak, temel iletişim için aşağıdaki komutlar gereklidir:
SORGU OKUMA KAPASİTESİ(10) OKUMA(10) İSTEK DUYU TESTİ BİRİMİ HAZIR YAZMA(10)
USB Aygıtı MSC Sınıfı Kaynak İhtiyaçları Çekirdekten

sl_usbd_msc_add_to_configuration() fonksiyonu aracılığıyla bir MSC sınıf örneği bir USB yapılandırmasına eklediğiniz her seferinde, çekirdekten aşağıdaki kaynaklar tahsis edilecektir.

Kaynak
Arayüzler Alternatif arayüzler Uç noktalar Arayüz grupları

Miktar
1 1 2 0

Bu sayıların yapılandırma başına olduğunu unutmayın. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY ve SL_USBD_DESCRIPTOR_QUANTITY yapılandırma değerlerinizi ayarlarken, sınıfın kaç yapılandırma ekleneceğini hesaba katmayı unutmayın. SL_USBD_OPEN_ENDPOINTS_QUANTITY yapılandırma değeri için, uç noktalar yalnızca ana bilgisayar tarafından bir yapılandırma ayarlandığında açıldığından, bir sınıf örneği için gereken uç nokta sayısını hesaba katmanız yeterlidir.
USB Aygıtı MSC Sınıf Yapılandırması

MSC sınıfını yapılandırmak için iki grup yapılandırma parametresi kullanılır:
USB Aygıtı MSC Sınıfı Uygulamaya Özel Yapılandırmalar USB Aygıtı MSC Sınıfı Mantıksal Birim Yapılandırması
USB Aygıtı MSC Sınıfı Uygulamaya Özel Yapılandırmalar

Sınıf Derleme Zamanı Yapılandırmaları Sınıf Örneği Oluşturma

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

45/174

Üzerindeview

Sınıf Derleme Zamanı Yapılandırmaları
Silicon Labs USB Aygıtı MSC sınıfı ve SCSI alt sınıfı, sl_usbd_core_config.h dosyasında bulunan #defines aracılığıyla derleme zamanında yapılandırılabilir file.
Tablo – Genel Yapılandırma Sabitleri

Yapılandırma Adı

Tanım

SL_USBD_MSC_CLASS_INST Fonksiyona yapılan bir çağrı yoluyla tahsis edeceğiniz sınıf örneklerinin sayısı

ANCE_QUANTITY

sl_usbd_msc_scsi_create_instance() .

SL_USBD_MSC_CONFIGURA Bir sınıf örneğinin bir çağrı yoluyla eklenebileceği yapılandırma sayısı

TION_QUANTITY

sl_usbd_msc_scsi_add_to_configuration() işlevi.

SL_USBD_MSC_LUN_QUANT Sınıf örneği başına, çağrı yoluyla ekleyeceğiniz mantıksal birim sayısı

İT

sl_usbd_msc_scsi_lun_add() işlevi.

SL_USBD_MSC_SCSI_64_BIT 64 bitlik Mantıksal Blok Adresi (LBA) desteğini etkinleştirir veya devre dışı bırakır.
_LBA_TR

SL_USBD_MSC_DATA_BUFF Sınıf örneği başına veri arabelleğinin boyutu (bayt cinsinden) ER_SIZE

Varsayılan Değer
2
1
2
0
512

Sınıf Örneği Oluşturma
Bir USB Aygıtı MSC SCSI sınıf örneği oluşturmak, sl_usbd_msc_scsi_create_instance() işlevini çağırarak yapılır. Bu işlev, aşağıda açıklanan bir yapılandırma argümanı alır.
p_scsi_geri_çağrıları
p_scsi_callbacks, sl_usbd_msc_scsi_callbacks_t türünde bir yapılandırma yapısına işaret eden bir işaretçidir. Yaygın USB aygıt sınıfı geri aramaları olan bağlan/bağlantıyı kes'e ek olarak, MSC sınıfına mantıksal birimde bir olay meydana geldiğinde çağrılan bir dizi isteğe bağlı geri arama işlevi sağlar. Geri aramaya gerek yoksa, bu argümana bir boş işaretçi (NULL) geçirilebilir.
Aşağıdaki tablo, bu yapılandırma yapısında bulunan her yapılandırma alanını açıklamaktadır.
Tablo – sl_usbd_msc_scsi_callbacks_t Yapılandırma Yapısı

Alanlar

Tanım

.olanak vermek

USB sınıf örneği başarıyla etkinleştirildiğinde çağrılır.

.disable USB sınıf örneği devre dışı bırakıldığında çağrılır.

.host_eject Mantıksal bir birim ana bilgisayardan çıkarıldığında çağrılan işlev.

Fonksiyon İmzası
void app_usbd_msc_scsi_enable(uint8_t sınıf_nbr);
void app_usbd_msc_scsi_disable(uint8_t sınıf_nbr); void app_usbd_msc_scsi_host_eject(uint8_t sınıf_nbr, uint8_t lu_nbr);

USB Aygıtı MSC Sınıfı Mantıksal Birim Yapılandırması

Bir MSC sınıf örneğine mantıksal bir birim eklemek, sl_usbd_msc_lun_add() fonksiyonunu çağırarak yapılır. Bu fonksiyon, aşağıda açıklanan bir yapılandırma argümanı alır.

p_lu_bilgisi

p_lu_info, sl_usbd_msc_scsi_lun_info_t türündeki bir yapıya işaret eden bir işaretçidir. Amacı, mantıksal birim hakkındaki bilgileri MSC sınıfına sağlamaktır.
Aşağıdaki tablo, bu yapılandırma yapısında bulunan her yapılandırma alanını açıklamaktadır.

Tablo – sl_usbd_msc_scsi_lun_info_t Yapılandırma Yapısı

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

46/174

Üzerindeview

Alan

Tanım

Alan
.scsi_lun_api_p tr

Tanım
Bu mantıksal birimi işleyecek medya sürücüsü API'sine işaretçi. Depolama sürücüleri hakkında daha fazla bilgi için USB Aygıtı MSC Sınıfı Depolama Sürücüleri bölümüne bakın.

.ve nd o r_id _ p tr
.ürün_kimliği_ptr
.p ro d uct_ re v isi on_level .is_ re ad _o nly

Mantıksal birimin satıcı kimliğini içeren bir dizeye işaretçi. Dizenin maksimum uzunluğu 8 karakterdir. Mantıksal birimin ürün kimliğini içeren bir dizeye işaretçi. Dizenin maksimum uzunluğu 16 karakterdir. Ürün revizyon seviyesi.
Mantıksal birimin, noktasından itibaren salt okunur olarak görülüp görülmeyeceğini belirten bayrak view sunucunun (doğru) veya değil (yanlış).

USB Aygıtı MSC Sınıfı Programlama Kılavuzu

Bu bölümde MSC sınıfının nasıl kullanılacağı açıklanmaktadır.
USB Aygıtı MSC Sınıfını Başlatma Aygıtınıza Bir USB Aygıtı MSC SCSI Sınıfı Örneği Ekleme USB Aygıtı MSC Sınıfı Mantıksal Birim İşleme
USB Aygıtı MSC Sınıfının Başlatılması

Cihazınıza MSC SCSI sınıfı işlevselliğini eklemek için öncelikle sl_usbd_msc_init() ve sl_usbd_msc_scsi_init() fonksiyonlarını çağırarak MSC temel sınıfını ve SCSI alt sınıfını başlatın.
Eski sevgiliampAşağıdaki dosya sl_usbd_msc_init() ve sl_usbd_msc_scsi_init() fonksiyonlarının nasıl çağrılacağını göstermektedir.

Example – sl_usbd_msc_init() ve sl_usbd_msc_scsi_init() çağrılıyor

sl_status_t durumu;
durum = sl_usbd_msc_init(); eğer (durum ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
durum = sl_usbd_msc_scsi_init(); eğer (durum ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}
Aygıtınıza bir USB Aygıtı MSC SCSI Sınıfı Örneği Ekleme
Cihazınıza MSC SCSI sınıfı işlevselliği eklemek için önce bir örnek oluşturun, ardından bunu cihazınızın yapılandırmasına ekleyin. Örneğinize en az bir mantıksal birim eklemelisiniz.
Bir MSC SCSI Sınıf Örneği Oluşturma
sl_usbd_msc_scsi_create_instance() fonksiyonunu çağırarak bir MSC SCSI sınıf örneği oluşturun.
Eski sevgiliampAşağıdaki dosya, sl_usbd_msc_scsi_create_instance() işlevinin varsayılan argümanlar kullanılarak nasıl çağrılacağını göstermektedir. sl_usbd_msc_scsi_create_instance() işlevine geçirilecek yapılandırma argümanları hakkında daha fazla bilgi için USB Aygıtı MSC Sınıfı Uygulamaya Özel Yapılandırmalar bölümüne bakın.
Example – sl_usbd_ msc_scsi_create_instance() çağrılıyor

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

47/174

Üzerindeview

uint8_t sınıf_nbr; sl_status_t durum;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .etkinleştir = NULL, .devre dışı bırak = NULL, .ana_bilgisayar_çıkart = NULL };
durum = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &sınıf_nbr);
if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }
MSC Sınıf Örneğini Aygıtınızın Yapılandırmasına Ekleme
Bir MSC sınıf örneği oluşturduktan sonra, şu işlevi çağırarak bunu bir yapılandırmaya ekleyebilirsiniz:
sl_usbd_msc_configuration'a_ekle() .
Eski sevgiliampAşağıdaki örnekte sl_usbd_msc_scsi_add_to_configuration() fonksiyonunun varsayılan argümanlar kullanılarak nasıl çağrılacağı gösterilmektedir.
Example – sl_usbd_ msc_scsi_add_to_configuration() çağrılıyor

sl_status_t durumu;

durum = sl_usbd_msc_scsi_add_to_configuration(sınıf_nbr,

(1)

yapılandırma_nbr_fs);

(2)

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

(1) sl_usbd_msc_scsi_create_instance() tarafından döndürülen yapılandırmaya eklenecek sınıf numarası. (32) Yapılandırma numarası (burada Tam Hızlı bir yapılandırmaya ekleniyor).
USB Aygıtı MSC Sınıfı Mantıksal Birim İşleme
Mantıksal Birim Ekleme Depolama Ortamını Bağlama/Çıkartma
Mantıksal Birim Ekleme
MSC SCSI sınıf örneğinize bir mantıksal birim eklerken, bu birimin bir depolama ortamına (RAMDisk, SD kart, flash bellek vb.) bağlı olması gerekir. MSC sınıfı, depolama ortamıyla iletişim kurmak için bir depolama sürücüsü kullanır. Mantıksal birim eklenirken bu sürücünün sağlanması gerekir.
Eski sevgiliampAşağıdaki dosya sl_usbd_msc_scsi_lun_add() yoluyla mantıksal bir birimin nasıl ekleneceğini göstermektedir.
Example – sl_usbd_msc_scsi_lun_add() yoluyla Mantıksal Birim Ekleme

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

48/174

Üzerindeview

sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;

sl_usbd_msc_scsi_lun_info_t lu_info;

sl_durumu_t

durum;

lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;

lu_info.satıcı_kimliği_ptr

= “Silikon Laboratuvarları”;

lu_info.product_id_ptr

= “blok aygıtı example”;

lu_info.ürün_revizyon_seviyesi = 0x1000u;

lu_info.is_read_only

= yanlış;

durum = sl_usbd_msc_scsi_lun_add(sınıf_nbr, &lu_bilgisi, &lu_nesne_ptr);
if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }

Depolama Ortamını Takma/Çıkartma
Mantıksal birim eklendikten sonra, ana bilgisayar tarafından erişilebilir olması için bir depolama ortamının bağlanması gerekir. MSC sınıfı, depolama ortamının mantıksal birimle ilişkisini kontrol etmek için iki işlev sunar: sl_usbd_msc_scsi_lun_attach() ve sl_usbd_msc_scsi_lun_detach(). Bu işlevler, gerektiğinde gömülü uygulamadan yeniden erişim sağlamak için bir depolama aygıtının çıkarılmasını taklit etmenize olanak tanır.
Eski sevgiliampAşağıdaki dosya sl_usbd_msc_scsi_lun_attach() ve sl_usbd_msc_scsi_lun_detach() fonksiyonlarının nasıl kullanılacağını göstermektedir.
Example – Medya Ekle/Çıkar

sl_status_t durumu;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}

(1)

durum = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); eğer (durum ! SL_STATUS_OK) {
/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}

(2)

durum = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) eğer (durum ! SL_STATUS_OK) {
/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */
}

(3)

(1) Bu andan itibaren, MSC aygıtı bir ana bilgisayara bağlıysa, depolama ortamına erişilebilir.
(2) MSC cihazı bir ana bilgisayara bağlıysa, ortam artık kullanılamaz olarak görünecektir. Bu aşamada, gömülü uygulamadan ortam üzerinde işlemler gerçekleştirilebilir.
(3) Yine, MSC aygıtı ana bilgisayara bağlıysa, depolama ortamı bağlı olarak görünecektir.
USB Aygıtı MSC Sınıfı Depolama Sürücüleri
USB Device MSC Class'ın bir depolama ortamıyla iletişim kurabilmesi için bir depolama sürücüsüne ihtiyacı vardır. Silicon Labs şu anda sürücü sunmuyor.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

49/174

Üzerindeview
TPY aa sürücü AI, sl_usbd_msc_scsi_lun_api_t typedef ile tanımlanır. sl_usbd_msc_scsi_lun_api_t v ri ble'miz, sl_usbd_msc_scsi_lun_info_t v ri ble'nize eklenmelidir, sl_usbd_msc_scsi_lun_add() ile mantık birimini eklediğinizde argümanı kullanın. Yapılar hakkında daha fazla bilgi için USB Aygıtı MSC SCSI API bölümüne bakın. Depolama sürücüsü uygulaması, RAM'deki bir sektör dizisi kadar basit olabilir. Tipik sektör boyutu (yani blok boyutu), yığın depolama aygıtları için 512 ve CD-ROM'lar için 2048'dir.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

50/174

Üzerindeview
Üzerindeview
USB Aygıt Satıcı Sınıfı
USB Aygıt Satıcı Sınıfı Üzeriview USB Aygıt Satıcı Sınıfı Kaynak İhtiyaçları Çekirdek USB Aygıt Satıcı Sınıfı Yapılandırmasından USB Aygıt Satıcı Sınıfı Programlama Kılavuzu Satıcı sınıfı, tescilli bir protokolü uygulayabilen satıcıya özgü aygıtlar oluşturmanıza olanak tanır. Ana bilgisayar ile aygıt arasında veri aktarımı için bir çift toplu uç noktaya dayanır. Toplu aktarımlar, büyük miktarda yapılandırılmamış veri aktarımı için uygundur ve hata algılama ve yeniden deneme mekanizması kullanarak güvenilir bir veri alışverişi sağlar. Toplu uç noktalara ek olarak, Satıcı sınıfı isteğe bağlı bir çift kesme uç noktası da kullanabilir. Herhangi bir işletim sistemi (OS), Vendor sınıfını işleyecek bir sürücüye sahip olması koşuluyla Vendor sınıfıyla çalışabilir. İşletim sistemine bağlı olarak sürücü yerel veya satıcıya özgü olabilir. Örneğin, Microsoft Windows® altında, uygulamanız satıcı aygıtla iletişim kurmak için Microsoft tarafından sağlanan WinUSB sürücüsüyle etkileşime girer.
USB Aygıt Satıcı Sınıfı Üzeriview
Şekil – Windows Ana Bilgisayarı ve Satıcı Sınıfı Arasındaki Genel Mimari, Satıcı sınıfını kullanarak ana bilgisayar ile cihaz arasındaki genel mimariyi gösterir. Bu örnekteampÖrneğin, ana işletim sistemi MS Windows'tur.
Şekil – MS Windows Ana Bilgisayarı ve Satıcı Sınıfı Arasındaki Genel Mimari

MS Windows tarafında, uygulama bir USB kütüphanesiyle etkileşime girerek satıcı cihazla iletişim kurar. libusb gibi kütüphaneler, bir cihazı ve ilişkili veri yollarını yönetmek ve cihazla kontrol, toplu ve kesme uç noktaları aracılığıyla iletişim kurmak için bir API sunar.
Cihaz tarafında Vendor sınıfı aşağıdaki uç noktalardan oluşur:
Varsayılan uç nokta olarak adlandırılan bir çift kontrol GİRİŞ ve ÇIKIŞ uç noktası. Bir çift toplu GİRİŞ ve ÇIKIŞ uç noktası.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

51/174

Üzerindeview

Bir çift kesme GİRİŞ ve ÇIKIŞ uç noktası. Bu çift isteğe bağlıdır. Aşağıdaki tablo, farklı uç noktalarının kullanımını göstermektedir:
Tablo – Satıcı Sınıfı Uç Noktalarının Kullanımı

Son Nokta Yönü

Kontrol GİRİŞİ
Kontrol
DIŞARI
Toplu Giriş

Cihazdan ana bilgisayara
>Ana bilgisayardan cihaza
Cihazdan ana bilgisayara

Toplu Çıkış
Kesinti Girişi
Yarıda kesmek
DIŞARI

Ana bilgisayardan cihaza
Cihazdan ana bilgisayara
Ana bilgisayardan cihaza

Kullanım
Standart sayım talepleri ve satıcıya özel talepler.
Standart sayım talepleri ve satıcıya özel talepler.
Ham veri iletişimi. Veriler, özel bir protokole göre yapılandırılabilir.
Ham veri iletişimi. Veriler, özel bir protokole göre yapılandırılabilir.
Ham veri iletişimi veya bildirimi. Veriler, tescilli bir protokole göre yapılandırılabilir. Ham veri iletişimi veya bildirimi. Veriler, tescilli bir protokole göre yapılandırılabilir.

Cihaz uygulaması, ana bilgisayara veri göndermek veya ana bilgisayardan veri almak için toplu ve kesme uç noktalarını kullanabilir. Ana bilgisayar tarafından gönderilen satıcıya özgü istekleri çözümlemek için yalnızca varsayılan uç noktayı kullanabilir. Standart istekler, Silicon Labs USB Aygıtının Çekirdek katmanı tarafından dahili olarak yönetilir.
USB Aygıt Satıcı Sınıfı Kaynak İhtiyaçları Çekirdekten

sl_usbd_vendor_add_to_configuration() fonksiyonu aracılığıyla bir yapılandırmaya bir satıcı sınıfı örneği eklediğiniz her seferinde, çekirdekten aşağıdaki kaynaklar tahsis edilecektir.

Kaynak
Arayüzler Alternatif arayüzler Uç noktalar Arayüz grupları

Miktar
1 1 2 (kesme uç noktalarını etkinleştirdiyseniz 4) 0

Bu sayıların yapılandırma başına olduğunu unutmayın. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY ve SL_USBD_DESCRIPTOR_QUANTITY yapılandırma değerlerinizi ayarlarken, sınıfın kaç yapılandırma ekleneceğini hesaba katmayı unutmayın. SL_USBD_OPEN_ENDPOINTS_QUANTITY yapılandırma değeri için, uç noktalar yalnızca ana bilgisayar tarafından bir yapılandırma ayarlandığında açıldığından, bir sınıf örneği için gereken uç nokta sayısını hesaba katmanız yeterlidir.
USB Aygıt Satıcı Sınıfı Yapılandırması

Vendor sınıfını yapılandırmak için iki grup yapılandırma parametresi kullanılır:
USB Aygıt Satıcı Sınıfı Uygulamaya Özel Yapılandırmalar USB Aygıt Satıcı Sınıfı Örnek Yapılandırmaları
USB Aygıt Satıcı Sınıfı Uygulamaya Özel Yapılandırmalar
Öncelikle, Silicon Labs USB aygıtı Vendor sınıf modülünü kullanmak için, Vendor derleme zamanı yapılandırma tanımlarını uygulama ihtiyaçlarınıza göre ayarlayın. Bunlar sl_usbd_core_config.h başlığında yeniden gruplandırılmıştır. file Satıcı bölümünün altında. Miktar yapılandırmalarının amacı, USB aygıt modülüne kaç adet USB Satıcı nesnesi tahsis edileceğini bildirmektir.
Aşağıdaki tablo her bir yapılandırma tanımını açıklamaktadır.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

52/174

Üzerindeview

Tablo – USB Aygıt Satıcısı Yapılandırması Tanımları

Yapılandırma Adı

Tanım

Varsayılan Değer

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY sl_usbd_vendor_create_instance() 2 fonksiyonuna yapılan bir çağrı yoluyla tahsis edeceğiniz sınıf örneği sayısı.

SL_USBD_VENDOR_CONFIGURATION_QUANTITY Yapılandırma sayısı. Satıcı sınıfı örnekleri, sl_usbd_vendor_add_to_configuration() işlevine yapılan bir çağrı yoluyla bir veya daha fazla yapılandırmaya eklenebilir.

USB Aygıt Satıcı Sınıfı Örnek Yapılandırmaları

Bu bölüm, Satıcı sınıfı örnekleriyle ilgili yapılandırmaları tanımlar.
Sınıf Örneği Oluşturma intr_en interval p_vendor_callbacks
Sınıf Örneği Oluşturma

Bir Vendor sınıfı örneği oluşturmak, aşağıda açıklanan üç yapılandırma argümanı alan sl_usbd_vendor_create_instance() fonksiyonunu çağırarak yapılır.

intr_en
Bir çift kesme uç noktasının eklenip eklenmeyeceğini belirten Boole değeri.

Değer
doğru yanlış

Tanım
Bir çift GİRİŞ/ÇIKIŞ uç noktası eklenecek ve gömülü uygulamaya sunulacaktır. Kesinti uç noktası eklenmeyecektir. Yalnızca bir çift Toplu GİRİŞ/ÇIKIŞ uç noktası kullanılabilir olacaktır.

aralık
intr_en'i true olarak ayarlarsanız, kesme uç noktalarının yoklama aralığını (milisaniye cinsinden) belirtebilirsiniz. intr_en'i false olarak ayarlarsanız, sınıf tarafından yok sayılacağı için interval'i 0 olarak ayarlayabilirsiniz.
p_satıcı_geri_çağrıları
p_vendor_callbacks, sınıfa özgü kontrol isteklerini işlemek için belirtebileceğiniz bir geri çağırma işlevi yapı değişkenine bir işaretçidir. Sınıfa özgü herhangi bir istek kullanmıyorsanız veya etkinleştirme/devre dışı bırakma bildirimine ihtiyacınız varsa, bunu NULL olarak ayarlayabilirsiniz.
Eski sevgiliampAşağıdaki dosya, sınıfınıza özgü istek işleyicinizin beklenen imzasını sağlar.
Example – Sınıfa Özgü İstek İşlevinin İmzası

void app_usbd_vendor_req_handle(uint8_t

sınıf_numarası, (1)

sabit sl_usbd_kurulum_req_t *p_kurulum_req); (2)

sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.etkinleştir = NULL, .devre dışı bırak = NULL, .kurulum_req = app_usbd_vendor_req_handle,
};

(1) Satıcı sınıfı örnek numarası.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

53/174

Üzerindeview

(2) Ana bilgisayardan alınan bir kurulum isteğine işaretçi.
USB Aygıt Satıcı Sınıfı Programlama Kılavuzu
Bu bölümde, Vendor sınıfının nasıl kullanılacağı açıklanmaktadır. USB Aygıt Satıcı Sınıfını Başlatma Aygıtınıza bir USB Aygıt Satıcı Sınıfı Örneği Ekleme USB Aygıt Satıcı Sınıfını kullanarak iletişim kurma
USB Aygıt Satıcı Sınıfının Başlatılması
Cihazınıza bir Satıcı Sınıfı işlevi eklemek için, öncelikle USBD_Vendor_Init() işlevini çağırarak sınıfı başlatın. Örnek:ampAşağıdaki sl_usbd_vendor_init() fonksiyonunun nasıl çağrılacağını göstermektedir.
Example – sl_usbd_vendor_init() çağrılıyor

sl_status_t durumu;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* Bir hata oluştu. Hata işleme buraya eklenmelidir. */ }
Aygıtınıza bir USB Aygıt Satıcı Sınıfı Örneği Ekleme
Cihazınıza satıcı sınıfı işlevselliği eklemek için öncelikle bir örnek oluşturmalı, ardından bunu cihazınızın yapılandırmasına/yapılandırmalarına eklemelisiniz.
Satıcı Sınıfı Örneği Oluşturma Satıcı Sınıfı Örneğini Aygıtınızın Yapılandırmasına Ekleme
Bir Satıcı Sınıfı Örneği Oluşturma
sl_usbd_vendor_create_instance() fonksiyonunu çağırarak bir Vendor sınıfı örneği oluşturun.ampAşağıdaki dosya, sl_usbd_vendor_create_instance() işlevinin varsayılan argümanlar kullanılarak nasıl çağrılacağını göstermektedir. sl_usbd_vendor_create_instance() işlevine geçirilecek yapılandırma argümanları hakkında daha fazla bilgi için USB Aygıt Satıcı Sınıfı Örneği Yapılandırmaları bölümüne bakın.
Example – sl_usbd_vendor_create_instance() çağrılıyor

uint8_t sınıf_nbr; sl_status_t durum;

durum = sl_usbd_vendor_create_instance(yanlış,

(1)

0sen,

(2)

app_usbd_vendor_callback_functions, (3)

&sınıf_nbr);

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

(1) Bu sınıf örneğiyle Kesinti uç noktası yok. (2) Kesinti uç noktaları devre dışı bırakıldığından aralık yok sayılır.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

54/174

Üzerindeview

(3) Uygulamanızın bir parçası olan ve satıcıya özgü sınıf isteklerini işleyen geri arama işlevi. Daha fazla bilgi için USB Aygıt Satıcı Sınıfını Kullanarak İletişim Kurma bölümüne bakın. Satıcı Sınıfı Örneğini Aygıtınızın Yapılandırmasına Ekleme Bir satıcı sınıfı örneği oluşturduktan sonra, USBD_Vendor_ConfigAdd() işlevini çağırarak bunu bir yapılandırmaya ekleyebilirsiniz. Örnek:ampAşağıdaki dosya sl_usbd_vendor_add_to_configuration() fonksiyonunun varsayılan argümanlar kullanılarak nasıl çağrılacağını göstermektedir.
Example – sl_usbd_vendor_add_to_configuration() çağrılıyor

sl_status_t durumu;

durum = sl_usbd_vendor_add_to_configuration(sınıf_nbr,

(1)

yapılandırma_nbr_fs);

(2)

eğer (durum ! SL_STATUS_OK) {

/* Bir hata oluştu. Hata işleme buraya eklenmelidir. */

}

(1) sl_usbd_vendor_create_instance() tarafından döndürülen yapılandırmaya eklenecek sınıf numarası. (2) Yapılandırma numarası (burada Tam Hızlı bir yapılandırmaya ekleniyor).
USB Aygıt Satıcı Sınıfını Kullanarak İletişim Kurma
Genel Eşzamanlı İletişim Eşzamansız İletişim Satıcı Talebi Genel Satıcı sınıfı, ana bilgisayarla iletişim kurmak için aşağıdaki işlevleri sunar. İşlevin parametreleri hakkında daha fazla bilgi için USB Aygıt Satıcı API'sine bakın.
Tablo – Satıcı İletişim API Özeti

Fonksiyon adı
sl_usb d _v e nd o r_ re ad _b ulk_sy nc() sl_usb d _v e nd o r_write _b ulk_sy nc() sl_usb d _v e nd o r_ re ad _b ulk_asy nc() sl_usb d _v e nd o r_write _b ulk_asy nc() sl_usb d _v e nd o r_ re ad _inte rrup t_sy nc() sl_usb d _v e nd o r_write _inte rrup t_sy nc() sl_usb d _v e nd o r_ re ad _inte 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-
engelleme.
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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

55/174

Üzerindeview

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

__HİZALAMIŞ(4) uint8_t rx_buf[2];

__HİZALAMIŞ(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_durumu_t

durum;

status = sl_usbd_vendor_read_bulk_sync(class_nbr,

(1)

(void *)&rx_buf[0],

(2)

2sen,

0sen,

(3)

&xfer_len);

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

status = sl_usbd_vendor_write_bulk_sync( class_nbr,

(1)

(void *)&tx_buf[0],

(4)

2sen,

0sen,

(3)

false,

(5)

&xfer_len);

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

(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) Uygulama, başlatılmış iletim tamponunu sağlar.
(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.
Asenkron İletişim
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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

56/174

Üzerindeview

void app_usbd_vendor_comm (uint8_t class_nbr)

{

__HİZALAMIŞ(4) uint8_t rx_buf[2];

__HİZALAMIŞ(4) uint8_t tx_buf[2];

sl_durumu_t

durum;

status = sl_usbd_vendor_read_bulk_async(class_nbr,

(void *)&rx_buf[0],

(2)

2sen,

app_usbd_vendor_rx_completed,

NULL);

(4)

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(5)

2sen,

app_usbd_vendor_tx_completed,

BOŞ,

(4)

false);

(6)

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Hatayı işle. */

}

}

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

{

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Do some processing. */

} başka {

/* $$$$ Hatayı işle. */

}

}

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)

{

eğer (durum ! SL_STATUS_OK) {

/* $$$$ Do some processing. */

} başka {

/* $$$$ Hatayı işle. */

}

}

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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

57/174

Üzerindeview
(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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

58/174

Üzerindeview

#define APP_VENDOR_REQ_NO_DATA

0x01u

#define APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u

#define APP_VENDOR_REQ_SEND_DATA_TO_HOST 0x03u

#define APP_VENDOR_REQ_DATA_BUF_SIZE

50u

static uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];

static bool app_usbd_vendor_req (uint8_t

class_nbr,

const sl_usbd_setup_req_t *p_setup_req)

(1)

{

bool valid;

sl_status_t durumu;

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;

varsayılan:

(6)

// Request is not supported.

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

59/174

Üzerindeview

valid =true;break;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// Not enough room to receive data.return(false);}// Receive data via Control OUT EP.// Wait transfer completion forever. status =sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,&xfer_len);if(status ! SL_STATUS_OK){ valid =false;}else{ valid =true;}break;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// Fill buf with a pattern.Mem_Set((void *)&AppVendorReqBuf[0u],’A’,
req_len);// Send data via Control IN EP.// Wait transfer completion forever. status =sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,false,&xfer_len);if(status ! SL_STATUS_OK){ valid = DEF_FAIL;}else{ valid = DEF_OK;}break;
default:(6)// Request is not supported. valid = DEF_FAIL;break;}return(valid);}

(1) The core will pass the Setup packet content to your application. The structure sl_usbd_setup_req_t contains the same fields as defined by the USB 2.0 specification (refer to section “9.3 USB Device Requests” of the specification for more details):

typedef yapı {

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

*/

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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

60/174

API Belgeleri
API Belgeleri
API Belgeleri
Modüllerin listesi
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

Tanım
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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

61/174

USB Device API
USB Device API
USB Device API
USB Device API.
Modüller
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

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

62/174

USB Device ACM API

USB Device ACM API

USB Device ACM API

USB Device CDC ACM API.
Modüller
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
Fonksiyonlar

sl_status_t sl_status_t
sl_status_t sl_status_t sl_status_t
sl_durumu_t
sl_durumu_t
sl_durumu_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).

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

63/174

USB Device ACM API
Makrolar
#define SL_USBD_CDC_ACM_NBR_NONE 255u
MODÜL.
#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
Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

64/174

USB Device ACM API

Tip
geçersiz

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
İade

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

Tanım

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

Tip
uint16_t
uint16_t

Direction Argument Name

Tanım

Yok

line_state_interval Line state notification interval in milliseconds (value must

be a power of 2).

Yok

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 *

Yok

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.

İade

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

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

İade

Telif Hakkı © 2025 Silikon Laboratuvarları. Her hakkı saklıdır.

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

Tip

Yön

Argument Name

Tanım

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

Belgeler / Kaynaklar

SILICON LABS USB Device Stack [pdf] Kullanım Kılavuzu
USB Device Stack, Device Stack, Stack

Referanslar

Yorum bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar işaretlenmiştir *