SILICON LABS USBデバイススタック取扱説明書

USBデバイススタック

仕様

  • USBバージョン:1.5.1
  • 発売日: 21年2025月XNUMX日
  • Simplicity SDK バージョン: 2025.6.1

製品終了view

Silicon LabsのUSBデバイススタックは、多用途で
IoTプロジェクト向けの使いやすいUSB接続により、
ネットワークコプロセッサとホスト間の通信。

特徴

  • 効率的なUSBデバイススタック
  • IoTプロジェクトに最適
  • ネットワークコプロセッサと
    ホスト

製品使用説明書

USBデバイスの構成

プロジェクトに応じてUSBデバイスの設定を構成します
USBデバイス構成セクションを参照して要件を確認してください
ドキュメントに記載されています。

USBデバイスプログラミングガイド

USBデバイスプログラミングガイドに従って、
プログラムとUSBデバイスとの対話により、さまざまな
アプリケーション。

USBデバイスクラス

USBデバイスクラスセクションでは、view 異なる
CDC ACM、HID、MSC SCSI、ベンダークラスなどのクラスがあります。
デバイスの機能に基づいて適切なクラスを選択します。

USBデバイスのトラブルシューティング

USBデバイスで問題が発生した場合は、
解決策とデバッグのためのUSBデバイスのトラブルシューティングセクション
ヒント。

Microsoft Windows OS USBホスト

USBデバイスをMicrosoft Windows OSのUSBで使用している場合
主催者は、
シームレスな統合のためのドキュメント。

よくある質問

Q: よくある元恋人は何ですか?amp私が構築できるデバイスの数
このUSBスタックですか?

A: USBスタックを使用すると、次のようなデバイスを構築できます。
USB-シリアルアダプタ、マウスまたはキーボード、リムーバブルストレージ
デバイス、カスタムデバイス。

Q: このソフトウェアを使用するには特別なソフトウェア要件がありますか?
USB デバイス スタック?

A: 互換性のあるソフトウェアには、Simplicity SDK、Simplicity
Studio、Simplicity Commander、GCC(GNUコンパイラコレクション)、
IAR Embedded Workbench for ARM および IAR EWARM。

ユニバーサルシリアルバスUSB

ユニバーサルシリアルバスUSB

USBオーバーview 以上view
リリースノートUSB
仕様と機能view
USBデバイスの設定終了view
USBデバイスプログラミングガイド終了view
USBデバイスクラス終了view CDC ACMクラス終了view HIDクラスオーバーview MSC SCSIクラス終了view ベンダークラス終了view
USB API API ドキュメント USB デバイス API USB デバイス ACM API a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB デバイス CDC API a sl_usbd_cdc_subcl ss_driver_t USB デバイス コア API
sl_usbd_device_config_t sl_usbd_setup_req_t
sl_usbd_cl ss_driver_t USBデバイスHID API
sl_usbd_hid_callbacks_t USBデバイスMSC API
sl_usbd_msc_subcl ss_driver_t USB デバイス MSC SCSI API
sl_usbd_msc_scsi_callbacks_t

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

1/174

ユニバーサルシリアルバスUSB
sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USBデバイスベンダーAPI sl_usbd_vendor_callbacks_t
APIドキュメント USBデバイスのトラブルシューティング
以上view Microsoft Windows OS USBホスト
以上view

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

2/174

以上view
以上view
USBデバイス
USBは、コンピュータシステムの歴史の中で最も成功した通信インターフェースの一つであり、コンピュータ周辺機器を接続するための事実上の標準となっています。Silicon Labs USBデバイススタックは、組み込みシステム向けに特別に設計されたUSBデバイスモジュールです。Silicon Labsの品質、拡張性、信頼性を基盤としてゼロから構築され、USB 2.0仕様に準拠するための厳格な検証プロセスを経ています。このドキュメントでは、Silicon Labs USBデバイススタックの初期化、起動、および使用方法について説明します。また、様々な設定値とその用途についても説明します。view 技術、構成の可能性の種類、実装手順、および例amp利用可能なすべてのクラスの一般的な使用法のリスト。
USBの概念を素早く理解できるように、ドキュメントには多くの例が掲載されています。amp基本的な機能を備えたUSBメモリ。これらの例amplesは、デバイスを迅速に構築できるフレームワークを提供します。これらの例amp含まれるもの:
USB-シリアルアダプタ(通信デバイスクラス)マウスまたはキーボード(ヒューマンインターフェイスデバイスクラス)リムーバブルストレージデバイス(マスストレージクラス)カスタムデバイス(ベンダークラス)
以下は以上ですview ドキュメントセクションの:
仕様と機能 USBデバイスの構成 USBデバイスプログラミングガイド USBデバイスクラス
CDC ACMクラス HIDクラス MSC SCSIクラス ベンダークラス USBデバイスのトラブルシューティング Microsoft Windows OS USBホスト

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

3/174

USB
USB

USBバージョン1.5.1 2025年7月21日 – リリースノート
Simplicity SDK バージョン 2025.6.1
Silicon Labs の効率的な USB デバイススタックは、ネットワークコプロセッサとホスト間の通信を含む IoT プロジェクトに最適な、汎用性と使いやすさを兼ね備えた USB 接続を提供します。以前のリリースについては、こちらをクリックしてください。
リリースの概要
主な機能 | APIの変更 | バグ修正 | チップの有効化
主な特徴
基礎となるプラットフォームの変更のみ。
APIの変更
なし。
バグ修正
なし。
チップの有効化
なし。
主な特徴
新機能 | 拡張機能 | 削除された機能 | 非推奨の機能
新機能
なし。
機能強化
基礎となるプラットフォームの変更のみ。
削除された機能
なし。
非推奨の機能
なし。
APIの変更
新しい API | 変更された API | 削除された API | 非推奨の API
新しいAPI

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

4/174

USB
なし。
変更されたAPI
なし。
削除されたAPI
なし。
非推奨のAPI
なし。
バグ修正
なし。
チップの有効化
なし。
アプリケーション例ampleの変更
新しい元amples | 修正されたExamples | 削除された例amples | 非推奨の例ampレ
新しい元ampレ
なし。
修正されたExampレ
なし。
削除された例ampレ
なし。
非推奨の例ampレ
なし。
リリース変更の影響
影響に関する声明 | 移行ガイド
影響声明
なし。
移行ガイド
なし。
既知の問題と制限
なし。
このリリースの使用

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

5/174

USB

リリースの内容 | 互換性のあるソフトウェア | インストールと使用 | ヘルプとフィードバック

リリースには何が含まれていますか?

USBデバイススタックアプリケーション例ampレ
互換性のあるソフトウェア

ソフトウェア
Simplicity SDK Simplicity Studio Simplicity Commander GCC GNU コンパイラコレクション) IAR Embedded Workbench for ARM IAR EWARM

互換性のあるバージョンまたはバリアント
2025.6.0 5.11.0 1.18.2 (Simplicity Studio に付属) 12.2.1 (Simplicity Studio に付属) 9.40.1 (Simplicity Studio に付属)

インストールと使用

開発を開始するには、以下を参照してください。
USB デバイス プログラミング ガイド。API ドキュメント。
Secure Vault 統合の詳細については、「Secure Vault」を参照してください。
再するためにview セキュリティとソフトウェアに関するアドバイザリの通知を受信し、通知設定を管理します。
ò https://community.silabs.com/ にアクセスします。ó アカウントの認証情報でログインします。ô プロフェッショナルをクリックしますfile ページの右上隅にあるアイコンをクリックします。
õ ドロップダウンメニューから通知を選択します。ö 通知セクションで、マイプロダクト通知タブに移動して、view 過去のセキュリティおよびソフトウェアに関するアドバイザリ
通知
÷ 設定を管理するには、「通知の管理」タブを使用して、通知する製品のアップデートとアドバイザリをカスタマイズします。
受け取る。
推奨される構成設定については、こちらをご覧ください。
このリリースのソフトウェアの詳細については、オンライン ドキュメントをご覧ください。
ヘルプとフィードバック

Silicon Labsサポートにお問い合わせください。Ask AIツールを使用して回答を得るには、このページ上部の検索フィールドをご覧ください。

注: Ask AI は実験段階です。

開発者コミュニティからサポートを受けましょう。
SDK リリースおよびメンテナンス ポリシー
SDK リリースおよびメンテナンス ポリシーをご覧ください。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

6/174

以上view
以上view
仕様
「ユニバーサルシリアルバス仕様リビジョン2.0」に準拠し、「インターフェースアソシエーション記述子エンジニアリング変更通知(ECN)」を実装しています。転送タイプ
制御バルク割り込みUSBクラス通信デバイスクラス(CDC)抽象制御モデル(ACM)ヒューマンインターフェースデバイス(HID)マスストレージクラス(MSC)ベンダー固有のクラスフレームワーク
特徴
メモリフットプリントを最小限に抑えるために必要な機能のみを含むように拡張可能 フルスピード(12 Mbit/s)をサポート 複合(多機能)デバイスをサポート マルチ構成デバイスをサポート USB省電力機能(デバイスのサスペンドと再開)をサポート マスストレージクラスをMicrium OSに完全に統合 File システムモジュールはCMSIS-RTOS2抽象化レイヤーを使用して開発されており、様々なOSで動作します。Silicon Labs GSDKには、FreeRTOSおよびMicrium OSポートが付属しています。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

7/174

以上view
以上view

USBデバイスの構成

このセクションでは、Silicon Labs USBデバイスの設定方法について説明します。設定パラメータは、以下の3つのグループに分かれています。
USBデバイスコア構成 USBデバイス情報構成 USBデバイスハードウェア構成
USBデバイスコア構成
Silicon Labs USBデバイスは、sl_usbd_core_config.hにある一連の#defineを介してコンパイル時に構成できます。 fileUSBデバイスは可能な限り#defineを使用します。これは、有効化されている機能に基づいてコンパイル時にコードとデータのサイズを調整できるためです。これにより、Silicon Labs USBデバイスの読み取り専用メモリ(ROM)とランダムアクセスメモリ(RAM)のフットプリントを、アプリケーションの要件に応じて調整できます。
推奨: デフォルト値 (太字で強調表示) を使用して構成プロセスを開始します。
以下のセクションはテンプレート設定の順序に基づいて構成されています file、 sl_usbd_core_config.h。
コア構成クラスの構成
コア構成
表 – USBデバイスコア構成定数

定数の説明

デフォルト値

SL_USBD_TA SK_STACK_サイズ

USBDコアタスクのスタックサイズをバイト単位で設定します

4096

SL_USBD_TA SK_PRIORIT Y

USBDコアタスクの優先度を設定します。これはCMSIS-RTOS2の優先度です。

os優先度高

SL_USBD_A UTO_START _USB_DEVIC E

有効にした場合、カーネルが起動し、1つのUSBDコアタスクが初めてスケジュールされると、USBデバイスが自動的に起動します。無効にした場合、アプリケーションはUSBホストによる検出準備が完了したら、sl_usbd_core_start_device()を呼び出す必要があります。

SL_USBD_C sl_usbd_add_configuration() によって追加される構成の合計数

1

ONFIGURATI 関数。

オンクォンティ

TY

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

8/174

以上view

絶え間ない
SL_USBD _INTERF ACE_QU ANTITY
SL_USBD _ALT_INT ERFACE_ QUANTI
TY
SL_USBD _インターフェース_GR
OUP_QU
アンティティ
SL_USBD _説明
PTOR_Q
信頼性
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY

説明 すべての構成に追加されるUSBインターフェースの総数です。これは使用するクラスによって大きく異なります。クラスインスタンスに必要なインターフェース数の詳細については、クラスの「コアからのリソース必要量」セクションを参照してください。
すべての構成に追加するUSB​​代替インターフェースの総数です。これは使用するクラスによって大きく異なります。この値は常に SL_USBD_INTERFACE_QUANTITY と同等かそれ以上である必要があります。クラスインスタンスに必要な代替インターフェースの数の詳細については、クラスの「コアからのリソース要件」セクションを参照してください。
すべての構成に追加されるUSBインターフェースグループの総数です。これは使用するクラスによって大きく異なります。クラスインスタンスに必要なインターフェースグループの数の詳細については、クラスの「コアからのリソース要件」セクションを参照してください。
すべての構成に追加されるエンドポイント記述子の総数。これは、使用するクラスによって大きく異なります。クラス インスタンスに必要なエンドポイント記述子の数の詳細については、クラスの「コアからのリソースの必要性」セクションの「エンドポイントの数」を参照してください。制御エンドポイントはここで考慮する必要がないことに注意してください。USB 文字列の総数。数量を 0 に設定すると、機能が無効になります。これを無効にすると、デバイスはアプリケーションから渡された USB 記述文字列を保存しなくなります。つまり、ホストは記述文字列 (製造元や製品名など) を取得できなくなります。構成ごとの開いているエンドポイントの総数。デバイスは制御転送用に少なくとも 2 つの開いているエンドポイントを必要としますが、使用するクラスのエンドポイントも追加する必要があります。クラス インスタンスに必要な開いているエンドポイントの数の詳細については、クラスの「コアからのリソースの必要性」セクションの「エンドポイントの数」を参照してください。

デフォルト値
10 10
2
20 30 20

クラス構成
クラスには特定のコンパイル時設定があります。詳細については、USBデバイスクラスを参照してください。
USBデバイス情報の構成

sl_usbd_device_config.h の設定 file コンパイル時の#defineを再グループ化して、ベンダー/製品ID、デバイス文字列など、デバイスに関する基本情報を設定します。以下の表は、この構成で使用できる各情報構成定義について説明しています。 file.

表 – USBデバイス情報構成の定義

絶え間ない
SL_USBD_DEVIC E_ベンダーID
SL_USBD_DEVIC E_製品ID

説明 USB Implementers Forum によって提供されるベンダー識別番号です。ベンダー ID の取得方法の詳細については、http://www.usb.org/developers/vendor/ を参照してください。製品識別番号です。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

9/174

以上view

絶え間ない

説明

SL_USBD_DEVICE_RELEASE デバイスのリリース番号。_NUMBER

SL_USBD_DEVICE_MANUFA デバイスのメーカーを表す文字列。この設定は、

CTURER_STRING

構成 SL_USBD_STRING_QUANTITY が 0 に設定されています。

SL_USBD_DEVICE_PRODUC 製品を説明する文字列。この設定は、設定が

T_文字列

SL_USBD_STRING_QUANTITY は 0 に設定されています。

SL_USBD_DEVICE_SERIAL_N デバイスのシリアル番号を含む文字列。この設定は、

数値文字列

構成 SL_USBD_STRING_QUANTITY が 0 に設定されています。

SL_USBD_DEVICE_LANGUA デバイスの文字列の言語の識別番号。可能な値は次のとおりです。
GE_ID

– SL_USBD_LANG_ID_ARABIC_SAUDI_ARABIA

– SL_USBD_LANG_ID_中国語_台湾

– SL_USBD_LANG_ID_ENGLISH_US

– SL_USBD_LANG_ID_ENGLISH_UK

– SL_USBD_LANG_ID_FRENCH

– SL_USBD_LANG_ID_ドイツ語

– SL_USBD_LANG_ID_GREEK

– SL_USBD_LANG_ID_ITALIAN

– SL_USBD_LANG_ID_ポルトガル語

– SL_USBD_LANG_ID_サンスクリット

構成 SL_USBD_STRING_QUANTITY が 0 に設定されている場合、この構成は無視されます。

USBデバイスのハードウェア構成

使用しているSilicon Labsデバイスによっては、USB VBUS Sense信号用に設定できるGPIOピンとポートがある場合があります。設定定義はsl_usbd_hardware_config.hヘッダーにあります。 file.

絶え間ない
SL_USBD_DRIVER_VBUS_SENSE_ポート SL_USBD_DRIVER_VBUS_SENSE_PIN

説明
ボード上の USB VBUS センス信号用の GPIO ポート。ボード上の USB VBUS センス信号用の GPIO ピン。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

10/174

以上view
以上view
USBデバイスプログラミングガイド
このセクションでは、USB デバイス モジュールの使用方法について説明します。
USBデバイスモジュールの初期設定
このセクションでは、USBデバイスモジュールの初期化、デバイスの追加、準備、起動に必要な基本的な手順について説明します。USBデバイスモジュールの初期化、USBデバイスコアの初期化、クラス(クラス)の初期化、USBデバイスの追加、USBデバイスの構築、構成の追加、USB機能の追加、USBデバイスの起動
イベントフック関数
USBデバイスモジュールの初期化
USBデバイスコアの初期化
a US a まず、関数 sl_usbd_core_init() を呼び出して、B デバイスモジュールコアを初期化します。以下の例は、 sl_usbd_core_init() を呼び出す方法を示しています。
Example – sl_usbd_core_init() を呼び出す
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
クラスの初期化
USBデバイスモジュールコアの初期化が完了したら、使用する各クラスを初期化する必要があります。詳細については、ACL ss(es) の「プログラミングガイド」セクションを参照してください。
USBデバイスの構築
設定の追加
デバイスの初期化が完了したら、新しい設定からUSB機能を追加できます。デバイスには少なくとも1つの設定が必要です。設定を追加するには、sl_usbd_core_dd_configuration()関数を呼び出します。この関数は、追加する設定ごとに呼び出す必要があります。amp以下のコードは、フルスピードを追加する方法を示しています。
Example – デバイスへの設定の追加

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

11/174

以上view

sl_status_t ステータス; uint8_t config_nbr_fs;

/* デバイスにフルスピード構成を追加します。 */

ステータス = sl_usbd_core_add_configuration(0,

/* 構成に特別な属性はありません。 */

100u、

/* 最大消費電力: 100mA。

*/

SL_USBD_DEVICE_SPEED_FULL、

/* フルスピード構成。

*/

「設定追加例ampフルスピード構成」

&config_nbr_fs);

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

USB機能の追加
デバイスに少なくとも1つの構成を追加したら、インターフェースとエンドポイントをデバイスに追加できます。各USBクラスには、インターフェースとエンドポイントのタイプ、数、その他のパラメータに関して独自の要件があります。Silicon Labs USBデバイスは、提供されているクラスにインターフェースとエンドポイントを追加します。
アプリケーションからUSBクラスをインスタンス化し、構成に追加できます。USBデバイスクラスインスタンスの概念の詳細については、「USBデバイスクラス」を参照してください。複数の異なるクラスインスタンスをインスタンス化して構成に追加することで、多機能(複合)デバイスを作成できます。
元amp以下の例は、クラス インスタンスを作成して構成に追加する方法を示しています。
Example – デバイスにクラスインスタンスを追加する

sl_status_t ステータス; uint8_t クラス番号;
/* 使用したいクラスのインスタンスを作成します。*/ /* クラスによっては、この関数にさらに引数が与えられる場合があることに注意してください。 */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }
/* クラスインスタンスをフルスピード構成に追加します。 */ status = sl_usbd_ _add_to_configuration(class_nbr, /* sl_usbd_ によって返されるクラス番号_create_instance。*/
config_nbr_fs); /* sl_usbd_core_add_configuration() によって返される構成番号。 */ if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }
USBデバイスの起動
デフォルトでは、デバイスの初期化が完了しカーネルが起動した後、USBデバイスコアタスクによってデバイスが自動的に起動されます。デバイスの起動タイミングとUSBホストからの表示を制御するには、設定定義 SL_USBD_AUTO_START_USB_DEVICE を使用して自動起動機能を無効にしてください。無効にした場合、デバイスのビルド/準備が完了したら、関数 sl_usbd_core_start_device() を呼び出すことでデバイスを起動し、USBホストから表示できるようになります。
元amp以下のコードは、sl_usbd_core_start_device() 関数を使用してデバイスを起動する方法を示しています。
Example – デバイスの起動

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

12/174

以上view

sl_status_t ステータス;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }

イベントフック関数
USBデバイスコアモジュールには、アプリケーション内で再定義できる2つの弱いフック関数が用意されています。これらの関数は、バスイベントと構成イベントの発生を通知することを目的としています。
表 – USBイベントフック関数

イベント

説明

バス

USBバスイベントが発生したときに呼び出されます

USB構成イベントが発生したときに呼び出される構成

関数シグネチャ
void sl_usbd_on_bus_event(sl_usbd_bus_event_t イベント); void sl_usbd_on_config_event(sl_usbd_config_event_t イベント、uint8_t config_nbr);

Example – イベントフック関数

void sl_usbd_on_bus_event(sl_usbd_bus_event_t event) { スイッチ (イベント) { case SL_USBD_EVENT_BUS_CONNECT:
// USB ケーブルがホスト コントローラーに挿入されたときに呼び出されます break;
case SL_USBD_EVENT_BUS_DISCONNECT: // USB ケーブルがホスト コントローラーから取り外されたときに呼び出されます break;
case SL_USBD_EVENT_BUS_RESET: // ホストがリセット コマンドを送信したときに呼び出されます break;
case SL_USBD_EVENT_BUS_SUSPEND: // ホストがサスペンド コマンド break を送信したときに呼び出されます。
case SL_USBD_EVENT_BUS_RESUME: // ホストがウェイクアップ コマンドを送信したときに呼び出されます break;
デフォルト: break; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t event, uint8_t config_nbr) { スイッチ(イベント) { case SL_USBD_EVENT_CONFIG_SET:
// ホストが構成ブレークを設定したときに呼び出されます。
case SL_USBD_EVENT_CONFIG_UNSET: // 構成が設定解除されたときに呼び出されます break;
デフォルト: break; } }

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

13/174

以上view

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

14/174

以上view
以上view

USBデバイスクラス

Silicon Labs USBデバイスで利用可能なUSBクラスには、いくつかの共通の特性があります。このセクションでは、これらの特性とコア層との相互作用について説明します。
特定のクラスの詳細については、以下を参照してください。
CDC ACM クラス HID クラス MSC SCSI クラス ベンダー クラス
クラスインスタンスについて
USBデバイスで利用可能なUSBクラスは、クラスインスタンスの概念を実装しています。クラスインスタンスは、デバイス内の1つの機能を表します。機能は1つのインターフェースまたはインターフェースのグループによって記述され、特定のクラスに属します。
各USBクラス実装には、クラスインスタンスの概念に基づいて、いくつかの共通設定と機能があります。共通の設定と機能は、以下の表に示されています。「定数または関数」列のプレースホルダーXXXXは、クラス名(CDC、HID、MSC、CDC_ACM、またはVENDOR(関数名の場合はベンダー))に置き換えることができます。
表 – 複数のクラスインスタンスの概念に関連する定数と関数

定数または関数
SL_USBD_XXXX_CL アセンブリ挿入数量
SL_USBD_XXXX_CONFIGUR ATION_QUANTITY
sl_usb d _XXXX_cre ate _instance()
sl_usbd_XXXX_add_to_conf 関数()

説明
クラス インスタンスの最大数を設定します。
構成の最大数を設定します。クラスの初期化中に、作成されたクラスインスタンスが1つ以上の構成に追加されます。新しいクラスインスタンスを作成します。
指定されたデバイス構成に既存のクラス インスタンスを追加します。

コード実装の観点から言えば、クラスはクラス制御構造を含むローカルグローバル変数を宣言します。このクラス制御構造は1つのクラスインスタンスに関連付けられ、クラスインスタンスを管理するための特定の情報を保持します。
以下の図はいくつかのケースシナリオを示しています。各図にはコード例が含まれています。ampケースシナリオに対応するle。
図 – 複数のクラスインスタンス – FSデバイス(1つの構成と1つのインターフェース)は、典型的なUSBデバイスを表しています。このデバイスはフルスピード(FS)で、単一の構成を持ちます。デバイスの機能は、データ通信用の一対のエンドポイントで構成される1つのインターフェースによって記述されます。1つのクラスインスタンスが作成され、これを使用して、関連付けられたエンドポイントを含むインターフェース全体を管理できます。
図 – 複数のクラスインスタンス – 1 つのインターフェースを持つ FS デバイス 1 構成

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

15/174

以上view

図 – 複数のクラスインスタンス – FSデバイス(1つの構成と1つのインターフェース)に対応するコードは、次のようになります。amp下記をご覧ください。
Example – 複数のクラスインスタンス – 1つのインターフェースを持つFSデバイス1構成)

sl_status_t ステータス; uint8_t class_0;

void app_usbd_XXXX_enable(uint8_t class_nbr) { /* クラス有効化イベントを処理します。 */ }

void app_usbd_XXXX_disable(uint8_t class_nbr) { /* クラス無効化イベントを処理します。 */ }

sl_usbd_XXXX_callbacks_t クラスコールバック = {

(1)

.enable = app_usbd_XXXX_enable、

.disable = app_usbd_XXXX_disable

};

ステータス = sl_usbd_XXXX_init();

(1)

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

ステータス = sl_usbd_XXXX_create_instance(&class_callbacks,

(1)

&class_0);

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

ステータス = sl_usbd_XXXX_add_to_configuration(class_0、config_0);

(1)

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

(1) 各クラスは、デバイスの接続/切断イベントとクラス固有のイベントに対応するコールバック関数のセットを提供します。コールバック構造体オブジェクトは、sl_usbd_XXXX_create_instance() でクラスインスタンスを作成する際に引数として渡されます。
関数。
(1) クラスを初期化します。すべての内部変数、構造体、クラスポートが初期化されます。一部のクラスでは、Init() 関数が他の引数を取る場合があることに注意してください。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

16/174

以上view
(2) クラスインスタンス class_0 を作成します。関数 sl_usbd_XXXX_create_instance() は、 class_0 に関連付けられたクラス制御構造体を割り当てます。クラスによっては、 sl_usbd_XXXX_create_instance() には、クラス番号の他に、クラス制御構造体に格納されているクラス固有の情報を表す追加のパラメータが含まれる場合があります。aaa (3) クラスインスタンス class_0 を、指定された構成番号 config_0 に追加します。sl_usbd_XXXX_add_to_configuration() は、インターフェース 0 とそれに関連付けられた IN および OUT エンドポイントを作成します。その結果、クラスインスタンスはインターフェース 0 とそのエンドポイントを包含します。インターフェース 0 で行われる通信はすべて、クラスインスタンス番号 class_0 を使用します。図 – 複数のクラスインスタンス – FS デバイス (2 つの構成と複数のインターフェース) は、より複雑な例を表しています。ampフルスピードデバイスは2つの構成から構成されます。デバイスは同じクラスに属する2つの機能を持ちますが、それぞれの機能は2つのインターフェースで記述され、双方向エンドポイントのペアを持ちます。この例ではamp2つのクラスインスタンスが作成されます。各クラスインスタンスは、複数のインターフェースのグループに関連付けられます。これは、図 – 複数のクラスインスタンス – FSデバイス(1つの構成と1つのインターフェース)および図 – 複数のクラスインスタンス – FSデバイス(2つの構成と複数のインターフェース)ではクラスインスタンスが1つのインターフェースに関連付けられていたのとは対照的です。
図 – 複数のクラスインスタンス – FSデバイス2構成と複数のインターフェース

図 – 複数のクラスインスタンス – FSデバイス(2つの構成と複数のインターフェース)に対応するコードは、次のようになります。amp以下にエラー処理を示します。わかりやすくするためにエラー処理は省略されています。
Example – 複数のクラスインスタンス – FSデバイス2構成と複数のインターフェース)

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

17/174

以上view

sl_status_t ステータス; uint8_t クラス_0; uint8_t クラス_1;
ステータス = sl_usbd_XXXX_init();
ステータス = sl_usbd_XXXX_create_instance(&class_0); ステータス = sl_usbd_XXXX_create_instance(&class_1);
ステータス = sl_usbd_XXXX_add_to_configuration(class_0, cfg_0); ステータス = sl_usbd_XXXX_add_to_configuration(class_1, cfg_0);
ステータス = sl_usbd_XXXX_add_to_configuration(class_0, cfg_1); ステータス = sl_usbd_XXXX_add_to_configuration(class_1, cfg_1);

(1)
(11) (10)
(11) (10)
(11) (10)

(1)クラスを初期化します。内部変数、構造体、クラスポートはすべて初期化されます。
(2) クラスインスタンス class_0 を作成する。関数 sl_usbd_XXXX_create_instance() は、 class_0 に関連付けられたクラス制御構造体を割り当てる。
(3) クラスインスタンス class_1 を作成する。関数 sl_usbd_XXXX_create_instance() は、 class_1 に関連付けられた別のクラス制御構造体を割り当てる。
(4) クラスインスタンス class_0 を設定ファイル cfg_0 に追加します。sl_usbd_XXXX_add_to_configuration() は、インターフェース0、インターフェース1、代替インターフェース、および関連するINエンドポイントとOUTエンドポイントを作成します。クラスインスタンス番号 class_0 は、インターフェース0またはインターフェース1上のすべてのデータ通信に使用されます。
(5) クラスインスタンス class_1 を設定ファイル cfg_0 に追加します。sl_usbd_XXXX_add_to_configuration() は、インターフェース2、インターフェース3、およびそれらに関連するINエンドポイントとOUTエンドポイントを作成します。クラスインスタンス番号 class_1 は、インターフェース2またはインターフェース3上のすべてのデータ通信に使用されます。
(6)同じクラスインスタンスclass_0とclass_1を他の構成cfg_1に追加します。
すべてのクラスは sl_usbd_XXXX_callbacks_t 型の構造体を定義します。この構造体の目的は、イベント発生時に呼び出されるコールバック関数のセットを各クラスに提供することです。各クラスには2つのコールバック関数が存在します。これらの関数は以下の表に示されています。
表 – 共通クラスのコールバック関数

フィールド 説明 .enable USB クラス インスタンスが正常に有効化されたときに呼び出されます。 .disable USB クラス インスタンスが無効化されたときに呼び出されます。

関数シグネチャ void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

18/174

以上view
以上view
USBデバイスCDC ACMクラス
USBデバイスCDC基本クラス終了view USBデバイスCDC ACMクラスコアUSBデバイスCDC ACMサブクラスからのリソースニーズオーバーview USBデバイスCDC ACMクラス構成USBデバイスCDC ACMクラスプログラミングガイド
このセクションでは、Silicon Labs の USB デバイススタックでサポートされている通信デバイスクラス (CDC) クラスと、関連する CDC サブクラスについて説明します。Silicon Labs USB デバイスは現在、シリアルエミュレーションで一般的に使用される抽象制御モデル (ACM) サブクラスをサポートしています。
CDCには、様々な通信機器およびネットワーク機器が含まれます。通信機器には、アナログモデム、アナログおよびデジタル電話、ISDNターミナルアダプタなどが含まれます。例えば、amp例えば、ネットワークデバイスには、ADSLモデムやケーブルモデム、イーサネットアダプタ、ハブなどが含まれます。CDCは、V.250(電話回線経由のモデム用)やイーサネット(ローカルエリアネットワークデバイス用)といった既存の通信サービス規格をUSBリンクでカプセル化するフレームワークを定義しています。通信デバイスは、デバイス管理、必要に応じて通話管理、そしてデータ転送を担います。
CDCは7つの主要なデバイスグループを定義しています。各グループは通信モデルに属し、通信モデルには複数のサブクラスが含まれる場合があります。各デバイスグループには、CDC基本クラスに加えて独自の仕様書があります。7つのグループは以下のとおりです。
公衆交換電話網(PSTN)デバイスには、音声帯域モデム、電話機、シリアルエミュレーションデバイスが含まれます。総合デジタル通信網(ISDN)デバイスには、ターミナルアダプタと電話機が含まれます。イーサネット制御モデル(ECM)デバイスには、IEEE 802ファミリをサポートするデバイス(例:ケーブルモデム、ADSLモデム、WiFiアダプタ)が含まれます。非同期転送モード(ATM)デバイスには、ADSLモデムおよびATMネットワークに接続されたその他のデバイス(ワークステーション、ルータ、LANスイッチ)が含まれます。ワイヤレスモバイル通信(WMC)デバイスには、音声およびデータ通信の管理に使用される多機能通信ハンドセットデバイスが含まれます。イーサネットフレームデータを交換するイーサネットエミュレーションモデル(EEM)デバイス。ネットワーク制御モデル(NCM)デバイスには、高速ネットワークデバイス(高速パケットアクセスモデム、回線端末装置)が含まれます。
CDC および関連するサブクラスの実装は、次の仕様に準拠しています。
ユニバーサル シリアル バス、通信デバイスのクラス定義、リビジョン 1.2、2010 年 11 月 3 日。ユニバーサル シリアル バス、通信、PSTN デバイスのサブクラス、リビジョン 1.2、2007 年 2 月 9 日。
USBデバイスCDC基本クラス終了view
CDC デバイスは、通信機能を実装するために次のインターフェイスで構成されています。
コミュニケーションクラスインターフェース(CCI)は、デバイス管理とオプションで通話管理を担当します。
デバイス管理は、デバイスの一般的な設定と制御、およびホストへのイベント通知を可能にします。コール管理は、コールの確立と終了を可能にします。コール管理は、DCIを介して多重化される場合があります。CCIはすべてのCDCデバイスに必須です。CCIは、CDCデバイスがサポートする通信モデルを指定することにより、CDC機能を識別します。CCIに続くインターフェースは、オーディオなどの定義済みのUSBクラスインターフェース、またはベンダー固有のインターフェースにすることができます。ベンダー固有のインターフェースは、DCIによって具体的に表されます。
データクラスインターフェース(DCI)はデータ伝送を担います。送受信されるデータは特定の規格に従わず、
フォーマット。データは、通信回線からの生データ、独自フォーマットに従ったデータなどです。CCI に続くすべての DCI は、従属インターフェースと見なすことができます。
CDCデバイスは、少なくとも1つのCCIと0個以上のDCIを持つ必要があります。1つのCCIと任意の従属DCIの組み合わせは、ホストに機能を提供します。この機能はファンクションとも呼ばれます。CDC複合デバイスでは、複数のCCIを持つことができます。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

19/174

以上view
機能。したがって、デバイスは図「CDC複合デバイス」に示すように、複数のCCIとDCIのセットから構成されます。
図 – CDC複合デバイス

CDC デバイスでは、次のようなエンドポイントの組み合わせが使用される可能性があります。
デフォルトエンドポイントと呼ばれる制御INエンドポイントと制御OUTエンドポイントのペア。オプションのバルクまたは割り込みINエンドポイント。バルクまたはアイソクロナスINエンドポイントとアイソクロナスOUTエンドポイントのペア。なお、Silicon Labs USBデバイススタックは現在、アイソクロナスエンドポイントをサポートしていません。
以下の表は、さまざまなエンドポイントの使用法と、それらが使用される CDC のインターフェースを示しています。
表 – CDCエンドポイントの使用状況

終点
コントロールIN
コントロールアウト
割り込みまたはバルクIN バルクまたはアイソクロナスIN バルクまたはアイソクロナス

方向
デバイスからホストへ
ホストからデバイスへ
デバイスからホストへ
デバイスからホストへ
ホストからデバイスへ

インターフェイスの使用法

CCI

列挙の標準リクエスト、クラス固有のリクエスト、デバイス

管理、およびオプションで通話管理。

CCI

列挙の標準リクエスト、クラス固有のリクエスト、デバイス

管理、およびオプションで通話管理。

CCI

リング検出、シリアル回線ステータス、ネットワーク ステータスなどのイベント通知。

ダイナミクス

生データまたはフォーマットされたデータ通信。

ダイナミクス

生データまたはフォーマットされたデータ通信。

ほとんどの通信デバイスは、割り込みエンドポイントを使用してホストにイベントを通知します。USBプロトコルエラー発生時にデータの再送信を必要とする独自プロトコルの場合、アイソクロナスエンドポイントをデータ転送に使用すべきではありません。アイソクロナス通信には再試行メカニズムがないため、本質的にデータが失われる可能性があります。
7つの主要な通信モデルには、複数のサブクラスが含まれます。サブクラスは、デバイスがCCIを使用してデバイス管理と通話管理を行う方法を記述します。以下の表は、考えられるすべてのサブクラスと、それらが属する通信モデルを示しています。
表 – CDCサブクラス

サブクラス
直接制御モデル 抽象制御モデル

コミュニケーションモデル
公衆回線
公衆回線

Exampこのサブクラスを使用するデバイスの一覧
USBホストによって直接制御されるモデムデバイス
シリアルエミュレーションデバイス、シリアルコマンドセットを通じて制御されるモデムデバイス

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

20/174

以上view

サブクラス

コミュニケーションモデル

Exampこのサブクラスを使用するデバイスの一覧

電話制御モデル

公衆回線

マルチチャネル制御ISDNモデル

CAPI制御モデルISDN

イーサネットネットワークECM制御モデル

ATMネットワーク

ATM

制御モデル

ワイヤレスハンドセット制御モデル

ウィメンズ

デバイス管理 WMC

モバイルダイレクトラインモデル

ウィメンズ

OBEX

ウィメンズ

イーサネットエミュレーションEEMモデル

ネットワーク制御モデル

NCM

音声電話機器
基本速度端末アダプタ、一次速度端末アダプタ、電話
基本速度ターミナルアダプタ、一次速度ターミナルアダプタ、電話機、DOC-SISケーブルモデム、PPPoEエミュレーションをサポートするADSLモデム、Wi-Fiアダプタ(IEEE 802.11ファミリ)、IEEE 802.3アダプタ、ADSLモデム
無線機器に接続する携帯端末機器
無線機器に接続する携帯端末機器 無線機器に接続する携帯端末機器
無線デバイスに接続するモバイル端末機器。イーサネットフレームを次のトランスポート層として使用するデバイス。ルーティングやインターネット接続デバイスには適していません。ネットワーク上で高速データ帯域幅を伝送するIEEE 802.3アダプタ。

USBデバイスCDC ACMクラスコアからのリソースニーズ

関数 sl_usbd_cdc_acm_add_to_configuration() を呼び出して CDC ACM クラス インスタンスを USB 構成に追加するたびに、コアから次のリソースが割り当てられます。

リソース
インターフェース 代替インターフェース エンドポイント インターフェースグループ


2 2 3 1

これらの数値は構成ごとに異なることに注意してください。SL_USBD_INTERFACE_QUANTITY、SL_USBD_ALT_INTERFACE_QUANTITY、SL_USBD_INTERFACE_GROUP_QUANTITY、SL_USBD_DESCRIPTOR_QUANTITY の各構成値を設定する際は、クラスに追加される構成の数を考慮することを忘れないでください。SL_USBD_OPEN_ENDPOINTS_QUANTITY 構成値については、エンドポイントはホストによって構成が設定された場合にのみ開かれるため、クラスインスタンスに必要なエンドポイントの数のみを考慮する必要があります。
USBデバイスCDC ACMサブクラス終了view

CDC基本クラスは、通信クラスインターフェイス(CCI)とデータクラスインターフェイス(DCI)で構成されています。これについては、USBデバイスCDC基本クラスの概要で詳しく説明されています。view このセクションでは、ACMタイプのCCIについて説明します。ACMタイプは、管理要素用のデフォルトエンドポイントと通知要素用の割り込みエンドポイントで構成されます。DCIを介して不特定のデータを伝送するために、一対のバルクエンドポイントが使用されます。
ACM サブクラスは、次の 2 種類の通信デバイスで使用されます。
ATコマンドをサポートするデバイス(例:ボイスバンドモデム)。シリアルエミュレーションデバイス(仮想COMポートデバイスとも呼ばれます)。
ACMサブクラスには、サブクラス固有のリクエストがいくつかあります。これらを使用することで、デバイスの制御と設定を行うことができます。すべてのACMリクエストの完全なリストと説明は、仕様書に記載されています。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

21/174

以上view PSTN デバイスのサブクラス、リビジョン 1.2、2007 年 2 月 9 日、セクション 6.2.2。
このリストから、Silicon Labs9 ACM サブクラスは以下をサポートします。
表 – Silicon Labs がサポートする ACM リクエスト

サブクラスリクエストの説明

通信機能の設定、通信機能の取得、通信機能のクリア

ホストは、特定の通信機能の設定を制御するためにこの要求を送信します。シリアルエミュレーションには使用されません。
ホストは、特定の通信機能の現在の設定を取得するためにこの要求を送信します。シリアルエミュレーションでは使用されません。
ホストは、特定の通信機能の設定をクリアするためにこの要求を送信します。シリアルエミュレーションでは使用されません。

ラインコーディングの設定

ホストは、ACMデバイスの設定(ボーレート、ストップビット数、パリティタイプ、データビット数)を行うためにこの要求を送信します。シリアルエミュレーションの場合、この要求は、開いている仮想COMポートのシリアル設定を行うたびに、シリアル端末によって自動的に送信されます。

ラインコーディングの取得

ホストは、現在のACM設定(ボーレート、ストップビット、パリティ、データビット)を取得するためにこの要求を送信します。シリアルエミュレーションの場合、シリアル端末は仮想COMポートを開く際にこの要求を自動的に送信します。

SetControlLineState ホストは、半二重モデムのキャリアを制御し、データ端末装置(DTE)の準備状態を示すためにこの要求を送信します。シリアルエミュレーションの場合、DTEはシリアル端末です。シリアルエミュレーションでは、特定のシリアル端末から制御を設定した状態でこの要求を送信できます。

セットブレーク

ホストはRS-232形式のブレークを生成するためにこの要求を送信します。シリアルエミュレーションの場合、特定のシリアル端末からこの要求を送信できます。

Silicon Labs9 ACMサブクラスは、割り込みINエンドポイントを使用して、現在のシリアルラインの状態をホストに通知します。シリアル
ライン ステートとは、ホストに次の情報を通知するビットマップです。

オーバーランにより破棄されたデータ パリティエラー フレーミングエラー リング信号検出の状態 ブレーク検出機構の状態 送信キャリアの状態 受信キャリア検出の状態

Silicon Labs9 ACM サブクラスの実装は、次の仕様に準拠しています。
ユニバーサル シリアル バス、通信、PSTN デバイスのサブクラス、リビジョン 1.2、2007 年 2 月 9 日。
USBデバイスCDC ACMクラス構成

このセクションでは、CDC ACMクラス(通信デバイスクラス、抽象制御モデル)の設定​​方法について説明します。設定パラメータは2つのグループに分かれています。
USBデバイスCDC ACMクラスアプリケーション固有の構成USBデバイスCDC ACMクラスインスタンス構成
USBデバイスCDC ACMクラスアプリケーション固有の構成

CDC 基本クラス ACM サブクラス
CDC 基本クラス

まず、Silicon Labs USBデバイスCDCクラスモジュールを使用するには、CDCコンパイル時設定#defineをアプリケーションのニーズに合わせて調整する必要があります。これらはsl_usbd_core_config.hヘッダー内にまとめられています。 file CDCセクションの下にあります。これらの目的は、USBデバイスモジュールに割り当てるUSB CDCオブジェクトの数を通知することです。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

22/174

以上view

以下の表では、この構成構造で使用可能な各構成フィールドについて説明します。
表 – USBデバイスCDC構成の定義

構成名
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONFIGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY

説明
関数の呼び出しによって割り当てられるクラスインスタンスの数
sl_usbd_cdc_acm_create_instance() 。
構成の数。ACM クラス インスタンスは、 sl_usbd_cdc_acm_add_to_configuration() を介して 1 つ以上の aaaa 構成に追加できます。
すべてのCDC関数のデータインターフェース(DCI)の総数。各CDC ACM関数は、関数sl_usbd_cdc_acm_create_instance()にデータインターフェースを追加します。

デフォルト値
2
1
2

ACMサブクラス
ACM サブクラスには、次の表に示す 1 つのコンパイル時構成があります。
表 – USBデバイスCDC ACM構成定義

構成名
SL_USBD_CDC_ACM_SUBCL ASS_I NSTANCE_QUANTITY

説明
呼び出しによって割り当てるサブクラスインスタンスの数を設定します。
関数 sl_usbd_cdc_acm_create_instance() 。

デフォルト値
2

USBデバイスCDC ACMクラスインスタンス構成

このセクションでは、CDC ACMシリアルクラスインスタンスに関連する設定を定義します。クラスインスタンスの作成、ライン状態、間隔、コール管理機能、p_acm_callbacks
クラスインスタンスの作成

CDC ACM シリアルクラス インスタンスを作成するには、関数 sl_usbd_cdc_acm_create_instance() を呼び出します。この関数は、ここで説明するように 3 つの構成引数を持ちます。

ラインステート間隔
これは、CDC ACM シリアル クラス インスタンスがライン状態通知を TAA ホストに報告する間隔 (ミリ秒単位) です。この値は 2 の累乗 (1、2、4、8、16 など) である必要があります。

通話管理機能
通話管理機能ビットマップ。ビットマップの可能な値は次のとおりです。

値(ビット)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI _DCI

説明
デバイスは通話管理を自ら処理します。デバイスはデータクラスインターフェースを介して通話管理情報を送受信できます。

p_acm_コールバック

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

23/174

以上view

aa M aa p_acm_callbacks は、 sl_usbd_cdc_acm_callbacks_t 型の構造体へのポインタです。この構造体の目的は、CDC ACMイベント発生時に呼び出されるコールバック関数のセットをCDC AC Cl ssに渡すことです。すべてのコールバックが必須というわけではなく、コールバックが不要な場合は、 callbacks 構造体変数にヌルポインタ( NULL )を渡すこともできます。以下の表は、この構成構造体で使用可能な各構成フィールドについて説明しています。
表 – sl_usbd_cdc_acm _callbacks_t 構成構造

フィールド

説明

。有効にする

USBクラスインスタンスが有効なときに呼び出されます

成功しました。

.無効にする

USB クラス インスタンスが無効になっているときに呼び出されます。

.line_control_changed ライン制御の変更を受信したときに呼び出されます。

line_coding_changed ライン コーディングの変更を受信したときに呼び出されます。

関数シグネチャ
void app_usbd_cdc_acm_enable(uint8_t サブクラス_nbr);
void app_usbd_cdc_acm_disable(uint8_t サブクラス_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t subclass_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t subclass_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*p_line_coding

コールバック関数については、イベント通知コールバックの登録のセクションを参照してください。例:ampル。
USBデバイスCDC ACMクラスプログラミングガイド

このセクションでは、CDC抽象制御モデルクラスの使い方について説明します。USBデバイスCDC ACMクラスの初期化、USBデバイスCDC ACMクラスインスタンスのデバイスへの追加、CDC ACMクラスを使用した通信
USBデバイスCDC ACMクラスの初期化

CDC ACMクラスの機能をデバイスに追加するには、まず関数sl_usbd_cdc_init()とsl_usbd_cdc_acm_init()を呼び出して、CDC基本クラスとACMサブクラスを初期化する必要があります。以下の例は、デフォルトの引数を使用してsl_usbd_cdc_init()とsl_usbd_cdc_acm_init()を呼び出す方法を示しています。

Example – CDC ACMクラスの初期化

sl_status_t ステータス;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
USBデバイスCDC ACMクラスインスタンスをデバイスに追加する
デバイスに CDC ACM クラス機能を追加するには、インスタンスを作成し、それをデバイスの構成に追加する必要があります。
CDC ACMクラスインスタンスの作成

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

24/174

以上view
CDC ACMクラスインスタンスをデバイスの構成に追加するイベント通知コールバックを登録する
CDC ACMクラスインスタンスの作成
aa M aaa 関数 sl_usbd_cdc_acm_create_instance() を呼び出して CDC AC クラスインスタンスを作成します。 T aaa M aaa 以下の例は、 sl_usbd_cdc_acm_create_instance() によって CDC AC クラスインスタンスを作成する方法を示しています。
Example – sl_usbd_cdc_acm_create_instance() による CDC ACM 関数の作成

uint8_t サブクラス番号; sl_status_t ステータス;
ステータス = sl_usbd_cdc_acm_create_instance(64u、SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV、NULL、&subclass_nbr);
if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
CDC ACM クラスインスタンスをデバイスの構成に追加する
CDC ACMクラスのインスタンスを作成したら、関数を呼び出して構成に追加できます。
sl_usbd_cdc_acm_add_to_configuration() 。
以下の例は、 sl_usbd_cdc_acm_add_to_configuration() を呼び出す方法を示しています。
Example – USBD ACM sl_usbd_cdc_acm_add_to_configuration() を呼び出す

sl_status_t ステータス;

ステータス = sl_usbd_cdc_acm_add_to_configuration(サブクラス番号、

(1)

config_nbr_fs);

(1)

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

aaa (1) sl_usbd_cdc_acm_create_instance() によって返された構成に追加するクラス番号。 (2) 構成番号(ここではフルスピード構成に追加します)。
イベント通知コールバックの登録
CDC ACM Serialクラスは、通知コールバック関数を介して、ライン制御またはコーディングの変更をアプリケーションに通知できます。コールバック関数構造体は、ACMインスタンス作成時に引数として渡すことができます。これらのコールバックはオプションであることに注意してください。例:ample – CDC ACMコールバック登録は、コールバック登録関数の使用方法を示しています。例ample – CDC ACMコールバック実装は例を示していますampコールバック関数の実装ファイル。
Example – CDC ACMコールバック登録

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

25/174

以上view

uint8_t サブクラス番号; sl_status_t ステータス;
sl_usbd_cdc_acm_callbacks_t sli_usbd_cdc_acm_callbacks = { app_usbd_cdc_acm_connect、 app_usbd_cdc_acm_disconnect、 app_usbd_cdc_acm_line_control_changed、 app_usbd_cdc_acm_line_coding_changed、 };
ステータス = sl_usbd_cdc_acm_create_instance(64u、SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV、&sli_usbd_cdc_acm_callbacks、&subclass_nbr);
if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }
Example – CDC ACMコールバック実装

bool app_usbd_cdc_acm_line_coding_changed (uint8_t

サブクラス番号、

sl_usbd_cdc_acm_line_coding_t *p_line_coding)

{

uint32_t ボーレート_new;

uint8_t パリティ新;

uint8_t ストップビット_new;

uint8_t データビット_new;

/* TODO 改行コードを適用します。*/ 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;

戻り値 (true);

(1)

}

void app_usbd_cdc_acm_line_control_changed (uint8_t サブクラス番号、uint8_t イベント、uint8_t イベント_変更)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;

/* TODO 改行制御を適用します。 */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}

(1) ラインコーディングの適用に失敗した場合は、この関数にfalseを返すことが重要です。それ以外の場合はtrueを返します。
CDC ACMクラスを使用したコミュニケーション
シリアルステータス
ラインコーディングラインコントロール

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

26/174

以上view

ラインステートサブクラスインスタンス通信
シリアルステータス
ラインコーディング
USBホストは、CDC ACMデバイスのラインコーディング(ボーレート、パリティなど)を制御します。必要に応じて、アプリケーションがラインコーディングを設定します。現在のラインコーディングを取得および設定するための関数が2つ用意されており、以下の表に示します。
表 – CDC ACMラインコーディング関数

関数
sl_usbd_cdc_acm_g e t_line _coding()
sl_usbd_cdc_acm_s e t_line _coding()

説明
アプリケーションは、SetLineCoding 要求または関数 sl_usbd_cdc_acm_set_line_coding() を使用して、ホストから現在のライン コーディング設定を取得できます。
アプリケーションはラインコーディングを設定できます。ホストはGetLineCodingリクエストを使用して設定を取得できます。

ラインコントロール
USBホストは、CDC ACMデバイスのライン制御(RTSピン、DTRピン、ブレーク信号など)を制御します。必要に応じて、アプリケーション側でライン制御を適用する必要があります。現在のライン制御を取得および設定するための関数が用意されており、以下の表で説明されています。
表 – CDC ACMライン制御機能

関数
sl_usb d _cd c_acm_g e t_line _control_state()

アプリケーションは、SetControlLineState 要求を使用して、ホストによって設定された現在の制御ラインの状態を取得できます。

回線状態
USBホストは定期的にラインステートを取得します。アプリケーションは、ラインステートが変化するたびに更新する必要があります。必要に応じて、アプリケーションはラインステートを設定する必要があります。現在のラインコントロールを取得および設定するための2つの関数が提供されています。以下の表にその概要を示します。
表 – CDC ACM ラインステート関数

関数
sl_usb d _cd c_acm_se t _line _state _e ve nt()
sl_usbd_cdc_acm_cle ar_line _state _e ve nt()

アプリケーションは任意のラインステートイベントを設定できます。ラインステートの設定中、シリアルラインステートの変化を通知する割り込みIN転送がホストに送信されます。
アプリケーションは、ラインステートの2つのイベント(送信キャリアと受信キャリア検出)をクリアできます。その他のイベントはすべて、ACMシリアルエミュレーションサブクラスによって自動的にクリアされます。

サブクラスインスタンス通信

Silicon LabsのACMサブクラスは、ホストとの通信に以下の関数を提供します。functions9パラメータの詳細については、CDC ACMサブクラス関数リファレンスをご覧ください。

関数名
sl_usb d _cd c_acm_ 読み取り() sl_usb d _cd c_acm_書き込み()

手術
バルクOUTエンドポイントを介してホストからデータを受信します。この関数はブロッキングします。バルクINエンドポイントを介してホストにデータを送信します。この関数はブロッキングします。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

27/174

以上view

表 – CDC ACM通信APIの概要 aaaaa sl_usbd_cdc_acm_read()とsl_usbd_cdc_acm_write()は同期通信を提供します。これは転送がブロックされていることを意味します。つまり、関数を呼び出すと、アプリケーションは転送が完了するまで(エラーの有無にかかわらず)ブロックされます。タイムアウトを指定することで、永久に待機することを避けることができます。amp下の図は、読み取りと書き込みの例を示していますampバルク OUT エンドポイントを使用してホストからデータを受信し、バルク IN エンドポイントを使用してホストにデータを送信するファイル。
リスト – シリアル読み取りおよび書き込み例ample

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

状態;

ステータス = sl_usbd_cdc_acm_read(サブクラス_nbr,

(1)

rx_buf、

(1)

2u、

0u、

(1)

&xfer_len);

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

ステータス = sl_usbd_cdc_acm_write(サブクラス_nbr,

(1)

tx_buf、

(1)

2u、

0u、

(1)

&xfer_len);

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

T aaaaa M (1) sl_usbd_cdc_acm_create_instance() で作成されたクラスインスタンス番号は、適切なバルクOUTまたはINエンドポイントへの転送をルーティングするためのACサブクラスへの内部参照を提供します。(2) アプリケーションは、関数に提供されるバッファがすべてのデータを収容するのに十分な大きさであることを確認する必要があります。そうでない場合、同期の問題が発生する可能性があります。(3) 無限ブロッキング状態を回避するには、タイムアウトをミリ秒単位で指定します。値809を指定すると、アプリケーションタスクは永久に待機します。(4) アプリケーションは初期化された送信バッファを提供します。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

28/174

以上view
以上view

USBデバイスHIDクラス

USBデバイスHIDクラスオーバーview USBデバイスHIDクラス コアからのリソースニーズ USBデバイスHIDクラス構成 USBデバイスHIDクラスプログラミングガイド HID定期入力レポートタスク
このセクションでは、Silicon Labs USB デバイスでサポートされているヒューマン インターフェイス デバイス (HID) クラスについて説明します。
HID クラスには、キーボード、マウス、ポインティング デバイス、ゲーム デバイスなど、コンピューターの操作を制御するために人間が使用するデバイスが含まれます。
HIDクラスは、ノブ、スイッチ、ボタン、スライダーなどのコントロールを含む複合デバイスでも使用できます。例えば、ampオーディオヘッドセットのオーディオ、ミュート、音量コントロールは、ヘッドセットのHID機能によって制御されます。HIDクラスは、制御転送と割り込み転送のみを使用して、あらゆる目的でデータを交換できます。
HIDクラスは、最も古く、最も広く使用されているUSBクラスの1つです。主要なホストオペレーティングシステムはすべて、HIDデバイスを管理するためのネイティブドライバーを提供しているため、ベンダー固有の様々なデバイスがHIDクラスで動作します。このクラスには、LED、オーディオ、触覚フィードバックなど、様々な出力項目も含まれています。
HID 実装は次の仕様に準拠しています。
ヒューマンインターフェースデバイス(HID)のデバイスクラス定義、01年6月27日、バージョン1.11。ユニバーサルシリアルバスHID使用表、2004年10月28日、バージョン1.12。
USBデバイスHIDクラスオーバーview
以上view
HID デバイスは次のエンドポイントで構成されます。
デフォルトエンドポイントと呼ばれる制御INエンドポイントとOUTエンドポイントのペア、割り込みINエンドポイント、オプションの割り込みOUTエンドポイント
以下の表は、さまざまなエンドポイントの使用法を示しています。
表 – HIDクラスエンドポイントの使用状況

エンドポイント方向の使用

コントロールIN
コントロール

割り込みIN
割り込み

デバイスからホストへ
ホストからデバイスへ
デバイスからホストへ
ホストからデバイスへ

列挙、クラス固有のリクエスト、およびデータ通信のための標準リクエスト(入力、GET_REPORTリクエストでホストに送信される機能レポート)。列挙、クラス固有のリクエスト、およびデータ通信のための標準リクエスト(出力、SET_REPORTリクエストでホストから受信される機能レポート)。データ通信(入力および機能レポート)。
データ通信 (出力および機能レポート)。

報告

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

29/174

以上view

ホストとHIDデバイスは、レポートを使用してデータを交換します。レポートには、HIDデバイスのコントロールやその他の物理エンティティに関する情報を示すフォーマットされたデータが含まれています。コントロールはユーザーが操作でき、デバイスの特定の側面を操作します。例えば、amp例えば、コントロールとは、マウスやキーボードのボタン、スイッチなどです。他のエンティティは、特定のデバイス機能の状態をユーザーに通知します。例えば、ampたとえば、キーボード上の LED は、Caps Lock がオンになっていることや、テンキーがアクティブになっていることなどをユーザーに通知します。
レポートデータのフォーマットと用途は、ホストがレポート記述子の内容を解析することで理解されます。内容の解析はパーサーによって行われます。レポート記述子は、デバイス内の各コントロールから提供されるデータを記述します。レポート記述子は、デバイスに関する情報の断片であり、1バイトのプレフィックスと可変長のフィールドで構成される項目で構成されています。
データ。アイテムのフォーマットの詳細については、
1.11=、セクション5.6および6.2.2。
アイテムには主に 3 つの種類があります。
メイン項目は、特定の種類のデータ フィールドを定義またはグループ化します。
グローバル項目は、コントロールのデータ特性を記述します。
ローカル項目はコントロールのデータ特性を記述します。
各アイテムタイプは異なる関数によって定義されます。アイテム関数は、 tagアイテム機能は、3つの主要なアイテムタイプのいずれかに属するサブアイテムと見なすことができます。以下の表は、view 各アイテムタイプにおけるアイテムの機能。各カテゴリーのアイテムの詳細な説明については、
表 – 各アイテムタイプのアイテム機能の説明

アイテム アイテムタイプ 機能

説明

メイン入力

1 つ以上の物理コントロールによって提供されるデータに関する情報を説明します。

メイン出力 デバイスに送信されたデータを説明します。

主な特徴

デバイスまたはそのコンポーネントの全体的な動作に影響を与える、デバイスとの間で送受信されるデバイス構成情報を説明します。

メインコレクショングループ関連の項目 (入力、出力、または機能)。

メイン終了コレクションを閉じます。コレクション

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

30/174

以上view

アイテム アイテムタイプ 機能

説明

グローバル使用状況ページ

デバイス内で利用可能な機能を識別します。

グローバル論理 論理単位で報告される値の下限を定義します。最小

グローバル論理 論理単位で報告される値の上限を定義します。最大

グローバル物理 物理単位で報告される値の下限、つまり物理単位で表される論理最小最小値を定義します。

グローバル物理 物理単位で報告される値の上限、つまり物理単位で表される論理最大値を定義します。

グローバルユニット

10 を基数とする単位指数を示します。指数の範囲は -8 から +7 です。

指数

グローバルユニット

報告される値の単位を示します。例:長さ、質量、温度単位など。

グローバルレポートサイズ

レポート フィールドのサイズをビット単位で示します。

グローバル レポート ID 特定のレポートに追加されたプレフィックスを示します。

グローバルレポート数

アイテムのデータ フィールドの数を示します。

グローバルプッシュ

グローバル アイテム状態テーブルのコピーを CPU スタックに配置します。

グローバルポップ

アイテム状態テーブルをスタックの最後の構造に置き換えます。

ローカル使用

使用状況ページ内で特定の使用状況を示すインデックスを表します。これは、特定のコントロールまたはコントロールグループについてベンダーが推奨する使用状況を示します。使用状況は、コントロールが実際に何を測定しているかに関する情報をアプリケーション開発者に提供します。

ローカル使用

配列またはビットマップに関連付けられた開始使用法を定義します。

最小

ローカル使用

配列またはビットマップに関連付けられた終了の使用法を定義します。

最大

ローカル指定子 コントロールに使用するボディ部分を決定します。インデックスは物理指定子を指します。

索引

ディスクリプタ。

ローカル指定子配列またはビットマップに関連付けられた開始指定子のインデックスを定義します。最小

ローカル指定子配列またはビットマップに関連付けられた終了指定子のインデックスを定義します。最大

ローカル文字列インデックス

文字列記述子の文字列インデックス。これにより、文字列を特定の項目またはコントロールに関連付けることができます。

ローカル文字列

配列内のコントロールに連続した文字列のグループを割り当てるときに、最初の文字列インデックスを指定します。

最小値またはビットマップ。

ローカル ローカル

文字列の最大値
デリミタ

配列またはビットマップ内のコントロールに連続した文字列のグループを割り当てるときに、最後の文字列インデックスを指定します。
ローカル項目セットの開始または終了を定義します。

コントロールのデータでは、少なくとも次の項目を定義する必要があります。
入力、出力または機能のメイン項目の使用法ローカル項目の使用法ページグローバル項目論理最小値グローバル項目論理最大値グローバル項目レポートサイズグローバル項目

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

31/174

以上view
レポートカウントグローバル項目以下の表は、ホストHIDパーサーの観点から見たマウスレポート記述子の内容の表現を示しています。マウスには3つのボタン(左、右、ホイール)があります。例に示されているコードはamp以下のファイルは、このマウス レポート記述子表現に対応するコード実装です。
図 – ホスト HID パーサーからのレポート記述子の内容 View

(1)使用ページの項目機能は、デバイスの一般的な機能を指定します。この例では、ample、HIDデバイスは
汎用デスクトップ コントロール。
(2) アプリケーションコレクションは、共通の目的を持ち、アプリケーションに馴染みのあるメイン項目をグループ化します。図では、このグループは3つの入力メイン項目で構成されています。このコレクションでは、使用法項目に示されているように、コントロールの推奨用途はマウスです。(3) ネストされたコレクションは、単一のコントロールまたはコントロールグループの使用方法について、アプリケーションに詳細情報を提供するために使用できます。この例では、ampたとえば、コレクション・フィジカルはコレクション・アプリケーションにネストされており、コレクション・アプリケーションを構成する同じ3つの入力項目で構成されています。コレクション・フィジカルは、1つの幾何学的ポイントで収集されたデータポイントを表すデータ項目のセットに使用されます。ampたとえば、Usage 項目で示されているように、推奨される使用法はポインタです。ここで、ポインタの使用法はマウスの位置座標を参照し、システム ソフトウェアはマウスの座標を画面カーソルの移動に変換します。 (4) ネストされた使用法ページも可能で、デバイスの一般的な機能内の特定の側面についての詳細が提供されます。この場合、2 つの Inputs 項目がグループ化され、マウスのボタンに対応します。1 つの Input 項目は、項目のデータ フィールドの数 (Report Count 項目)、データ フィールドのサイズ (Report Size 項目)、および各データ フィールドの可能な値 (Usage Minimum と Maximum、Logical Minimum と Maximum 項目) に関して、マウスの 3 つのボタン (右、左、ホイール) を定義します。もう 1 つの Input 項目は 13 ビットの定数であり、入力レポート データをバイト境界に揃えることができます。この Input 項目はパディング目的でのみ使用されます。 (5) 汎用デスクトップ コントロールを参照する別のネストされた使用法ページは、マウスの位置座標用に定義されています。この使用ページでは、入力項目は、2つの使用法で指定されたx軸とy軸に対応するデータフィールドを記述します。
アイテム。
ホストのHIDパーサーは、前回のマウスレポート記述子の内容を解析した後、デバイスから割り込みIN転送またはGET_REPORT要求への応答として送信された入力レポートデータを解釈することができます。図 – ホストHIDパーサーからのレポート記述子の内容に示されているマウスレポート記述子に対応する入力レポートデータ View is

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

32/174

以上view

下の表に示されています。レポートデータの合計サイズは4バイトです。同じエンドポイントで異なる種類のレポートが送信されることがあります。異なる種類のレポートを区別するために、データレポートには1バイトのレポートIDプレフィックスが付加されます。ampマウス レポートのファイルの場合、レポート データの合計サイズは 5 バイトになります。
表 – ホストに送信される入力レポートと3ボタンマウスの状態

ビットオフセット
0 1 2 3 16 24

ビット数 1 1 1 13 8 8

説明 ボタン1(左ボタン)。 ボタン2(右ボタン)。 ボタン3(ホイールボタン)。 未使用。 X軸上の位置。 Y軸上の位置。

物理記述子は、コントロールをアクティブ化するための本体の部位を示します。アプリケーションはこの情報を使用して、デバイスのコントロールに機能を割り当てることができます。物理記述子はオプションのクラス固有の記述子であり、ほとんどのデバイスではこれを使用することによるメリットはほとんどありません。
USBデバイスHIDクラスのコアからのリソース要件

関数 sl_usbd_hid_add_to_configuration() を呼び出して HID クラス インスタンスを USB 構成に追加するたびに、コアから次のリソースが割り当てられます。

リソース
インターフェース 代替インターフェース エンドポイント インターフェースグループ


1 1 1 (割り込みOUTエンドポイントが有効な場合は2) 0

これらの数値は構成ごとに異なることに注意してください。SL_USBD_INTERFACE_QUANTITY、SL_USBD_ALT_INTERFACE_QUANTITY、SL_USBD_INTERFACE_GROUP_QUANTITY、SL_USBD_DESCRIPTOR_QUANTITY の各構成値を設定する際は、クラスに追加される構成の数を考慮することを忘れないでください。SL_USBD_OPEN_ENDPOINTS_QUANTITY 構成値については、エンドポイントはホストによって構成が設定された場合にのみ開かれるため、クラスインスタンスに必要なエンドポイントの数のみを考慮する必要があります。
USBデバイスHIDクラス構成

HID クラスを構成するには、次の 2 つの構成パラメータ グループが使用されます。
USBデバイスHIDクラスのアプリケーション固有の構成 USBデバイスHIDクラスのインスタンス構成
USBデバイスHIDクラスのアプリケーション固有の構成

まず、Silicon Labs USBデバイスHIDクラスモジュールを使用するには、アプリケーションのニーズに合わせてHIDコンパイル時構成定義を調整します。これらはsl_usbd_core_config.hヘッダー内に再グループ化されています。 file HIDセクションの下にあります。これらは、数量設定とHIDタスク設定の2つのセクションに分けられます。数量設定の目的は、USBデバイスモジュールに割り当てるUSB HIDオブジェクトの数を通知することです。
以下の表は、各構成定義について説明しています。
表 – USBデバイスHID構成の定義

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

33/174

以上view

構成名
SL_USBD_HID_CL ASS_I NSTANCE_QUANTITY
SL_USBD_HID_CONFIG URATION_QUANTITY
SL_USBD_HID_REPORT_ ID_QUANTITY
SL_USBD_HID_PUSH_P OP_ITEM_QUANTITY
SL_USBD_HID_TIMER_T ASK_STACK_SIZE
SL_USBD_HID_TIMER_T ASK_PRIORITY

説明
関数の呼び出しによって割り当てられるクラスインスタンスの数
sl_usbd_hid_create_instance() 。
設定数。HIDクラスインスタンスは、関数sl_usbd_hid_add_to_configuration()を使用して、1つ以上のaaaa構成に追加できます。割り当てるレポートIDの総数を設定します。
割り当てる Push/Pop 項目の合計数を設定します。
タイマータスクは、すべてのタイマーベースのHID操作を処理します。この設定では、スタックサイズ(バイト数)を設定できます。HIDタスクの優先度。これはCMSIS-RTOS2の優先度です。

デフォルト値
2 1 2 0 2048
os優先度高

USBデバイスHIDクラスインスタンス構成クラスインスタンス作成サブクラス
プロトコル国コード
interval_in と interval_out p_hid_callback HID クラスレポート記述子 Example このセクションでは、HID クラス インスタンスに関連する構成を定義します。
クラスインスタンスの作成
HID クラス インスタンスの作成は、関数 aaa sl_usbd_hid_create_instance() を呼び出すことによって行われます。この関数には、以下で説明するいくつかの構成引数が必要です。
サブクラス
HIDサブクラスのコード。可能な値は次のとおりです。
SL_USBD_HID_SUBCL ASS_NONE SL_USBD_HID_SUBCL ASS_BOOT
ブートサブクラスを使用するHIDデバイスは、標準レポート形式を使用する必要があります。サブクラスコードの詳細については、HID仕様リビジョン1.11のセクション4.2を参照してください。
プロトコル
HIDデバイスで使用されるプロトコル。可能な値は次のとおりです。
SL_USBD_HID_PROTOCOL_NONE SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_MOUSE
HID機能がマウスの場合、プロトコルはSL_USBD_HID_PROTOCOL_MOUSEに設定する必要があります。キーボードの場合、プロトコルはSL_USBD_HID_PROTOCOL_KBDに設定する必要があります。それ以外の場合は、プロトコルはSL_USBD_HID_PROTOCOL_NONEに設定する必要があります。サブクラスコードの詳細については、HID仕様リビジョン1.11のセクション4.3を参照してください。
国コード
国コードのID。可能な値は次のとおりです。
SL_USBD_HID_国コード_サポートされていません

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

34/174

以上view
SL_USBD_HID_COUNTRY_CODE_ARABIC SL_USBD_HID_COUNTRY_CODE_BELGIAN SL_USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL SL_USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH SL_USBD_HID_COUNTRY_CODE_CZECH_REPUBLIC SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_GERMAN SL_USBD_HID_COUNTRY_CODE_GREEK SL_USBD_HID_COUNTRY_CODE_HEBREW SL_USBD_HID_COUNTRY_CODE_HUNGARY SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_L ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL AND SL_USBD_HID_COUNTRY_CODE_PORTUGUESE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL および SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
国コードは、ハードウェアがどの国向けにローカライズされているかを示します。ほとんどのハードウェアはローカライズされていないため、この値はSL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0) になります。ただし、キーボードによっては、このフィールドを使用してキーキャップの言語を示す場合があります。
国コードの詳細については、HID 仕様リビジョン 1.11 のセクション 6.2.1 を参照してください。
interval_in と interval_out
interval_in と interval_out は、IN 割り込みエンドポイントと OUT 割り込みエンドポイントのポーリング間隔を表します。
これはエンドポイントのポーリング間隔(ミリ秒単位)を表します。この値の設定は、デバイスがホストに対して新しいレポートを生成する頻度によって異なります。例えば、レポートが16ミリ秒ごとに生成される場合、間隔は16ミリ秒以下にする必要があります。
値は 2 の累乗 (1、2、4、8、16 など) である必要があります。
ctrl_rd_en が true に設定されている場合、interval_out 変数は無視されます。
p_hid_コールバック
aaaa p_hid_callback は sl_usbd_hid_callbacks_t 型の構造体へのポインタです。HIDイベントが発生した際に呼び出されるコールバック関数のセットをHIDクラスに渡すために使用されます。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

35/174

以上view

すべてのコールバックが必須というわけではなく、コールバックが不要な場合は、コールバック構造体変数にヌルポインタ( NULL )を渡すこともできます。以下の表は、この構成構造体で使用可能な各構成フィールドについて説明しています。
表 – sl_usbd_hid_callbacks_t 構成構造

フィールド

説明

関数シグネチャ

.enable .disable .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report

USBクラスインスタンスが正常に有効化されたときに呼び出されます。USBクラスインスタンスが無効化されたときに呼び出されます。
HID インスタンスの作成中に呼び出され、レポート記述子を渡します。各 HID 機能について、レポート記述子を提供する必要があります。レポート記述子は、デバイスから送信される定期的なレポートを解析する方法をホストに示します。独自のレポート記述子の作成は困難な場合があり、そのために役立つリソースがいくつかあります。これは、唯一の必須のコールバック関数です。HID インスタンスの作成中に呼び出され、物理記述子を渡します。物理記述子は、コントロールをアクティブ化している人体の特定の部分に関する情報を提供する記述子です。物理記述子の詳細については、HID 仕様リビジョン 1.11 のセクション 6.2.3 を参照してください。物理記述子はオプションであり、ほとんどの場合無視されます。ここで渡されるバッファーは NULL に設定でき、長さは 0 に設定できます。ホストがレポート記述子で説明されているようにレポートを設定するとき (レポートを送信するとき) に呼び出されます。
ホストがレポート記述子に記述されている機能レポートを要求したときに呼び出されます。
ホストがレポート記述子に記述されている機能レポートを設定するときに呼び出されます。

void app_usbd_hid_enable(uint8_t class_nbr); void app_usbd_hid_disable(uint8_t class_nbr); void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
void app_usbd_hid_get_phy_desc(uint8_t class_nbr、const uint8_t *p_report_ptr、uint16_tp_report_len);
void app_usbd_hid_set_output_report(uint8_t class_nbr、uint8_t report_id、uint8_t *p_report_buf、uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr、uint8_t report_id、uint8_t *p_report_buf、uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr、uint8_t report_id、uint8_t *p_report_buf、uint16_t report_len);

.get_protocol

現在アクティブなプロトコルを取得します。

void app_usbd_hid_get_protocol(uint8_t class_nbr、uint8_t *p_protocol);

.set_protocol

現在アクティブなプロトコルを設定します。

void app_usbd_hid_set_protocol(uint8_t class_nbr、uint8_t プロトコル);

HIDクラスレポート記述子Example

Silicon LabsのHIDクラスampleアプリケーションはexを提供しますamp単純なマウスのレポート記述子の例。amp以下のファイルはマウス レポート記述子を示しています。
Example – マウスレポート記述子

静的 uint8_t app_usbd_hid_report_desc[] = {

(11) (10)

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、

(1)

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

36/174

以上view

SL_USBD_HID_MAIN_COLLECTION +1、SL_USBD_HID_COLLECTION_APPLICATION、(4)

SL_USBD_HID_LOCAL_USAGE +1、SL_USBD_HID_CP_POINTER、(5)

SL_USBD_HID_MAIN_COLLECTION +1、SL_USBD_HID_COLLECTION_PHYSICAL、(6)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1、SL_USBD_HID_USAGE_PAGE_BUTTON、(7)

SL_USBD_HID_LOCAL_USAGE_MIN +1,0 01,

SL_USBD_HID_LOCAL_USAGE_MAX +1,0 03,

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 00,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 01,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 03,

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 01,

SL_USBD_HID_MAIN_INPUT +1、SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_MAIN_VARIABLE |

SL_USBD_HID_MAIN_ABSOLUTE、

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 01,(8)

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 0D,

SL_USBD_HID_MAIN_INPUT +1、SL_USBD_HID_MAIN_CONSTANT、(9)

SL_USBD_HID_GLOBAL_USAGE_PAGE +1、SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS、

SL_USBD_HID_LOCAL_USAGE +1、SL_USBD_HID_DV_X、

SL_USBD_HID_LOCAL_USAGE +1、SL_USBD_HID_DV_Y、

SL_USBD_HID_GLOBAL_LOG_MIN +1,0 81,

SL_USBD_HID_GLOBAL_LOG_MAX +1,0 7F、

SL_USBD_HID_GLOBAL_REPORT_SIZE +1,0 08,

SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,

SL_USBD_HID_MAIN_INPUT +1、SL_USBD_HID_MAIN_DATA |

SL_USBD_HID_MAIN_VARIABLE |

SL_USBD_HID_MAIN_RELATIVE、

SL_USBD_HID_MAIN_ENDCOLLECTION、(10)

SL_USBD_HID_MAIN_ENDCOLLECTION

(11)};

(1)マウスレポート記述子を表すテーブルは、各行が短い項目に対応するように初期化されます。短い項目は1バイトのプレフィックスと1バイトのデータで構成されます。 view図 – ホストHIDパーサーからのレポート記述子コンテンツでホストHIDパーサーによって生成されたもの View.
(2)汎用デスクトップ使用ページが使用されます。
(3)汎用デスクトップ使用状況ページ内では、使用状況は tag コントロールのグループがマウスを制御するためのものであることを示します。マウスのコレクションは通常、2つの軸(XとY)と1つ、2つ、または3つのボタンで構成されます。
(4)マウスコレクションが開始されます。
(5)マウスコレクション内での使用 tag より具体的には、マウスコントロールはポインタコレクションに属していることを示しています。ポインタコレクションとは、ユーザーの意図をアプリケーションに指示、表示、または指示するための値を生成する軸のコレクションです。
(6)ポインタ収集が開始されます。
(7) ボタン使用ページは、3つの1ビットフィールドで構成される入力項目を定義します。各1ビットフィールドは、それぞれマウスのボタン1、2、9を表し、0または1の値を返すことができます。
(8)ボタン使用ページの入力項目には、さらに13ビットが埋め込まれます。
(9)X軸とY軸でマウスの位置を記述するための別の汎用デスクトップ使用ページが示されています。入力項目は、値が-127〜127の範囲にある2つの8ビットフィールドで構成されています。
(10)ポインタコレクションが閉じられます。
(11)マウスコレクションは終了しました。
USB.org HID ページ

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

37/174

以上view
USBインプリメンターズフォーラム(USB-IF)は、「HIDディスクリプタツール」と呼ばれるツールと、レポートディスクリプタフォーマットに関するその他の情報を提供しています。詳細については、http://www.usb.org/developers/hidpage/ をご覧ください。
USBデバイスHIDクラスプログラミングガイド
このセクションでは、HIDクラスの使い方について説明します。USBデバイスHIDクラスの初期化、デバイスへのUSBデバイスHIDクラスインスタンスの追加、USBデバイスHIDクラスを使用した通信
USBデバイスHIDクラスの初期化
デバイスにHIDクラスの機能を追加するには、まず関数sl_usbd_hid_init()を呼び出してクラスを初期化する必要があります。amp以下のコードは、デフォルト引数を使用して sl_usbd_hid_init() を呼び出す方法を示しています。 sl_usbd_hid_init() に渡す設定引数の詳細については、「USBデバイスHIDクラス アプリケーション固有の設定」を参照してください。
Example – sl_usbd_hid_init() を呼び出す
sl_status_t ステータス;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
USBデバイスHIDクラスインスタンスをデバイスに追加する
デバイスに HID クラス機能を追加するには、インスタンスを作成し、それをデバイスの構成に追加する必要があります。
HIDクラスインスタンスの作成
sl_usbd_hid_create_instance() 関数を呼び出してHIDクラスのインスタンスを作成します。amp以下の例は、 sl_usbd_hid_create_instance() を使ってデフォルトの引数を用いてシンプルなマウス関数を作成する方法を示しています。 sl_usbd_hid_create_instance() に渡す設定引数の詳細については、「USBデバイスHIDクラスインスタンス設定」を参照してください。
Example – sl_usbd_hid_create_instance() によるマウス機能の追加

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

38/174

以上view
/* グローバル定数 */ 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_REPORT_SIZE + 1、0 08、SL_USBD_HID_GLOBAL_REPORT_COUNT + 1、0 02、SL_USBD_HID_MAIN_INPUT + 1、SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_VARIABLE | SL_USBD_HID_MAIN_RELATIVE、SL_USBD_HID_MAIN_ENDCOLLECTION、SL_USBD_HID_MAIN_ENDCOLLECTION };
/* ローカル変数 */ uint8_t class_nbr; sl_status_t status;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL、 NULL、 app_usbd_hid_get_report_desc、 NULL、 NULL、 NULL、 NULL、 NULL、 NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)クラス番号;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
ステータス = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT、SL_USBD_HID_PROTOCOL_MOUSE、SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED、Ex_USBD_HID_Mouse_ReportDesc、sizeof(Ex_USBD_HID_Mouse_ReportDesc)、2u、2u、true、&app_usbd_hid_callbacks、&class_nbr);
著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

39/174

以上view
/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */
HIDクラスインスタンスをデバイスの構成に追加する HIDクラスインスタンスを作成したら、関数を呼び出して構成に追加できます。
sl_usbd_hid_add_to_configuration() 。
元amp以下のファイルは、 sl_usbd_hid_add_to_configuration() を呼び出す方法を示しています。
Example – sl_usbd_hid_add_to_configuration() を呼び出す

sl_status_t ステータス;

sl_usbd_hid_add_to_configuration(クラス番号、

(1)

config_nbr_fs); (2)

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

(1) sl_usbd_hid_create_instance() によって返される構成に追加するクラス番号。(2) 構成番号(ここではフルスピード構成に追加します)。
USBデバイスHIDクラスを使用した通信
クラスインスタンス通信 同期通信 クラスインスタンス通信 HID クラスは、ホストと通信するための次の機能を提供します。
表 – HID通信APIの概要

関数名
sl_usb d _hid _ read _sy nc() sl_usb d _hid _write _sy nc()

操作:割り込みOUTエンドポイントを介してホストからデータを受信します。この関数はブロッキングです。割り込みINエンドポイントを介してホストにデータを送信します。この関数はブロッキングです。

同期通信 同期通信とは、転送がブロックされていることを意味します。関数呼び出しが行われると、アプリケーションは転送が完了するまで(エラーの有無にかかわらず)ブロックされます。タイムアウトを指定することで、永久に待機することを避けることができます。amp以下のコードは、割り込み OUT エンドポイントを使用してホストからデータを受信し、割り込み IN エンドポイントを使用してホストにデータを送信する読み取りと書き込みを示しています。
Example – 同期HID読み取りと書き込み

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

状態;

ステータス = sl_usbd_hid_read_sync(クラス_nbr、

(1)

(void *)rx_buf、

(1)

2u、

0u、

(1)

&xfer_len);

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

40/174

以上view
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* エラーが発生しました。ここにエラー処理を追加する必要があります。*/
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* エラーが発生しました。ここにエラー処理を追加する必要があります。*/
(1) sl_usbd_hid_create_instance() から作成されたクラスインスタンス番号は、HIDクラスが適切な割り込みOUTまたはINエンドポイントに転送をルーティングするための内部参照を提供します。
(2) アプリケーションは、関数に提供されるバッファがすべてのデータを収容するのに十分な大きさであることを確認する必要があります。そうでない場合、同期の問題が発生する可能性があります。内部的には、sl_usbd_hid_create_instance() の呼び出し時に設定された制御読み取りフラグに応じて、制御エンドポイントまたは割り込みエンドポイントのいずれかで読み取り操作が行われます。
(3) 無限にブロックされる状況を回避するために、ミリ秒単位でタイムアウトを指定できます。809を指定すると、アプリケーションタスクは永久に待機します。
(4)アプリケーションは初期化された送信バッファを提供します。
HID 定期入力レポートタスク
帯域幅を節約するため、ホストは割り込みINエンドポイントからのレポートの報告頻度を制限することで、レポートを無音にすることができます。そのためには、ホストはSET_IDLE要求を送信する必要があります。Silicon Labsが実装したHIDクラスには、1つまたは複数の入力レポートに適用できるレポート頻度の制限を尊重する内部タスクが含まれています。図「定期入力レポートタスク」は、定期入力レポートタスクの動作を示しています。
図 – 定期入力レポートタスク

(1) デバイスはSET_IDLEリクエストを受信します。このリクエストは、指定されたレポートIDのアイドル期間を指定します。SET_IDLEリクエストの詳細については、
(2) レポートID構造体(HIDクラス初期化フェーズで割り当てられる)は、アイドル期間で更新されます。アイドル期間カウンタは、アイドル期間の値で初期化されます。レポートID構造体は、入力レポートID構造体を含むリンクリストの末尾に挿入されます。アイドル期間の値は4ミリ秒単位で表され、4~1020ミリ秒の範囲となります。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

41/174

以上view
アイドル期間が割り込み IN エンドポイントのポーリング間隔よりも短い場合、レポートはポーリング間隔で生成されます。
(3) 周期入力レポートタスクは4ミリ秒ごとに入力レポートIDリストを参照します。各入力レポートIDに対して、タスクは2つの可能な操作のいずれかを実行します。タスク周期の長さは、アイドル期間に使用される4ミリ秒単位と一致します。ホストからSET_IDLE要求が送信されていない場合、入力レポートIDリストは空であり、タスクは処理する処理がありません。タスクは、0以外のレポートIDで、アイドル期間が0より大きいレポートIDのみを処理します。
(4) 指定された入力レポートIDについて、タスクはアイドル時間が経過したかどうかを確認します。アイドル時間が経過していない場合、カウンタはデクリメントされ、入力レポートはホストに送信されません。
(5)アイドル時間が経過した場合(つまり、アイドル時間カウンタがゼロに達した場合)、割り込みINエンドポイントを介してsl_usbd_hid_write_sync()関数を呼び出すことによって、入力レポートがホストに送信されます。
(6) タスクによって送信される入力レポートデータは、レポート記述子に記述された各入力レポートに割り当てられた内部データバッファから取得されます。アプリケーションタスクはsl_usbd_hid_write_sync()関数を呼び出して入力レポートを送信できます。入力レポートデータを送信した後、sl_usbd_hid_write_sync()は、入力レポートIDに関連付けられた内部バッファを送信したデータで更新します。その後、定期的な入力レポートタスクは、アイドル時間が経過するたびに、アプリケーションタスクが内部バッファのデータを更新するまで、常に同じ入力レポートデータを送信します。定期的な入力レポートタスクによる送信時に入力レポートIDデータが変更された場合でも、データの破損を防ぐためのロックメカニズムが備わっています。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

42/174

以上view
以上view
USBデバイスMSCクラス
USBデバイスMSCクラスオーバーview USBデバイスMSCクラスのコアからのリソースニーズUSBデバイスMSCクラスの構成USBデバイスMSCクラスのプログラミングガイドUSBデバイスMSCクラスのストレージドライバー
このセクションでは、Silicon Labs USBデバイスがサポートするマスストレージデバイスクラス(MSC)について説明します。MSCは、USBデバイスとホスト間の情報転送を可能にするプロトコルです。転送される情報は、実行可能プログラム、ソースコード、ドキュメント、画像、設定データ、その他のテキストデータや数値データなど、電子的に保存できるあらゆるものです。USBデバイスはホストからは外部記憶媒体として認識され、以下の転送を可能にします。 fileドラッグ アンド ドロップで実行できます。
A file システムは、 fileはストレージメディアに整理されます。USBマスストレージクラスの仕様では、特別な要件はありません。 file 準拠デバイスで使用されるシステムではなく、SCSI(Small Computer System Interface)透過コマンドセットを使用して、データセクターの読み書きを行うためのシンプルなインターフェースを提供します。そのため、オペレーティングシステムはUSBドライブをハードドライブのように扱い、任意のフォーマットでフォーマットできます。 file 彼らが好むシステム。
USB 大容量ストレージ デバイス クラスは、次の 2 つのトランスポート プロトコルをサポートします。
バルクオンリートランスポート (BOT) コントロール/バルク/割り込み (CBI) トランスポート (フロッピー ディスク ドライブのみに使用)
マスストレージデバイスクラスは、BOTプロトコルのみを使用してSCSI透過コマンドセットを実装します。これは、データとステータス情報の送信にバルクエンドポイントのみを使用することを意味します。MSC実装は複数の論理ユニットをサポートします。
MSC 実装は、次の仕様に準拠しています。
ユニバーサルシリアルバスマスストレージクラス仕様終了view、リビジョン 1.3、2008 年 9 月 5 日。ユニバーサル シリアル バス マス ストレージ クラス バルクオンリー トランスポート、リビジョン 1.0、1999 年 9 月 31 日。
USBデバイスMSC aCl ssオーバーview
プロトコルエンドポイントクラス要求小型コンピュータシステムインタフェース(SCSI)
プロトコル
このセクションでは、マスストレージクラスのバルクオンリートランスポート(BOT)プロトコルについて説明します。バルクオンリートランスポートプロトコルには3つの機能があります。tages:
コマンドトランスポート データトランスポート ステータストランスポート
マスストレージコマンドは、コマンドブロックラッパー(CBW)と呼ばれる構造を介してホストから送信されます。データ転送を必要とするコマンドの場合、tag例えば、ホストはCBWの長さとフラグフィールドで指定されたバイト数だけデバイスから送信または受信を試みます。データ転送が完了した後、tag例えば、ホストはデバイスからコマンドステータスラッパー(CSW)を受信しようとします。CSWにはコマンドのステータスとデータ残余(もしあれば)の詳細が記されています。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

43/174

以上view
任意)。データトランスポートsを含まないコマンドの場合tage. ホストはCBWの送信直後にCSWの受信を試みます。このプロトコルの詳細は図「MSCプロトコル」に記載されています。
図 – MSCプロトコル

Endpoints
デバイス側では、BOT仕様に準拠し、MSCは以下のエンドポイントで構成されます:デフォルトエンドポイントと呼ばれる制御INエンドポイントと制御OUTエンドポイントのペア。バルクINエンドポイントとバルクOUTエンドポイントのペア。
以下の表は、エンドポイントのさまざまな使用方法を示しています。
表 – MSCエンドポイントの使用状況

終点
コントロールIN コントロールOUT バルクIN バルクOUT

方向
デバイスからホストへ ホストからデバイスへ デバイスからホストへ ホストからデバイスへ

使用法
列挙とMSCクラス固有の要求 列挙とMSCクラス固有の要求 CSWとデータの送信 CBWとデータの受信

クラスリクエスト
MSC BOTプロトコルには2つの制御要求が定義されています。これらの要求とその説明については、以下の表に詳しく記載されています。

表 – マスストレージクラスの要求

クラスリクエスト
一括のみのマスストレージリセット

説明
この要求は、マスストレージデバイスとその関連インターフェースをリセットするために使用されます。この要求により、デバイスは次のコマンドブロックを受信できるようになります。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

44/174

以上view

クラスリクエスト

説明

Get Max このリクエストは、デバイスがサポートする最大の論理ユニット番号(LUN)を返すために使用されます。例:ampル、

ルン

LUN 0とLUN 1を持つデバイスは1を返します。単一の論理ユニットを持つデバイスは0を返すか、

リクエスト。返される最大値は 15 です。

小型コンピュータシステムインターフェースSCSI

プログラミングインターフェースレベルでは、MSCデバイスはSCSIやSFF-8020i(ATAPI)といった標準的なストレージメディア通信プロトコルのいずれかを実装しています。「プログラミングインターフェース」は実装するプロトコルを指定し、ホストオペレーティングシステムがUSBストレージデバイスとの通信に適したデバイスドライバーをロードするのに役立ちます。SCSIはUSB MSCストレージデバイスで最も一般的に使用されるプロトコルです。GSDKユーザーはMSC SCSIサブクラスの実装をすぐに使用できます。
SCSIは、コンピュータと周辺機器間の通信を処理するための一連の規格です。これらの規格には、コマンド、プロトコル、電気インターフェース、光インターフェースが含まれます。USBなどの他のハードウェアインターフェースを使用するストレージデバイスは、SCSIコマンドを使用して、デバイス/ホスト情報の取得、デバイスの動作制御、ストレージメディア内のデータブロックの転送を行います。
SCSIコマンドは幅広いデバイスの種類と機能をカバーしており、デバイスはこれらのコマンドのサブセットを必要とします。一般的に、基本的な通信には以下のコマンドが必要です。
問い合わせ 読み取り容量(10) 読み取り(10) 要求センステストユニット準備完了 書き込み(10)
USBデバイスMSCクラスのコアからのリソースニーズ

関数 sl_usbd_msc_add_to_configuration() を使用して MSC クラス インスタンスを USB 構成に追加するたびに、コアから次のリソースが割り当てられます。

リソース
インターフェース 代替インターフェース エンドポイント インターフェースグループ


1 1 2 0

これらの数値は構成ごとに異なることに注意してください。SL_USBD_INTERFACE_QUANTITY、SL_USBD_ALT_INTERFACE_QUANTITY、SL_USBD_INTERFACE_GROUP_QUANTITY、SL_USBD_DESCRIPTOR_QUANTITY の各構成値を設定する際は、クラスに追加される構成の数を考慮することを忘れないでください。SL_USBD_OPEN_ENDPOINTS_QUANTITY 構成値については、エンドポイントはホストによって構成が設定された場合にのみ開かれるため、クラスインスタンスに必要なエンドポイントの数のみを考慮する必要があります。
USBデバイスMSCクラス構成

MSC クラスを構成するには、次の 2 つの構成パラメータ グループが使用されます。
USBデバイスMSCクラスアプリケーション固有の構成USBデバイスMSCクラス論理ユニット構成
USBデバイスMSCクラスアプリケーション固有の構成

クラスのコンパイル時構成クラスインスタンスの作成

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

45/174

以上view

クラスのコンパイル時構成
Silicon Labs USBデバイスMSCクラスとSCSIサブクラスは、sl_usbd_core_config.hにある#definesを介してコンパイル時に構成可能です。 file.
表 – 一般的な構成定数

構成名

説明

SL_USBD_MSC_CLASS_INST 関数の呼び出しによって割り当てるクラスインスタンスの数

ANCE_QUANTITY

sl_usbd_msc_scsi_create_instance() 。

SL_USBD_MSC_CONFIGURA 呼び出しによってクラスインスタンスを追加できる構成の数

TION_QUANTITY

関数 sl_usbd_msc_scsi_add_to_configuration() 。

SL_USBD_MSC_LUN_QUANT 呼び出しによって追加するクラスインスタンスあたりの論理ユニットの数。

ITY

関数 sl_usbd_msc_scsi_lun_add() 。

SL_USBD_MSC_SCSI_64_BIT 64 ビットの論理ブロック アドレス (LBA) のサポートを有効または無効にします。
_LBA_EN

SL_USBD_MSC_DATA_BUFF クラスインスタンスあたりのデータバッファのサイズ(バイト単位) ER_SIZE

デフォルト値
2
1
2
0
512

クラスインスタンスの作成
USBデバイスのMSC SCSIクラスインスタンスを作成するには、sl_usbd_msc_scsi_create_instance()関数を呼び出します。この関数は、以下に説明する1つの設定引数を取ります。
p_scsi_callbacks
p_scsi_callbacks は、 sl_usbd_msc_scsi_callbacks_t 型の設定構造体へのポインタです。USBデバイスクラスの一般的なコールバック(接続/切断)に加えて、論理ユニットでイベントが発生した際に呼び出されるオプションのコールバック関数のセットをMSCクラスに提供します。コールバックが不要な場合は、この引数にヌルポインタ( NULL )を渡すことができます。
以下の表では、この構成構造で使用可能な各構成フィールドについて説明します。
表 – sl_usbd_msc_scsi_callbacks_t 構成構造

フィールド

説明

。有効にする

USB クラス インスタンスが正常に有効化されたときに呼び出されます。

.disable USB クラス インスタンスが無効になっているときに呼び出されます。

.host_eject 論理ユニットがホストから取り出されるときに呼び出される関数。

関数シグネチャ
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
void app_usbd_msc_scsi_disable(uint8_t class_nbr); void app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);

USBデバイスMSCクラス論理ユニット構成

MSCクラスインスタンスに論理ユニットを追加するには、関数 sl_usbd_msc_lun_add() を呼び出します。この関数は、以下に説明する1つの設定引数を取ります。

p_lu_info

p_lu_info は、 sl_usbd_msc_scsi_lun_info_t 型の構造体へのポインタです。その目的は、論理ユニットに関する情報をMSCクラスに提供することです。
以下の表では、この構成構造で使用可能な各構成フィールドについて説明します。

表 – sl_usbd_msc_scsi_lun_info_t 構成構造

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

46/174

以上view

分野

説明

分野
.scsi_lun_api_p tr

説明
この論理ユニットを処理するメディアドライバーAPIへのポインタ。ストレージドライバーの詳細については、「USBデバイスMSCクラスストレージドライバー」を参照してください。

.ve nd または r_id _ p tr
.製品ID_ptr
.製品_レビューレベル.is_読み取り専用

論理ユニットのベンダーIDを含む文字列へのポインタ。文字列の最大長は8文字です。論理ユニットの製品IDを含む文字列へのポインタ。文字列の最大長は16文字です。製品のリビジョンレベル。
論理ユニットを読み取り専用として扱うかどうかを示すフラグ view ホストの ( true ) かそうでないか ( false )。

USBデバイスMSCクラスプログラミングガイド

このセクションでは、MSC クラスの使用方法について説明します。
USBデバイスMSCクラスの初期化USBデバイスMSC SCSIクラスインスタンスをデバイスに追加するUSB​​デバイスMSCクラス論理ユニットの処理
USBデバイスMSCクラスの初期化

デバイスに MSC SCSI クラス機能を追加するには、まず関数 sl_usbd_msc_init() と sl_usbd_msc_scsi_init() を呼び出して、MSC 基本クラスと SCSI サブクラスを初期化します。
元amp以下のファイルは、 sl_usbd_msc_init() と sl_usbd_msc_scsi_init() を呼び出す方法を示しています。

Example – sl_usbd_msc_init() と sl_usbd_msc_scsi_init() を呼び出す

sl_status_t ステータス;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}
USBデバイスMSC SCSIクラスインスタンスをデバイスに追加する
デバイスにMSC SCSIクラスの機能を追加するには、まずインスタンスを作成し、それをデバイスの構成に追加します。インスタンスには少なくとも1つの論理ユニットを追加する必要があります。
MSC SCSIクラスインスタンスの作成
関数 sl_usbd_msc_scsi_create_instance() を呼び出して、MSC SCSI クラス インスタンスを作成します。
元amp以下のファイルは、デフォルト引数を使用して sl_usbd_msc_scsi_create_instance() を呼び出す方法を示しています。 sl_usbd_msc_scsi_create_instance() に渡す設定引数の詳細については、「USBデバイスMSCクラス アプリケーション固有の設定」を参照してください。
Example – sl_usbd_ msc_scsi_create_instance() を呼び出す

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

47/174

以上view

uint8_t クラス_nbr; sl_status_t ステータス;
sl_usbd_msc_scsi_callbacks_t app_usbd_msc_scsi_callbacks = { .enable = NULL、 .disable = NULL、 .host_eject = NULL };
ステータス = sl_usbd_msc_scsi_create_instance(&app_usbd_msc_scsi_callbacks,0 &class_nbr);
if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }
MSC クラスインスタンスをデバイスの構成に追加する
MSCクラスのインスタンスを作成したら、関数を呼び出して構成に追加できます。
sl_usbd_msc_add_to_configuration() 。
元amp以下のファイルは、デフォルトの引数を使用して sl_usbd_msc_scsi_add_to_configuration() を呼び出す方法を示しています。
Example – sl_usbd_ msc_scsi_add_to_configuration() を呼び出す

sl_status_t ステータス;

ステータス = sl_usbd_msc_scsi_add_to_configuration(クラス_nbr、

(1)

config_nbr_fs);

(1)

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

(1) sl_usbd_msc_scsi_create_instance() によって返される構成に追加するクラス番号。(32) 構成番号(ここではフルスピード構成に追加します)。
USBデバイスMSCクラス論理ユニット処理
論理ユニットの追加 ストレージメディアの接続/切断
論理ユニットの追加
MSC SCSIクラスインスタンスに論理ユニットを追加する場合、論理ユニットをストレージメディア(RAMディスク、SDカード、フラッシュメモリなど)にバインドする必要があります。MSCクラスはストレージメディアとの通信にストレージドライバを使用します。論理ユニットを追加する際には、このドライバが提供されている必要があります。
元amp以下のコードは、 sl_usbd_msc_scsi_lun_add() を使用して論理ユニットを追加する方法を示しています。
Example – sl_usbd_msc_scsi_lun_add() による論理ユニットの追加

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

48/174

以上view

sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;

sl_usbd_msc_scsi_lun_info_t lu_info;

sl_status_t

状態;

lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_storage_block_device_api;

lu_info.ベンダーID_ptr

=「シリコンラボ」;

lu_info.製品ID_ptr

=「ブロックデバイス例ample”;

lu_info.製品リビジョンレベル = 0x1000u;

lu_info.is_read_only

= 偽;

ステータス = sl_usbd_msc_scsi_lun_add(class_nbr、&lu_info、&lu_object_ptr);
if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }

ストレージメディアの接続/取り外し
論理ユニットを追加した後、ホスト側からアクセスできるようにするには、ストレージメディアを接続する必要があります。MSCクラスには、ストレージメディアと論理ユニットの関連付けを制御する2つの関数、sl_usbd_msc_scsi_lun_attach() と sl_usbd_msc_scsi_lun_detach() が用意されています。これらの関数を使用すると、必要に応じて組み込みアプリケーションからアクセスを回復できるように、ストレージデバイスの取り外しをエミュレートできます。
元amp以下のファイルは、関数 sl_usbd_msc_scsi_lun_attach() と sl_usbd_msc_scsi_lun_detach() の使用方法を示しています。
Example – メディアの接続/切断

sl_status_t ステータス;

status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */
}

(1)

ステータス = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); if (ステータス ! SL_STATUS_OK) {
/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */
}

(1)

ステータス = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) if (ステータス ! SL_STATUS_OK) {
/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */
}

(1)

(1)この時点から、MSCデバイスがホストに接続されると、ストレージメディアにアクセスできるようになります。
(2) MSCデバイスがホストに接続されている場合、メディアは利用不可として表示されます。この時点で、組み込みアプリケーションからメディアに対する操作を実行できます。
(3)また、MSCデバイスがホストに接続されている場合、ストレージメディアは接続されているように表示されます。
USBデバイスMSCクラスストレージドライバー
USBデバイスMSCクラスは、ストレージメディアと通信するためにストレージドライバが必要です。現時点では、Silicon Labsはドライバを提供していません。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

49/174

以上view
TPY aa ドライバー AI は typedef sl_usbd_msc_scsi_lun_api_t で定義されています。sl_usbd_msc_scsi_lun_api_t は、 sl_usbd_msc_scsi_lun_add() でロジックユニットを追加するときに引数として渡される sl_usbd_msc_scsi_lun_info_t にインクルードする必要があります。構造体の詳細については、「USB デバイス MSC SCSI API」セクションを参照してください。ストレージドライバーの実装は、RAM 内のセクター配列のようにシンプルです。一般的なセクターサイズ(ブロックサイズ)は、大容量ストレージデバイスでは 512、CD-ROM では 2048 です。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

50/174

以上view
以上view
USBデバイスベンダークラス
USBデバイスベンダークラス終了view USB デバイス ベンダー クラス コアからのリソースのニーズ USB デバイス ベンダー クラス構成 USB デバイス ベンダー クラス プログラミング ガイド ベンダー クラスを使用すると、独自のプロトコルを実装できるベンダー固有のデバイスを作成できます。ホストとデバイス間のデータ転送には、一対のバルク エンドポイントに依存します。バルク転送は、大量の非構造化データを転送するのに便利で、エラー検出および再試行メカニズムを使用することで、信頼性の高いデータ交換を提供します。バルク エンドポイントに加えて、ベンダー クラスは、オプションの割り込みエンドポイントのペアも使用できます。オペレーティング システム (OS) にベンダー クラスを処理するドライバーがあれば、どの OS でもベンダー クラスを使用できます。OS によって、ドライバーはネイティブまたはベンダー固有のものにすることができます。たとえば、Microsoft Windows® では、アプリケーションは、ベンダー デバイスと通信するために Microsoft が提供する WinUSB ドライバーと対話します。
USBデバイスベンダークラス終了view
図 – Windowsホストとベンダークラス間の一般的なアーキテクチャは、ベンダークラスを使用したホストとデバイス間の一般的なアーキテクチャを示しています。この例では、ample、ホスト オペレーティング システムは MS Windows です。
図 – MS Windowsホストとベンダークラス間の一般的なアーキテクチャ

MS Windows側では、アプリケーションはUSBライブラリを介してベンダーデバイスと通信します。libusbなどのライブラリは、デバイスとそれに関連するパイプを管理し、制御エンドポイント、バルクエンドポイント、割り込みエンドポイントを介してデバイスと通信するためのAPIを提供します。
デバイス側では、Vendor クラスは次のエンドポイントで構成されます。
デフォルトエンドポイントと呼ばれる制御INエンドポイントと制御OUTエンドポイントのペア。バルクINエンドポイントとバルクOUTエンドポイントのペア。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

51/174

以上view

割り込みINエンドポイントと割り込みOUTエンドポイントのペア。このペアはオプションです。以下の表は、各エンドポイントの使用方法を示しています。
表 – ベンダークラスエンドポイントの使用状況

エンドポイント方向

コントロールIN
コントロール

バルクIN

デバイスからホストへ
>ホストからデバイスへ
デバイスからホストへ

バルクアウト
割り込みIN
割り込み

ホストからデバイスへ
デバイスからホストへ
ホストからデバイスへ

使用法
列挙のための標準要求とベンダー固有の要求。
列挙のための標準要求とベンダー固有の要求。
生データ通信。データは独自のプロトコルに従って構造化できます。
生データ通信。データは独自のプロトコルに従って構造化できます。
生データの通信または通知。データは独自のプロトコルに従って構造化できます。生データの通信または通知。データは独自のプロトコルに従って構造化できます。

デバイスアプリケーションは、バルクエンドポイントと割り込みエンドポイントを使用して、ホストとの間でデータを送受信できます。ホストから送信されるベンダー固有のリクエストをデコードするには、デフォルトのエンドポイントのみを使用できます。標準リクエストは、Silicon Labs USBデバイスのコア層によって内部的に管理されます。
USBデバイスベンダークラスのコアからのリソースニーズ

関数 sl_usbd_vendor_add_to_configuration() を使用してベンダー クラス インスタンスを構成に追加するたびに、コアから次のリソースが割り当てられます。

リソース
インターフェース 代替インターフェース エンドポイント インターフェースグループ


1 1 2 (割り込みエンドポイントを有効にした場合は4) 0

これらの数値は構成ごとに異なることに注意してください。SL_USBD_INTERFACE_QUANTITY、SL_USBD_ALT_INTERFACE_QUANTITY、SL_USBD_INTERFACE_GROUP_QUANTITY、SL_USBD_DESCRIPTOR_QUANTITY の各構成値を設定する際は、クラスに追加される構成の数を考慮することを忘れないでください。SL_USBD_OPEN_ENDPOINTS_QUANTITY 構成値については、エンドポイントはホストによって構成が設定された場合にのみ開かれるため、クラスインスタンスに必要なエンドポイントの数のみを考慮する必要があります。
USBデバイスベンダークラスの構成

Vendor クラスを構成するには、次の 2 つの構成パラメータ グループが使用されます。
USBデバイスベンダークラスのアプリケーション固有の構成 USBデバイスベンダークラスのインスタンスの構成
USBデバイスベンダークラスアプリケーション固有の構成
まず、Silicon Labs USBデバイスのVendorクラスモジュールを使用するには、アプリケーションのニーズに合わせてVendorのコンパイル時設定定義を調整します。これらはsl_usbd_core_config.hヘッダー内にまとめられています。 file ベンダーセクションの下にあります。数量設定の目的は、USBデバイスモジュールに割り当てるUSBベンダーオブジェクトの数を通知することです。
以下の表は、各構成定義について説明しています。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

52/174

以上view

表 – USBデバイスベンダー構成定義

構成名

説明

デフォルト値

SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY 2 つの関数 sl_usbd_vendor_create_instance() の呼び出しによって割り当てるクラス インスタンスの数。

SL_USBD_VENDOR_CONFIGURATION_QUANTITY 構成の数。ベンダークラスインスタンスは、関数 sl_usbd_vendor_add_to_configuration() を呼び出すことで、1つ以上の構成に追加できます。

USBデバイスベンダークラスインスタンス構成

このセクションでは、Vendor クラス インスタンスに関連する構成を定義します。
クラスインスタンスの作成 intr_en 間隔 p_vendor_callbacks
クラスインスタンスの作成

Vendor クラスのインスタンスを作成するには、関数 sl_usbd_vendor_create_instance() を呼び出します。この関数は、以下で説明する 3 つの構成引数を取ります。

intr_en
割り込みエンドポイントのペアを追加するかどうかを示すブール値。

価値
真偽

説明
IN/OUTエンドポイントのペアが追加され、組み込みアプリケーションで使用できるようになります。割り込みエンドポイントは追加されません。バルクIN/OUTエンドポイントのペアのみが使用可能です。

間隔
intr_en を true に設定すると、割り込みエンドポイントのポーリング間隔(ミリ秒単位)を指定できます。intr_en を false に設定すると、クラスによって無視されるため、interval を 0 に設定できます。
p_vendor_callbacks
p_vendor_callbacks は、クラス固有の制御要求を処理するために指定できるコールバック関数構造体変数へのポインタです。クラス固有の要求を使用しない場合、または通知の有効化/無効化が必要な場合は、この値を NULL に設定できます。
元amp以下のファイルは、クラス固有のリクエスト ハンドラーの予想される署名を提供します。
Example – クラス固有のリクエスト関数のシグネチャ

void app_usbd_vendor_req_handle(uint8_t

クラス番号、(1)

const sl_usbd_setup_req_t *p_setup_req); (2)

sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL、.disable = NULL、.setup_req = app_usbd_vendor_req_handle、
};

(1)ベンダークラスインスタンス番号。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

53/174

以上view

(2)ホストから受信したセットアップ要求へのポインタ。
USBデバイスベンダークラスプログラミングガイド
このセクションでは、ベンダークラスの使い方について説明します。USBデバイスベンダークラスの初期化、デバイスへのUSBデバイスベンダークラスインスタンスの追加、USBデバイスベンダークラスを使用した通信
USBデバイスベンダークラスの初期化
デバイスにベンダークラスの機能を追加するには、まず関数USBD_Vendor_Init()を呼び出してクラスを初期化します。amp以下のコードは、 sl_usbd_vendor_init() を呼び出す方法を示しています。
Example – sl_usbd_vendor_init() を呼び出す

sl_status_t ステータス;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* エラーが発生しました。ここでエラー処理を追加する必要があります。 */ }
USBデバイスベンダークラスインスタンスをデバイスに追加する
デバイスにベンダー クラス機能を追加するには、まずインスタンスを作成し、それをデバイスの構成に追加する必要があります。
ベンダークラスインスタンスの作成 ベンダークラスインスタンスをデバイスの構成に追加する
ベンダークラスインスタンスの作成
sl_usbd_vendor_create_instance() 関数を呼び出して、Vendorクラスのインスタンスを作成します。amp以下のコードは、デフォルト引数を使用して sl_usbd_vendor_create_instance() を呼び出す方法を示しています。 sl_usbd_vendor_create_instance() に渡す設定引数の詳細については、「USBデバイスベンダークラスインスタンス設定」を参照してください。
Example – sl_usbd_vendor_create_instance() を呼び出す

uint8_t クラス_nbr; sl_status_t ステータス;

ステータス = sl_usbd_vendor_create_instance(false,

(1)

0u、

(1)

app_usbd_vendor_callback_functions、(3)

&クラス_nbr);

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

(1) このクラスインスタンスには割り込みエンドポイントがありません。 (2) 割り込みエンドポイントが無効になっているため、間隔は無視されます。

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

54/174

以上view

(3) ベンダー固有のクラスリクエストを処理するアプリケーションの一部であるコールバック関数。詳細については、「USBデバイスベンダークラスを使用した通信」を参照してください。ベンダークラスインスタンスをデバイスの構成に追加するベンダークラスインスタンスを作成したら、関数USBD_Vendor_ConfigAdd()を呼び出して構成に追加できます。amp以下のファイルは、デフォルトの引数を使用して sl_usbd_vendor_add_to_configuration() を呼び出す方法を示しています。
Example – sl_usbd_vendor_add_to_configuration() を呼び出す

sl_status_t ステータス;

ステータス = sl_usbd_vendor_add_to_configuration(クラス番号、

(1)

config_nbr_fs);

(1)

if (ステータス ! SL_STATUS_OK) {

/* エラーが発生しました。ここにエラー処理を追加する必要があります。 */

}

(1) sl_usbd_vendor_create_instance() によって返される構成に追加するクラス番号。(2) 構成番号(ここではフルスピード構成に追加します)。
USBデバイスベンダークラスを使用した通信
一般的な同期通信、非同期通信、ベンダーリクエスト、一般的なVendorクラスは、ホストとの通信に以下の関数を提供します。関数のパラメータの詳細については、USBデバイスベンダーAPIを参照してください。
表 – ベンダー通信APIの概要

関数名
sl_usb d _v e nd または _ read _b ulk_sy nc() sl_usb d _v e nd または _ write _b ulk_sy nc() sl_usb d _v e nd または _ read _b ulk_asy nc() sl_usb d _v e nd または _ write _b ulk_asy nc() sl_usb d _v e nd または _ read _inte rrup t_sy nc() sl_usb d _v e nd または _ write _inte rrup t_sy nc() sl_usb d _v e nd または _ read _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-
ブロッキング。
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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

55/174

以上view

Synchronous communication means that the transfer is blocking. When a function is called, the application blocks until the transfer completes with or without an error. A timeout can be specified to avoid waiting forever. The example below shows a read and write that receives data from the host using the bulk OUT endpoint and sends data to the host using the bulk IN endpoint.
Example – Synchronous Bulk Read and Write

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

uint32_t

xfer_len;

sl_status_t

状態;

status = sl_usbd_vendor_read_bulk_sync(class_nbr,

(1)

(void *)&rx_buf[0],

(1)

2u、

0u、

(1)

&xfer_len);

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

status = sl_usbd_vendor_write_bulk_sync( class_nbr,

(1)

(void *)&tx_buf[0],

(1)

2u、

0u、

(1)

false,

(1)

&xfer_len);

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

(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)アプリケーションは初期化された送信バッファを提供します。
(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.
非同期通信
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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

56/174

以上view

void app_usbd_vendor_comm (uint8_t class_nbr)

{

__ALIGNED(4) uint8_t rx_buf[2];

__ALIGNED(4) uint8_t tx_buf[2];

sl_status_t

状態;

status = sl_usbd_vendor_read_bulk_async(class_nbr,

(void *)&rx_buf[0],

(1)

2u、

app_usbd_vendor_rx_completed,

NULL);

(1)

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

status = sl_usbd_vendor_write_bulk_async(class_nbr,

(void *)&tx_buf[0],

(1)

2u、

app_usbd_vendor_tx_completed,

ヌル

(1)

false);

(1)

if (ステータス ! SL_STATUS_OK) {

/* $$$$ エラーを処理します。 */

}

}

(11) (10)
(11) (10)

static void app_usbd_vendor_rx_completed(uint8_t class_nbr,

(1)

void *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

void *p_callback_arg,

sl_status_t status)

{

if (ステータス ! SL_STATUS_OK) {

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

} それ以外 {

/* $$$$ エラーを処理します。 */

}

}

static void app_usbd_vendor_tx_completed(uint8_t class_nbr,

(1)

void *p_buf,

uint32_t buf_len,

uint32_t xfer_len,

void *p_callback_arg,

sl_status_t status)

{

if (ステータス ! SL_STATUS_OK) {

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

} それ以外 {

/* $$$$ エラーを処理します。 */

}

}

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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

57/174

以上view
(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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

58/174

以上view

#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 ステータス;

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;

(11) (10)

case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:

(1)

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:

(1)

req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;

// Fill buf with a pattern. Mem_Set((void *)&AppVendorReqBuf[0u],
「あ」、
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;

デフォルト:

(1)

// Request is not supported.

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

59/174

以上view

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構造体{

uint8_t bmRequestType; /* Characteristics of request.

*/

uint8_t bRequest; /* Specific request.

*/

uint16_t wValue; /* Varies according to request.

*/

uint16_t wIndex; /* Varies according to request; typically used as index.*/

uint16_t wLength; /* Transfer length if data stageプレゼント。

*/

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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

60/174

APIドキュメント
APIドキュメント
APIドキュメント
モジュールのリスト
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

説明
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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

61/174

USB Device API
USB Device API
USB Device API
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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

62/174

USB Device ACM API

USB Device ACM API

USB Device ACM API

USB Device CDC ACM API.
モジュール
a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
機能

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

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

63/174

USB Device ACM API
マクロ
#define SL_USBD_CDC_ACM_NBR_NONE 255u
モジュール。
#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
著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

64/174

USB Device ACM API

タイプ
空所

Direction N/A

Argument Name

MACROS GLOBAL CONSTANTS FUNCTION PROTOTYPES CDC ACM FUNCTIONS

Initialize the CDC ACM serial emulation subclass.
返品

Returns SL_STATUS_OK on success or another SL_STATUS code on failure.

説明

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.
パラメータ

タイプ
uint16_t
uint16_t

Direction Argument Name

説明

該当なし

line_state_interval Line state notification interval in milliseconds (value must

be a power of 2).

該当なし

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 *

該当なし

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.

返品

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.
パラメータ

タイプ
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.

返品

著作権 © 2025 シリコン ラボラトリーズ。 無断転載を禁じます。

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.
パラメータ

タイプ

方向

Argument Name

説明

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

ドキュメント / リソース

SILICON LABS USB Device Stack [pdf] 取扱説明書
USB Device Stack, Device Stack, Stack

参考文献

コメントを残す

あなたのメールアドレスは公開されません。 必須項目はマークされています *