สแต็คอุปกรณ์ USB
ข้อมูลจำเพาะ
- USB เวอร์ชัน: 1.5.1
- วันที่วางจำหน่าย: 21 กรกฎาคม 2025
- Simplicity SDK เวอร์ชัน: 2025.6.1
สินค้าเกินview
อุปกรณ์ USB ของ Silicon Labs มอบความอเนกประสงค์และ
การเชื่อมต่อ USB ที่ใช้งานง่ายสำหรับโครงการ IoT อำนวยความสะดวก
การสื่อสารระหว่างโคโปรเซสเซอร์เครือข่ายและโฮสต์
คุณสมบัติ
- สแต็กอุปกรณ์ USB ที่มีประสิทธิภาพ
- เหมาะสำหรับโครงการ IoT
- รองรับการสื่อสารระหว่างโคโปรเซสเซอร์เครือข่ายและ
เจ้าภาพ
คำแนะนำการใช้ผลิตภัณฑ์
การกำหนดค่าอุปกรณ์ USB
กำหนดค่าการตั้งค่าอุปกรณ์ USB ตามโครงการของคุณ
ข้อกำหนดโดยอ้างอิงจากส่วนการกำหนดค่าอุปกรณ์ USB
ในเอกสารประกอบ
คู่มือการเขียนโปรแกรมอุปกรณ์ USB
ทำตามคู่มือการเขียนโปรแกรมอุปกรณ์ USB เพื่อทำความเข้าใจวิธีการ
โปรแกรมและโต้ตอบกับอุปกรณ์ USB สำหรับต่างๆ
การประยุกต์ใช้งาน
คลาสอุปกรณ์ USB
ส่วนคลาสอุปกรณ์ USB ให้ข้อมูลมากกว่าview ของที่แตกต่างกัน
คลาสต่างๆ เช่น CDC ACM, HID, MSC SCSI และ Vendor Class เลือก
คลาสที่เหมาะสมตามฟังก์ชันการทำงานของอุปกรณ์ของคุณ
การแก้ไขปัญหาอุปกรณ์ USB
หากคุณพบปัญหาใด ๆ กับอุปกรณ์ USB โปรดดูที่
ส่วนการแก้ไขปัญหาอุปกรณ์ USB สำหรับวิธีแก้ไขและแก้ไขจุดบกพร่อง
เคล็ดลับ
โฮสต์ USB ระบบปฏิบัติการ Microsoft Windows
หากคุณใช้อุปกรณ์ USB กับระบบปฏิบัติการ Microsoft Windows USB
เจ้าภาพโปรดปฏิบัติตามแนวทางที่กำหนดไว้
เอกสารประกอบสำหรับการบูรณาการที่ราบรื่น
คำถามที่พบบ่อย
ถาม: ตัวอย่างทั่วไปมีอะไรบ้างampอุปกรณ์จำนวนน้อยที่ฉันสามารถสร้างได้โดยใช้
สแต็ค USB นี้เหรอ?
A: สแต็ก USB ช่วยให้คุณสามารถสร้างอุปกรณ์ เช่น
อะแดปเตอร์ USB เป็นอนุกรม เมาส์หรือคีย์บอร์ด ที่เก็บข้อมูลแบบถอดได้
อุปกรณ์และอุปกรณ์ที่กำหนดเอง
ถาม: มีข้อกำหนดซอฟต์แวร์เฉพาะใดๆ สำหรับการใช้งานนี้หรือไม่
สแต็คอุปกรณ์ USB?
A: ซอฟต์แวร์ที่เข้ากันได้ ได้แก่ Simplicity SDK, Simplicity
สตูดิโอ, Simplicity Commander, GCC (GNU Compiler Collection),
IAR Embedded Workbench สำหรับ ARM และ IAR EWARM
บัสอนุกรมสากล USB
บัสอนุกรมสากล USB
USB เหนือview เกินview
หมายเหตุการเปิดตัว USB
ข้อมูลจำเพาะและคุณสมบัติต่างๆview
การกำหนดค่าอุปกรณ์ USB เสร็จสิ้นview
คู่มือการเขียนโปรแกรมอุปกรณ์ USBview
คลาสอุปกรณ์ USB เหนือview คลาส ACM ของ CDC จบแล้วview คลาส HID เกินview คลาส MSC SCSI จบแล้วview ผู้ขายชั้นจบview
เอกสารประกอบ API ของ USB API อุปกรณ์ USB API ACM ของอุปกรณ์ USB 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 Device Core 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 Silicon Laboratories สงวนลิขสิทธิ์
1/174
บัสอนุกรมสากล USB
sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_ข้อมูล sl_usbd_msc_scsi_lun
API ของผู้จำหน่ายอุปกรณ์ USB sl_usbd_vendor_callbacks_t
เอกสาร API การแก้ไขปัญหาอุปกรณ์ USB
เกินview โฮสต์ USB ระบบปฏิบัติการ Microsoft Windows
เกินview
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
2/174
เกินview
เกินview
อุปกรณ์ USB
USB เป็นหนึ่งในอินเทอร์เฟซการสื่อสารที่ประสบความสำเร็จมากที่สุดในประวัติศาสตร์ของระบบคอมพิวเตอร์ และเป็นมาตรฐานโดยพฤตินัยสำหรับการเชื่อมต่ออุปกรณ์ต่อพ่วงคอมพิวเตอร์ USB Device stack ของ Silicon Labs คือโมดูลอุปกรณ์ USB ที่ออกแบบมาเฉพาะสำหรับระบบฝังตัว สร้างขึ้นตั้งแต่เริ่มต้นด้วยคุณภาพ ความสามารถในการปรับขนาด และความน่าเชื่อถือของ Silicon Labs ผ่านกระบวนการตรวจสอบที่เข้มงวดเพื่อให้สอดคล้องกับข้อกำหนด USB 2.0 เอกสารนี้อธิบายวิธีการเริ่มต้นใช้งาน เริ่มต้นใช้งาน และใช้งาน USB Device stack ของ Silicon Labs อธิบายค่าการกำหนดค่าต่างๆ และการใช้งาน นอกจากนี้ยังมีview ของเทคโนโลยี ประเภทของความเป็นไปได้ในการกำหนดค่า ขั้นตอนการใช้งาน และตัวอย่างampน้อยกว่าการใช้งานทั่วไปสำหรับทุกคลาสที่มีอยู่
เพื่อช่วยให้คุณเข้าใจแนวคิด USB ได้อย่างรวดเร็ว เอกสารประกอบมีตัวอย่างมากมายampของ USB ที่มีฟังก์ชั่นพื้นฐาน เช่นamples จะมอบกรอบงานให้คุณสร้างอุปกรณ์ได้อย่างรวดเร็ว ตัวอย่างเหล่านี้ampรวมถึง:
อะแดปเตอร์ USB เป็นอนุกรม (คลาสอุปกรณ์สื่อสาร) เมาส์หรือคีย์บอร์ด (คลาสอุปกรณ์อินเทอร์เฟซสำหรับมนุษย์) อุปกรณ์จัดเก็บข้อมูลแบบถอดได้ (คลาสอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่) อุปกรณ์ที่กำหนดเอง (คลาสผู้จำหน่าย)
ต่อไปนี้เป็นอันจบแล้วview ของส่วนเอกสาร:
ข้อมูลจำเพาะและคุณลักษณะ การกำหนดค่าอุปกรณ์ USB คู่มือการเขียนโปรแกรมอุปกรณ์ USB คลาสอุปกรณ์ USB
คลาส CDC ACM คลาส HID คลาส MSC SCSI คลาส Vendor การแก้ไขปัญหาอุปกรณ์ USB โฮสต์ USB ระบบปฏิบัติการ Microsoft Windows
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
3/174
ยูเอสบี
ยูเอสบี
USB เวอร์ชัน 1.5.1 21 กรกฎาคม 2025 – หมายเหตุการเผยแพร่
Simplicity SDK เวอร์ชัน 2025.6.1
สแต็กอุปกรณ์ USB ประสิทธิภาพสูงจาก Silicon Labs มอบการเชื่อมต่อ USB ที่หลากหลายและใช้งานง่าย เหมาะสำหรับโครงการ IoT รวมถึงการสื่อสารระหว่างโคโปรเซสเซอร์เครือข่ายและโฮสต์ คลิกที่นี่เพื่อดูรุ่นก่อนหน้า
สรุปการเปิดตัว
คุณสมบัติหลัก | การเปลี่ยนแปลง API | การแก้ไขข้อบกพร่อง | การเปิดใช้งานชิป
คุณสมบัติหลัก
การเปลี่ยนแปลงแพลตฟอร์มพื้นฐานเท่านั้น
การเปลี่ยนแปลง API
ไม่มี.
การแก้ไขจุดบกพร่อง
ไม่มี.
การเปิดใช้งานชิป
ไม่มี.
คุณสมบัติหลัก
คุณสมบัติใหม่ | การปรับปรุง | คุณสมบัติที่ถูกลบออก | คุณสมบัติที่ไม่ใช้แล้ว
คุณสมบัติใหม่
ไม่มี.
การปรับปรุง
การเปลี่ยนแปลงแพลตฟอร์มพื้นฐานเท่านั้น
คุณสมบัติที่ถูกลบออก
ไม่มี.
คุณสมบัติที่เลิกใช้
ไม่มี.
การเปลี่ยนแปลง API
API ใหม่ | API ที่แก้ไข | API ที่ถูกลบ | API ที่ไม่รองรับอีกต่อไป
API ใหม่
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
4/174
ยูเอสบี
ไม่มี.
API ที่ได้รับการปรับเปลี่ยน
ไม่มี.
API ที่ถูกลบออก
ไม่มี.
API ที่ไม่รองรับอีกต่อไป
ไม่มี.
การแก้ไขจุดบกพร่อง
ไม่มี.
การเปิดใช้งานชิป
ไม่มี.
ใบสมัครampการเปลี่ยนแปลง
อดีตใหม่amples | Modified Examples | Removed Examples | ไม่แนะนำให้ใช้ Exampเลส
อดีตใหม่ampเลส
ไม่มี.
ดัดแปลงอดีตampเลส
ไม่มี.
ลบออกเช่นampเลส
ไม่มี.
ไม่สนับสนุน Exampเลส
ไม่มี.
ผลกระทบของการเปลี่ยนแปลงการเปิดตัว
คำชี้แจงผลกระทบ | คู่มือการย้ายถิ่นฐาน
คำชี้แจงผลกระทบ
ไม่มี.
คู่มือการโยกย้าย
ไม่มี.
ปัญหาและข้อจำกัดที่ทราบ
ไม่มี.
การใช้ข่าวประชาสัมพันธ์ฉบับนี้
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
5/174
ยูเอสบี
มีอะไรอยู่ในรุ่นวางจำหน่าย | ซอฟต์แวร์ที่เข้ากันได้ | การติดตั้งและการใช้งาน | ความช่วยเหลือและข้อเสนอแนะ
มีอะไรอยู่ในรุ่นวางจำหน่าย?
แอปพลิเคชัน USB Device Stack Exampเลส
ซอฟต์แวร์ที่เข้ากันได้
ซอฟต์แวร์
Simplicity SDK Simplicity Studio Simplicity Commander GCC คอลเล็กชันคอมไพเลอร์ GNU) IAR Embedded Workbench สำหรับ 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 Silicon Laboratories สงวนลิขสิทธิ์
6/174
เกินview
เกินview
ข้อมูลจำเพาะ
สอดคล้องกับ “ข้อกำหนด Universal Serial Bus ฉบับปรับปรุง 2.0” ใช้งาน “Interface Association Descriptor Engineering Change Notice (ECN)” ประเภทการถ่ายโอน
คลาสการควบคุมการขัดจังหวะ USB จำนวนมาก คลาสอุปกรณ์สื่อสาร (CDC) แบบจำลองการควบคุมนามธรรม (ACM) อุปกรณ์อินเทอร์เฟซสำหรับมนุษย์ (HID) คลาสการจัดเก็บข้อมูลขนาดใหญ่ (MSC) กรอบงานคลาสเฉพาะของผู้จำหน่าย
คุณสมบัติ
ปรับขนาดได้เพื่อรวมเฉพาะฟีเจอร์ที่จำเป็นเพื่อลดการใช้หน่วยความจำ รองรับความเร็วเต็ม (12 Mbit/s) รองรับอุปกรณ์แบบผสม (หลายฟังก์ชัน) รองรับอุปกรณ์ที่มีการกำหนดค่าหลายแบบ รองรับฟังก์ชันประหยัดพลังงาน USB (อุปกรณ์พักและกลับมาทำงานต่อ) การผสานรวม Mass Storage Class เข้ากับ Micrium OS อย่างสมบูรณ์ File โมดูลระบบที่พัฒนาด้วยเลเยอร์นามธรรม CMSIS-RTOS2 เพื่อให้สามารถทำงานร่วมกับระบบปฏิบัติการต่างๆ ได้ Silicon Labs GSDK มาพร้อมกับพอร์ต FreeRTOS และ Micrium OS
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
7/174
เกินview
เกินview
การกำหนดค่าอุปกรณ์ USB
หัวข้อนี้จะอธิบายวิธีการกำหนดค่าอุปกรณ์ USB ของ Silicon Labs โดยมีพารามิเตอร์การกำหนดค่าสามกลุ่ม ดังนี้
การกำหนดค่าหลักของอุปกรณ์ USB ข้อมูลอุปกรณ์ USB การกำหนดค่า การกำหนดค่าฮาร์ดแวร์อุปกรณ์ USB
การกำหนดค่าแกนอุปกรณ์ USB
อุปกรณ์ USB ของ Silicon Labs สามารถกำหนดค่าได้ในเวลาคอมไพล์ผ่านชุด #defines ที่อยู่ใน sl_usbd_core_config.h fileอุปกรณ์ USB จะใช้ #defines เมื่อทำได้ เนื่องจากอนุญาตให้ปรับขนาดโค้ดและข้อมูลขณะคอมไพล์ตามฟีเจอร์ที่เปิดใช้งาน ซึ่งช่วยให้สามารถปรับพื้นที่หน่วยความจำแบบอ่านอย่างเดียว (ROM) และหน่วยความจำเข้าถึงโดยสุ่ม (RAM) ของอุปกรณ์ USB Silicon Labs ได้ตามข้อกำหนดของแอปพลิเคชัน
แนะนำ: เริ่มกระบวนการกำหนดค่าด้วยค่าเริ่มต้น (เน้นเป็นตัวหนา)
ส่วนต่างๆ ด้านล่างนี้ได้รับการจัดเรียงตามลำดับในการกำหนดค่าเทมเพลต file, sl_usbd_core_config.h
คลาสการกำหนดค่าหลัก การกำหนดค่า
การกำหนดค่าแกนหลัก
ตาราง – ค่าคงที่การกำหนดค่าหลักของอุปกรณ์ USB
คำอธิบายคงที่
ค่าเริ่มต้น
SL_USBD_TA SK_STACK_ ขนาด
กำหนดค่าขนาดสแต็กเป็นไบต์ของงานหลักของ USBD
4096
SL_USBD_TA SK_PRIORIT Y
กำหนดลำดับความสำคัญของงานหลักของ USBD นี่คือลำดับความสำคัญของ CMSIS-RTOS2
osPriorityHigh
SL_USBD_A UTO_START _USB_DEVIC อี
หากเปิดใช้งาน อุปกรณ์ USB จะเริ่มทำงานโดยอัตโนมัติเมื่อเคอร์เนลเริ่มทำงาน และมีการกำหนดเวลางาน USBD core 1 ครั้งแรก หากปิดใช้งาน แอปพลิเคชันของคุณจะต้องเรียกใช้ sl_usbd_core_start_device() เมื่อพร้อมให้โฮสต์ USB ตรวจพบ
SL_USBD_C จำนวนการกำหนดค่าทั้งหมดที่จะถูกเพิ่มผ่าน sl_usbd_add_configuration()
1
ฟังก์ชั่น ONFIGURATI
ออน_ควอนติ
TY
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
8/174
เกินview
คงที่
SL_USBD _INTERF ACE_QU การป้องกัน
SL_USBD _ALT_INT ERFACE_ ปริมาณ
TY
SL_USBD _INTERF ACE_GR
OUP_QU
ต่อต้าน
SL_USBD _คำอธิบาย
พีทีโออาร์_คิว
ความเป็นอันหนึ่งอันเดียวกัน
SL_USBD _STRING _QUANTI
TY
SL_USBD _OPEN_E NDPOIN TS_QUA NTITY
คำอธิบาย จำนวนอินเทอร์เฟซ USB ทั้งหมดที่จะเพิ่มสำหรับการกำหนดค่าทั้งหมดของคุณ ซึ่งขึ้นอยู่กับคลาสที่ใช้เป็นอย่างมาก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับจำนวนอินเทอร์เฟซที่อินสแตนซ์คลาสต้องการ โปรดดูส่วน "ความต้องการทรัพยากรจากแกนหลัก" ของคลาสของคุณ
จำนวนอินเทอร์เฟซสำรอง USB ทั้งหมดที่จะเพิ่มสำหรับการกำหนดค่าทั้งหมดของคุณ ซึ่งขึ้นอยู่กับคลาสที่ใช้ ค่านี้ต้องเท่ากับหรือมากกว่า SL_USBD_INTERFACE_QUANTITY เสมอ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับจำนวนอินเทอร์เฟซสำรองที่อินสแตนซ์คลาสต้องการ โปรดดูส่วน "ความต้องการทรัพยากรจากแกนหลัก" ของคลาสของคุณ
จำนวนกลุ่มอินเทอร์เฟซ USB ทั้งหมดที่จะถูกเพิ่มสำหรับการกำหนดค่าทั้งหมดของคุณ ซึ่งขึ้นอยู่กับคลาสที่ใช้เป็นอย่างมาก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับจำนวนกลุ่มอินเทอร์เฟซที่จำเป็นต้องใช้อินสแตนซ์คลาส โปรดดูส่วน "ความต้องการทรัพยากรจากแกนหลัก" ของคลาสของคุณ
จำนวนตัวอธิบายจุดสิ้นสุดทั้งหมดที่จะถูกเพิ่มสำหรับการกำหนดค่าทั้งหมดของคุณ ซึ่งขึ้นอยู่กับคลาสที่ใช้เป็นอย่างมาก สำหรับข้อมูลเพิ่มเติมเกี่ยวกับจำนวนตัวอธิบายจุดสิ้นสุดที่อินสแตนซ์คลาสต้องการ โปรดดูที่ “จำนวนจุดสิ้นสุด” ในส่วน “ความต้องการทรัพยากรจากแกนหลัก” ของคลาสของคุณ โปรดทราบว่าไม่จำเป็นต้องพิจารณาจุดสิ้นสุดการควบคุมที่นี่ จำนวนสตริง USB ทั้งหมด การตั้งค่าจำนวนเป็นศูนย์จะปิดใช้งานฟีเจอร์นี้ การปิดใช้งานนี้จะทำให้อุปกรณ์ไม่เก็บสตริงคำอธิบาย USB ใดๆ ที่ส่งผ่านจากแอปพลิเคชัน ซึ่งหมายความว่าโฮสต์จะไม่สามารถดึงสตริงคำอธิบาย (เช่น ผู้ผลิตและชื่อผลิตภัณฑ์) จำนวนจุดสิ้นสุดที่เปิดทั้งหมดต่อการกำหนดค่า อุปกรณ์จำเป็นต้องมีจุดสิ้นสุดที่เปิดอย่างน้อยสองจุดสำหรับการถ่ายโอนการควบคุม แต่คุณต้องเพิ่มจุดสิ้นสุดของคลาสที่ใช้ด้วย สำหรับข้อมูลเพิ่มเติมเกี่ยวกับจำนวนจุดสิ้นสุดที่เปิดที่อินสแตนซ์คลาสต้องการ โปรดดูที่ “จำนวนจุดสิ้นสุด” ในส่วน “ความต้องการทรัพยากรจากแกนหลัก” ของคลาสของคุณ
ค่าเริ่มต้น
10 10
2
20 30 20
การกำหนดค่าคลาส
คลาสต่างๆ มีการกำหนดค่าเฉพาะเวลาคอมไพล์ โปรดดูรายละเอียดเพิ่มเติมในคลาสอุปกรณ์ USB
การกำหนดค่าข้อมูลอุปกรณ์ USB
การกำหนดค่า sl_usbd_device_config.h file จัดกลุ่มใหม่ #define-s ในเวลาคอมไพล์เพื่อกำหนดข้อมูลพื้นฐานเกี่ยวกับอุปกรณ์ของคุณ เช่น รหัสผู้ขาย/ผลิตภัณฑ์ สตริงอุปกรณ์ ฯลฯ ตารางด้านล่างอธิบายการกำหนดค่าข้อมูลแต่ละรายการที่พร้อมใช้งานในการกำหนดค่านี้ file.
ตาราง – การกำหนดค่าข้อมูลอุปกรณ์ USB กำหนด
คงที่
รหัสผู้จำหน่าย SL_USBD_DEVIC
รหัสผลิตภัณฑ์ SL_USBD_DEVIC
คำอธิบาย หมายเลขประจำตัวผู้ขายของคุณตามที่ USB Implementers Forum จัดส่งให้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีรับรหัสประจำตัวผู้ขาย โปรดดูที่ http://www.usb.org/developers/vendor/ หมายเลขประจำตัวผลิตภัณฑ์ของคุณ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
9/174
เกินview
คงที่
คำอธิบาย
SL_USBD_DEVICE_RELEASE หมายเลขรุ่นของอุปกรณ์ของคุณ _NUMBER
สตริง SL_USBD_DEVICE_MANUFA ที่อธิบายผู้ผลิตอุปกรณ์ของคุณ การกำหนดค่านี้จะถูกละเว้นเมื่อ
สตริง CTURER
การกำหนดค่า 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
– SL_USBD_LANG_ID_อาหรับ_ซาอุดิอาราเบีย
– SL_USBD_LANG_ID_จีนไต้หวัน
– SL_USBD_LANG_ID_ภาษาอังกฤษ_สหรัฐอเมริกา
– SL_USBD_LANG_ID_ภาษาอังกฤษ_สหราชอาณาจักร
– SL_USBD_LANG_ID_ภาษาฝรั่งเศส
– SL_USBD_LANG_ID_ภาษาเยอรมัน
– SL_USBD_LANG_ID_กรีก
– SL_USBD_LANG_ID_ภาษาอิตาลี
– SL_USBD_LANG_ID_โปรตุเกส
– SL_USBD_LANG_ID_สันสกฤต
การกำหนดค่านี้จะถูกละเว้นเมื่อการกำหนดค่า SL_USBD_STRING_QUANTITY ถูกตั้งค่าเป็น 0
การกำหนดค่าฮาร์ดแวร์อุปกรณ์ USB
ขึ้นอยู่กับอุปกรณ์ Silicon Labs ที่คุณใช้ คุณอาจมีพินและพอร์ต GPIO สำหรับกำหนดค่าสัญญาณ USB VBUS Sense การกำหนดค่าที่กำหนดไว้อยู่ในส่วนหัว sl_usbd_hardware_config.h file.
คงที่
พอร์ตไดรเวอร์ USBD_VBUS_SENSE SL_USBD_DRIVER_VBUS_SENSE_PIN
คำอธิบาย
พอร์ต GPIO สำหรับสัญญาณ USB VBUS Sense บนบอร์ดของคุณ พิน GPIO สำหรับสัญญาณ USB VBUS Sense บนบอร์ดของคุณ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
10/174
เกินview
เกินview
คู่มือการเขียนโปรแกรมอุปกรณ์ USB
ส่วนนี้จะอธิบายวิธีการใช้งานโมดูลอุปกรณ์ USB
การตั้งค่าเริ่มต้นของโมดูลอุปกรณ์ USB
ส่วนนี้อธิบายขั้นตอนพื้นฐานที่จำเป็นในการเริ่มต้นโมดูลอุปกรณ์ USB และการเพิ่ม เตรียม และเริ่มต้นอุปกรณ์ การเริ่มต้นโมดูลอุปกรณ์ USB การเริ่มต้นแกนหลักของอุปกรณ์ USB การเริ่มต้น aCl การเพิ่มอุปกรณ์ USB การสร้างอุปกรณ์ USB การเพิ่มการกำหนดค่า การเพิ่มฟังก์ชัน USB การเริ่มต้นอุปกรณ์ USB
ฟังก์ชัน Event Hook
การเริ่มต้นโมดูลอุปกรณ์ USB
การเริ่มต้นอุปกรณ์ USB Core
a เริ่มต้นโดยการเริ่มต้นโมดูลอุปกรณ์หลัก B โดยเรียกใช้ฟังก์ชัน sl_usbd_core_init() ตัวอย่างด้านล่างแสดงการเรียกใช้ฟังก์ชัน 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 ให้กับอุปกรณ์ได้ โดยเริ่มจากการกำหนดค่าใหม่ อุปกรณ์ต้องมีการกำหนดค่าอย่างน้อยหนึ่งรายการ หากต้องการเพิ่มการกำหนดค่า ให้เรียกใช้ฟังก์ชัน aa sl_usbd_core_ dd_configur tion() ฟังก์ชันนี้ต้องถูกเรียกใช้สำหรับการกำหนดค่าแต่ละรายการที่คุณต้องการเพิ่ม ตัวอย่างampด้านล่างนี้แสดงวิธีการเพิ่มความเร็วเต็มสปีด
Example – การเพิ่มการกำหนดค่าลงในอุปกรณ์ของคุณ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
11/174
เกินview
สถานะ sl_status_t; uint8_t config_nbr_fs;
/* เพิ่มการกำหนดค่าความเร็วเต็มให้กับอุปกรณ์ */
สถานะ = sl_usbd_core_add_configuration(0,
/* ไม่มีแอตทริบิวต์พิเศษในการกำหนดค่า */
100u,
/* การใช้พลังงานสูงสุด: 100mA.
*/
SL_USBD_DEVICE_SPEED_เต็ม
/* การกำหนดค่าความเร็วเต็มรูปแบบ
*/
“กำหนดค่าเพิ่ม Exampการกำหนดค่า Full-Speed”
&config_nbr_fs);
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
การเพิ่มฟังก์ชั่น USB
หลังจากที่คุณเพิ่มการกำหนดค่าอย่างน้อยหนึ่งรายการลงในอุปกรณ์ของคุณเรียบร้อยแล้ว คุณสามารถเพิ่มอินเทอร์เฟซและจุดสิ้นสุดลงในอุปกรณ์ของคุณได้ แต่ละคลาส USB มีความต้องการที่แตกต่างกันในแง่ของอินเทอร์เฟซและจุดสิ้นสุด ประเภท ปริมาณ และพารามิเตอร์อื่นๆ อุปกรณ์ USB ของ Silicon Labs เพิ่มอินเทอร์เฟซและจุดสิ้นสุดในคลาสต่างๆ ที่มีให้บริการ
จากแอปพลิเคชันของคุณ คุณสามารถสร้างอินสแตนซ์คลาส USB และเพิ่มลงในคอนฟิกูเรชันได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแนวคิดของอินสแตนซ์คลาสอุปกรณ์ USB โปรดดูที่ คลาสอุปกรณ์ USB โปรดทราบว่าคุณสามารถสร้างอินสแตนซ์และเพิ่มอินสแตนซ์คลาสต่างๆ ลงในคอนฟิกูเรชันเพื่อสร้างอุปกรณ์แบบมัลติฟังก์ชัน (คอมโพสิต) ได้
อดีตampด้านล่างนี้แสดงวิธีการสร้างอินสแตนซ์คลาสและเพิ่มลงในการกำหนดค่า
Example – การเพิ่มอินสแตนซ์คลาสให้กับอุปกรณ์ของคุณ
sl_status_t สถานะ; uint8_t class_nbr;
/* สร้างอินสแตนซ์ของคลาสที่คุณต้องการใช้*/ /* โปรดทราบว่าฟังก์ชันนี้สามารถมีอาร์กิวเมนต์ได้มากกว่านี้ ขึ้นอยู่กับคลาส */ status = sl_usbd_ _create_instance(&class_nbr); if (status ! SL_STATUS_OK) { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */ }
/* เพิ่มอินสแตนซ์คลาสลงในการกำหนดค่า Full-Speed */ สถานะ = sl_usbd_ _add_to_configuration(class_nbr, /* หมายเลขคลาสที่ส่งคืนโดย sl_usbd_ _สร้าง_อินสแตนซ์ */
config_nbr_fs); /* หมายเลขการกำหนดค่าที่ส่งคืนโดย sl_usbd_core_add_configuration() */ if (status ! SL_STATUS_OK) { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */ }
การเริ่มอุปกรณ์ USB ของคุณ
โดยค่าเริ่มต้น อุปกรณ์จะเริ่มทำงานโดยอัตโนมัติโดยงานหลักของอุปกรณ์ USB หลังจากการเริ่มต้นอุปกรณ์เสร็จสิ้นและเคอร์เนลเริ่มทำงาน หากต้องการควบคุมเวลาที่อุปกรณ์เริ่มทำงานและมองเห็นได้โดยโฮสต์ USB ให้ใช้การกำหนดค่า define SL_USBD_AUTO_START_USB_DEVICE เพื่อปิดใช้งานคุณสมบัติการเริ่มต้นอัตโนมัติ เมื่อปิดใช้งานแล้ว หลังจากที่คุณสร้าง/เตรียมอุปกรณ์แล้ว คุณสามารถเริ่มต้นใช้งานและทำให้โฮสต์ USB มองเห็นได้โดยการเรียกใช้ฟังก์ชัน sl_usbd_core_start_device()
อดีตampด้านล่างนี้แสดงวิธีเริ่มต้นอุปกรณ์ของคุณโดยใช้ฟังก์ชัน sl_usbd_core_start_device()
Example – การเริ่มต้นอุปกรณ์ของคุณ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
12/174
เกินview
สถานะ sl_status_t;
สถานะ = sl_usbd_core_start_device(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */ }
ฟังก์ชัน Event Hook
โมดูลหลักของอุปกรณ์ USB นำเสนอฟังก์ชัน Weak Hook สองฟังก์ชันที่คุณสามารถกำหนดค่าใหม่ในแอปพลิเคชันของคุณได้ วัตถุประสงค์คือการแจ้งเตือนเมื่อเกิดเหตุการณ์บัสและการกำหนดค่า
ตาราง – ฟังก์ชัน USB Event Hook
เหตุการณ์
คำอธิบาย
รสบัส
เรียกเมื่อเหตุการณ์ USB Bus เกิดขึ้น
การกำหนดค่าจะถูกเรียกเมื่อเหตุการณ์การกำหนดค่า USB เกิดขึ้น
ลายเซ็นฟังก์ชัน
เป็นโมฆะ sl_usbd_on_bus_event(เหตุการณ์ sl_usbd_bus_event_t); เป็นโมฆะ sl_usbd_on_config_event(เหตุการณ์ sl_usbd_config_event_t, uint8_t config_nbr);
Example – ฟังก์ชัน Event Hook
void sl_usbd_on_bus_event(เหตุการณ์ sl_usbd_bus_event_t) { สวิตช์ (เหตุการณ์) { กรณี SL_USBD_EVENT_BUS_CONNECT:
// เรียกเมื่อเสียบสาย USB เข้าไปในตัวควบคุมโฮสต์เบรก
กรณี SL_USBD_EVENT_BUS_DISCONNECT: // เรียกเมื่อถอดสาย USB ออกจากตัวควบคุมโฮสต์ที่พัง
กรณี SL_USBD_EVENT_BUS_RESET: // เรียกเมื่อโฮสต์ส่งคำสั่งรีเซ็ต break;
กรณี SL_USBD_EVENT_BUS_SUSPEND: // เรียกเมื่อโฮสต์ส่งคำสั่งระงับ break;
กรณี SL_USBD_EVENT_BUS_RESUME: // เรียกเมื่อโฮสต์ส่งคำสั่งปลุก break;
ค่าเริ่มต้น: ทำลาย; } }
void sl_usbd_on_config_event(เหตุการณ์ sl_usbd_config_event_t, uint8_t config_nbr) { สวิตช์ (เหตุการณ์) { กรณี SL_USBD_EVENT_CONFIG_SET:
// เรียกเมื่อโฮสต์ตั้งค่าการหยุดการกำหนดค่า
กรณี SL_USBD_EVENT_CONFIG_UNSET: // เรียกเมื่อไม่ได้ตั้งค่าคอนฟิกูเรชัน break;
ค่าเริ่มต้น: ทำลาย; } }
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
13/174
เกินview
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
14/174
เกินview
เกินview
คลาสอุปกรณ์ USB
คลาส USB ที่มีอยู่ในอุปกรณ์ USB ของ Silicon Labs มีลักษณะร่วมกันบางประการ ส่วนนี้จะอธิบายลักษณะเหล่านี้และปฏิสัมพันธ์กับเลเยอร์หลัก
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับคลาสเฉพาะ โปรดดูต่อไปนี้:
คลาส CDC ACM คลาส HID คลาส MSC SCSI คลาส Vendor
เกี่ยวกับคลาสอินสแตนซ์
คลาส USB ที่มีอยู่ในอุปกรณ์ USB ใช้งานแนวคิดของคลาสอินสแตนซ์ คลาสอินสแตนซ์แสดงถึงฟังก์ชันหนึ่งภายในอุปกรณ์ ฟังก์ชันนี้สามารถอธิบายได้ด้วยอินเทอร์เฟซหนึ่งตัวหรือกลุ่มอินเทอร์เฟซ และจัดอยู่ในคลาสเฉพาะ
การใช้งานคลาส USB แต่ละคลาสมีการกำหนดค่าและฟังก์ชันบางอย่างที่เหมือนกัน โดยอิงตามแนวคิดของอินสแตนซ์คลาส การกำหนดค่าและฟังก์ชันทั่วไปแสดงอยู่ในตารางด้านล่าง ในคอลัมน์ชื่อ "ค่าคงที่หรือฟังก์ชัน" สามารถใช้ชื่อคลาสแทน XXXX ได้ เช่น CDC, HID, MSC, CDC_ACM หรือ VENDOR (Vendor สำหรับชื่อฟังก์ชัน)
ตาราง – ค่าคงที่และฟังก์ชันที่เกี่ยวข้องกับแนวคิดของอินสแตนซ์คลาสหลายคลาส
ค่าคงที่หรือฟังก์ชัน
SL_USBD_XXXX_CL ASS_INS จำนวน
SL_USBD_XXXX_กำหนดค่าจำนวน ATION_QUANTITY
sl_usb d _XXXX_cre ate _insta nce ()
sl_usbd_XXXX_add_to_conf igration()
คำอธิบาย
กำหนดค่าจำนวนสูงสุดของอินสแตนซ์คลาส
กำหนดค่าจำนวนสูงสุดของการกำหนดค่า ระหว่างการเริ่มต้นคลาส อินสแตนซ์คลาสที่สร้างขึ้นจะถูกเพิ่มเข้าไปในการกำหนดค่าอย่างน้อยหนึ่งรายการ สร้างอินสแตนซ์คลาสใหม่
เพิ่มอินสแตนซ์คลาสที่มีอยู่ลงในการกำหนดค่าอุปกรณ์ที่ระบุ
ในแง่ของการนำโค้ดไปใช้งาน คลาสจะประกาศตัวแปรโกลบอลแบบโลคัลที่มีโครงสร้างควบคุมคลาส โครงสร้างควบคุมคลาสนี้จะเชื่อมโยงกับอินสแตนซ์คลาสหนึ่ง และจะมีข้อมูลเฉพาะสำหรับจัดการอินสแตนซ์คลาสนั้น
รูปภาพต่อไปนี้แสดงสถานการณ์จำลองหลายกรณี แต่ละรูปประกอบด้วยตัวอย่างรหัสample ที่สอดคล้องกับสถานการณ์ที่เกิดขึ้น
รูป – อินสแตนซ์คลาสหลายตัว – อุปกรณ์ FS (การกำหนดค่า 1 รายการพร้อมอินเทอร์เฟซ 1 รายการ) แสดงอุปกรณ์ USB ทั่วไป อุปกรณ์นี้เป็นแบบ Full-Speed (FS) และมีการกำหนดค่าเพียงรายการเดียว ฟังก์ชันของอุปกรณ์อธิบายโดยอินเทอร์เฟซหนึ่งรายการที่ประกอบด้วยจุดสิ้นสุดสองจุดสำหรับการสื่อสารข้อมูล อินสแตนซ์คลาสหนึ่งรายการจะถูกสร้างขึ้นและช่วยให้คุณสามารถจัดการอินเทอร์เฟซทั้งหมดพร้อมกับจุดสิ้นสุดที่เกี่ยวข้องได้
รูปภาพ – อินสแตนซ์คลาสหลายตัว – การกำหนดค่าอุปกรณ์ FS 1 พร้อมอินเทอร์เฟซ 1 ตัว
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
15/174
เกินview
โค้ดที่สอดคล้องกับรูป – Multiple Class Instances – FS Device (1 Configuration with 1 Interface) จะแสดงในตัวอย่างampอยู่ด้านล่าง
Example – Multiple Class Instances – การกำหนดค่าอุปกรณ์ FS 1 พร้อมอินเทอร์เฟซ 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 คลาส_callbacks = {
(1)
.enable = app_usbd_XXXX_enable,
.ปิดใช้งาน = app_usbd_XXXX_ปิดใช้งาน
};
สถานะ = sl_usbd_XXXX_init();
(2)
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ จัดการข้อผิดพลาด */
}
สถานะ = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&คลาส_0);
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ จัดการข้อผิดพลาด */
}
สถานะ = sl_usbd_XXXX_add_to_configuration(class_0, config_0);
(4)
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ จัดการข้อผิดพลาด */
}
(1) แต่ละคลาสมีชุดฟังก์ชันคอลแบ็กสำหรับเหตุการณ์เชื่อมต่อ/ตัดการเชื่อมต่ออุปกรณ์ และเหตุการณ์เฉพาะคลาส อ็อบเจ็กต์โครงสร้างคอลแบ็กจะถูกส่งเป็นอาร์กิวเมนต์เมื่อสร้างอินสแตนซ์คลาสด้วย sl_usbd_XXXX_create_instance()
การทำงาน.
(1) เริ่มต้นคลาส ตัวแปรภายใน โครงสร้าง และพอร์ตของคลาสทั้งหมดจะถูกเริ่มต้น โปรดทราบว่าฟังก์ชัน Init() ในบางคลาสอาจรับอาร์กิวเมนต์อื่นได้
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
16/174
เกินview
(2) สร้างอินสแตนซ์คลาส ซึ่งคือ class_0 ฟังก์ชัน sl_usbd_XXXX_create_instance() จะจัดสรรโครงสร้างการควบคุมคลาสที่เชื่อมโยงกับ class_0 ฟังก์ชัน sl_usbd_XXXX_create_instance() อาจมีพารามิเตอร์เพิ่มเติมนอกเหนือจากหมายเลขคลาส ซึ่งแสดงข้อมูลเฉพาะคลาสที่เก็บไว้ในโครงสร้างการควบคุมคลาส ขึ้นอยู่กับคลาส aaa (3) เพิ่มอินสแตนซ์คลาส nce, class_0 ลงในหมายเลขการกำหนดค่าที่ระบุ คือ config_0 ฟังก์ชัน sl_usbd_XXXX_add_to_configuration() จะสร้างอินเทอร์เฟซ 0 และจุดสิ้นสุด IN และ OUT ที่เกี่ยวข้อง ดังนั้น อินสแตนซ์คลาสจึงครอบคลุมอินเทอร์เฟซ 0 และจุดสิ้นสุด การสื่อสารใดๆ ที่ทำบนอินเทอร์เฟซ 0 จะใช้หมายเลขอินสแตนซ์คลาส คือ class_0 รูปภาพ – อินสแตนซ์คลาสหลายรายการ – อุปกรณ์ FS (การกำหนดค่า 2 รายการและอินเทอร์เฟซหลายรายการ) แสดงตัวอย่างที่ซับซ้อนยิ่งขึ้นampอุปกรณ์ความเร็วเต็มประกอบด้วยสองรูปแบบ อุปกรณ์มีสองฟังก์ชันที่อยู่ในคลาสเดียวกัน แต่แต่ละฟังก์ชันอธิบายโดยอินเทอร์เฟซสองส่วนและมีจุดสิ้นสุดแบบสองทิศทางคู่หนึ่ง ในตัวอย่างนี้ample มีการสร้างอินสแตนซ์คลาสสองคลาส แต่ละอินสแตนซ์คลาสจะเชื่อมโยงกับกลุ่มอินเทอร์เฟซ ซึ่งแตกต่างจาก Figure – Multiple Class Instances – FS Device (การกำหนดค่า 1 รายการพร้อมอินเทอร์เฟซ 1 รายการ) และ Figure – Multiple Class Instances – FS Device (การกำหนดค่า 2 รายการและอินเทอร์เฟซหลายรายการ) ซึ่งอินสแตนซ์คลาสจะเชื่อมโยงกับอินเทอร์เฟซเดียว
รูปภาพ – อินสแตนซ์คลาสหลายรายการ – การกำหนดค่าอุปกรณ์ FS 2 และอินเทอร์เฟซหลายรายการ)
โค้ดที่สอดคล้องกับรูป – Multiple Class Instances – อุปกรณ์ FS (การกำหนดค่า 2 แบบและอินเทอร์เฟซหลายแบบ) จะแสดงในตัวอย่างample ด้านล่าง การจัดการข้อผิดพลาดถูกละเว้นเพื่อความชัดเจน
Example – อินสแตนซ์คลาสหลายรายการ – การกำหนดค่าอุปกรณ์ FS 2 และอินเทอร์เฟซหลายรายการ)
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
17/174
เกินview
sl_status_t สถานะ; uint8_t class_0; uint8_t class_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)
(2) (3)
(4) (5)
(6) (6)
(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 วัตถุประสงค์คือเพื่อกำหนดชุดฟังก์ชันคอลแบ็กให้กับแต่ละคลาสเพื่อเรียกใช้เมื่อเกิดเหตุการณ์ แต่ละคลาสมีฟังก์ชันคอลแบ็กสองฟังก์ชัน ดังแสดงในตารางด้านล่าง
ตาราง – ฟังก์ชันคอลแบ็กคลาสทั่วไป
คำอธิบายฟิลด์ .enable เรียกเมื่ออินสแตนซ์คลาส USB ได้รับการเปิดใช้งานสำเร็จ .disable เรียกเมื่ออินสแตนซ์คลาส USB ถูกปิดใช้งาน
ฟังก์ชันลายเซ็น void app_usbd_XXXX_enable(uint8_t class_nbr); void app_usbd_XXXX_disable(uint8_t class_nbr);
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
18/174
เกินview
เกินview
อุปกรณ์ USB คลาส CDC ACM
อุปกรณ์ USB CDC คลาสฐานเหนือview ความต้องการทรัพยากรคลาส CDC ACM ของอุปกรณ์ USB จากคลาสย่อย CDC ACM ของอุปกรณ์ USB หลักview คู่มือการเขียนโปรแกรมคลาส ACM CDC ของอุปกรณ์ USB สำหรับอุปกรณ์ USB
ส่วนนี้จะอธิบายคลาส Communications Device Class (CDC) และคลาสย่อย CDC ที่เกี่ยวข้องซึ่งได้รับการสนับสนุนโดยสแต็ก USB Device ของ Silicon Labs ปัจจุบัน USB-Device ของ Silicon Labs รองรับคลาสย่อย Abstract Control Model (ACM) ซึ่งมักใช้สำหรับการจำลองแบบอนุกรม
CDC ประกอบด้วยอุปกรณ์โทรคมนาคมและเครือข่ายหลากหลายชนิด อุปกรณ์โทรคมนาคมประกอบด้วยโมเด็มอนาล็อก โทรศัพท์อนาล็อกและดิจิทัล อะแดปเตอร์เทอร์มินัล ISDN เป็นต้นampอุปกรณ์เครือข่ายประกอบด้วยโมเด็ม ADSL และเคเบิลโมเด็ม อะแดปเตอร์อีเทอร์เน็ต และฮับ CDC กำหนดกรอบการทำงานเพื่อรวมมาตรฐานบริการสื่อสารที่มีอยู่ เช่น V.250 (สำหรับโมเด็มบนเครือข่ายโทรศัพท์) และอีเทอร์เน็ต (สำหรับอุปกรณ์เครือข่ายท้องถิ่น) โดยใช้ลิงก์ USB อุปกรณ์สื่อสารมีหน้าที่จัดการอุปกรณ์ จัดการการโทรเมื่อจำเป็น และส่งข้อมูล
CDC กำหนดกลุ่มอุปกรณ์หลัก 7 กลุ่ม แต่ละกลุ่มจะอยู่ในโมเดลการสื่อสารหนึ่งๆ ซึ่งอาจประกอบด้วยหลายคลาสย่อย แต่ละกลุ่มอุปกรณ์มีเอกสารข้อมูลจำเพาะของตนเองนอกเหนือจากคลาสพื้นฐานของ CDC ซึ่งประกอบด้วย 7 กลุ่มหลักดังนี้:
เครือข่ายโทรศัพท์สาธารณะ (PSTN) อุปกรณ์ต่างๆ ได้แก่ โมเด็มบรอดแบนด์ โทรศัพท์ และอุปกรณ์จำลองแบบอนุกรม อุปกรณ์เครือข่ายบริการดิจิทัลแบบผสานรวม (ISDN) รวมถึงอะแดปเตอร์เทอร์มินัลและโทรศัพท์ อุปกรณ์ Ethernet Control Model (ECM) รวมถึงอุปกรณ์ที่รองรับตระกูล IEEE 802 (เช่น โมเด็มเคเบิลและ ADSL, อะแดปเตอร์ WiFi) อุปกรณ์ Asynchronous Transfer Mode (ATM) รวมถึงโมเด็ม ADSL และอุปกรณ์อื่นๆ ที่เชื่อมต่อกับเครือข่าย ATM (เวิร์กสเตชัน เราเตอร์ สวิตช์ LAN) อุปกรณ์ Wireless Mobile Communications (WMC) รวมถึงอุปกรณ์โทรศัพท์เคลื่อนที่แบบมัลติฟังก์ชันที่ใช้จัดการการสื่อสารด้วยเสียงและข้อมูล อุปกรณ์ Ethernet Emulation Model (EEM) ซึ่งแลกเปลี่ยนข้อมูลแบบ Ethernet-framed อุปกรณ์ Network Control Model (NCM) รวมถึงอุปกรณ์เครือข่ายความเร็วสูง (โมเด็ม High Speed Packet Access, อุปกรณ์เทอร์มินัลไลน์)
CDC และการใช้งานคลาสย่อยที่เกี่ยวข้องเป็นไปตามข้อกำหนดต่อไปนี้:
Universal Serial Bus, คำจำกัดความของคลาสสำหรับอุปกรณ์สื่อสาร การแก้ไขครั้งที่ 1.2, 3 พฤศจิกายน 2010 Universal Serial Bus, การสื่อสาร, คลาสย่อยสำหรับอุปกรณ์ PSTN การแก้ไขครั้งที่ 1.2, 9 กุมภาพันธ์ 2007
อุปกรณ์ USB CDC คลาสฐานเหนือview
อุปกรณ์ CDC ประกอบด้วยอินเทอร์เฟซต่อไปนี้เพื่อใช้ในการสื่อสาร:
Communications Class Interface (CCI) มีหน้าที่รับผิดชอบในการจัดการอุปกรณ์และการจัดการการโทร (ทางเลือก)
การจัดการอุปกรณ์ช่วยให้สามารถกำหนดค่าและควบคุมอุปกรณ์ทั่วไป รวมถึงแจ้งเตือนเหตุการณ์ไปยังโฮสต์ได้ การจัดการการโทรช่วยให้สามารถเริ่มต้นและยุติการโทรได้ การจัดการการโทรอาจทำผ่านระบบมัลติเพล็กซ์ (DCI) ได้ CCI เป็นสิ่งจำเป็นสำหรับอุปกรณ์ CDC ทั้งหมด CCI จะระบุฟังก์ชันของ CDC โดยการระบุรูปแบบการสื่อสารที่อุปกรณ์ CDC รองรับ อินเทอร์เฟซที่ต่อจาก CCI อาจเป็นอินเทอร์เฟซ USB คลาสใดก็ได้ที่กำหนดไว้ เช่น อินเทอร์เฟซเสียง หรืออินเทอร์เฟซเฉพาะของผู้จำหน่าย อินเทอร์เฟซเฉพาะของผู้จำหน่ายจะแสดงด้วย DCI โดยเฉพาะ
Data Class Interface (DCI) มีหน้าที่รับผิดชอบในการส่งข้อมูล ข้อมูลที่ส่งและ/หรือได้รับจะไม่เป็นไปตามข้อกำหนดเฉพาะ
รูปแบบ ข้อมูลอาจเป็นข้อมูลดิบจากสายการสื่อสาร ข้อมูลตามรูปแบบเฉพาะ ฯลฯ DCI ทั้งหมดตาม CCI สามารถมองได้ว่าเป็นอินเทอร์เฟซรอง
อุปกรณ์ CDC ต้องมี CCI อย่างน้อยหนึ่งตัวและ DCI อย่างน้อยหนึ่งตัว CCI หนึ่งตัวและ DCI รองใดๆ ก็ตามจะทำหน้าที่เป็นฟีเจอร์ให้กับโฮสต์ ความสามารถนี้เรียกอีกอย่างหนึ่งว่าฟังก์ชัน ในอุปกรณ์ CDC แบบผสม คุณสามารถมีได้หลายตัว
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
19/174
เกินview
ฟังก์ชั่น ดังนั้น อุปกรณ์จะประกอบด้วยชุด CCI และ DCI หลายชุด ดังแสดงในรูป – อุปกรณ์คอมโพสิต CDC
รูปภาพ – อุปกรณ์คอมโพสิต CDC
อุปกรณ์ CDC มีแนวโน้มที่จะใช้การรวมกันของจุดสิ้นสุดต่อไปนี้:
คู่ปลายทางควบคุมขาเข้าและขาออกที่เรียกว่าจุดสิ้นสุดเริ่มต้น ปลายทางขาเข้าแบบ bulk หรือ interrupt เสริม ปลายทางขาเข้าและขาออกแบบ bulk หรือ isochronous หนึ่งคู่ปลายทาง โปรดทราบว่าขณะนี้สแต็กอุปกรณ์ USB ของ Silicon Labs ยังไม่รองรับจุดสิ้นสุดแบบ isochronous
ตารางด้านล่างแสดงการใช้งานจุดสิ้นสุดที่แตกต่างกันและอินเทอร์เฟซของ CDC ที่ใช้
ตาราง – การใช้งานจุดสิ้นสุดของ CDC
จุดสิ้นสุด
ควบคุมใน
ควบคุมออก
ขัดจังหวะหรือเป็นกลุ่มในจำนวนมากหรือแบบไอโซโครนัสในจำนวนมากหรือแบบไอโซโครนัส
ออก
ทิศทาง
อุปกรณ์ถึงโฮสต์
โฮสต์ถึงอุปกรณ์
อุปกรณ์ถึงโฮสต์
อุปกรณ์ถึงโฮสต์
โฮสต์ถึงอุปกรณ์
การใช้งานอินเทอร์เฟซ
ซีซีไอ
คำขอมาตรฐานสำหรับการนับ คำขอเฉพาะคลาส อุปกรณ์
การจัดการ และการจัดการการโทรตามทางเลือก
ซีซีไอ
คำขอมาตรฐานสำหรับการนับ คำขอเฉพาะคลาส อุปกรณ์
การจัดการ และการจัดการการโทรตามทางเลือก
ซีซีไอ
การแจ้งเตือนเหตุการณ์ เช่น การตรวจจับเสียงเรียกเข้า สถานะสายซีเรียล สถานะเครือข่าย
ดีซีไอ
การสื่อสารข้อมูลแบบดิบหรือแบบฟอร์แมต
ดีซีไอ
การสื่อสารข้อมูลแบบดิบหรือแบบฟอร์แมต
อุปกรณ์สื่อสารส่วนใหญ่ใช้จุดสิ้นสุดแบบขัดจังหวะเพื่อแจ้งเตือนโฮสต์เกี่ยวกับเหตุการณ์ต่างๆ จุดสิ้นสุดแบบไอโซโครนัสไม่ควรใช้สำหรับการส่งข้อมูลเมื่อโปรโตคอลเฉพาะต้องอาศัยการส่งข้อมูลซ้ำในกรณีที่โปรโตคอล USB ผิดพลาด การสื่อสารแบบไอโซโครนัสอาจสูญเสียข้อมูลโดยธรรมชาติ เนื่องจากไม่มีกลไกการลองใหม่
โมเดลการสื่อสารหลักทั้งเจ็ดแบบครอบคลุมหลายคลาสย่อย คลาสย่อยอธิบายถึงวิธีที่อุปกรณ์ควรใช้ CCI เพื่อจัดการการจัดการอุปกรณ์และการจัดการการโทร ตารางด้านล่างแสดงคลาสย่อยที่เป็นไปได้ทั้งหมดและโมเดลการสื่อสารที่คลาสย่อยเหล่านั้นอยู่
ตาราง – คลาสย่อย CDC
ซับคลาส
แบบจำลองการควบคุมแบบสายตรง แบบจำลองการควบคุมแบบนามธรรม
รูปแบบการสื่อสาร
PSTN
PSTN
Example ของอุปกรณ์ที่ใช้คลาสย่อยนี้
อุปกรณ์โมเด็มควบคุมโดยตรงจากโฮสต์ USB
อุปกรณ์จำลองแบบอนุกรม อุปกรณ์โมเด็มที่ควบคุมผ่านชุดคำสั่งแบบอนุกรม
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
20/174
เกินview
ซับคลาส
รูปแบบการสื่อสาร
Example ของอุปกรณ์ที่ใช้คลาสย่อยนี้
รุ่นควบคุมโทรศัพท์
PSTN
โมเดล ISDN ควบคุมหลายช่องทาง
แบบจำลองการควบคุม CAPI ISDN
แบบจำลองการควบคุม ECM ของเครือข่ายอีเธอร์เน็ต
เครือข่ายตู้เอทีเอ็ม
ATM
แบบจำลองการควบคุม
รุ่นควบคุมโทรศัพท์มือถือไร้สาย
ดับเบิลยูเอ็มซี
การจัดการอุปกรณ์ WMC
แบบจำลองสายตรงเคลื่อนที่
ดับเบิลยูเอ็มซี
โอเบ็กซ์
ดับเบิลยูเอ็มซี
แบบจำลอง EEM จำลองอีเธอร์เน็ต
โมเดลการควบคุมเครือข่าย
NCM
อุปกรณ์โทรศัพท์ด้วยเสียง
อะแดปเตอร์เทอร์มินัลอัตราพื้นฐาน อะแดปเตอร์เทอร์มินัลอัตราหลัก โทรศัพท์
อะแดปเตอร์เทอร์มินัลอัตราพื้นฐาน อะแดปเตอร์เทอร์มินัลอัตราหลัก โมเด็มเคเบิล DOC-SIS ของโทรศัพท์ โมเด็ม ADSL ที่รองรับการจำลอง PPPoE อะแดปเตอร์ Wi-Fi (ตระกูล IEEE 802.11) อะแดปเตอร์ IEEE 802.3 โมเด็ม ADSL
อุปกรณ์ปลายทางเคลื่อนที่ที่เชื่อมต่อกับอุปกรณ์ไร้สาย
อุปกรณ์ปลายทางเคลื่อนที่ที่เชื่อมต่อกับอุปกรณ์ไร้สาย อุปกรณ์ปลายทางเคลื่อนที่ที่เชื่อมต่อกับอุปกรณ์ไร้สาย
อุปกรณ์ปลายทางเคลื่อนที่ที่เชื่อมต่อกับอุปกรณ์ไร้สาย อุปกรณ์ที่ใช้เฟรมอีเทอร์เน็ตเป็นชั้นการขนส่งถัดไป ไม่ได้ออกแบบมาสำหรับอุปกรณ์กำหนดเส้นทางและการเชื่อมต่ออินเทอร์เน็ต อะแดปเตอร์ IEEE 802.3 ที่รองรับแบนด์วิดท์ข้อมูลความเร็วสูงบนเครือข่าย
ความต้องการทรัพยากรคลาส ACM CDC ของอุปกรณ์ USB จากแกนหลัก
ทุกครั้งที่คุณเพิ่มอินสแตนซ์คลาส CDC ACM ลงในการกำหนดค่า USB ผ่านการเรียกฟังก์ชัน sl_usbd_cdc_acm_add_to_configuration() ทรัพยากรต่อไปนี้จะถูกจัดสรรจากแกนหลัก
ทรัพยากร
อินเทอร์เฟซ อินเทอร์เฟซสำรอง จุดสิ้นสุด กลุ่มอินเทอร์เฟซ
ปริมาณ
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 ประกอบด้วย Communications Class Interface (CCI) และ Data Class Interface (DCI) ซึ่งอธิบายโดยละเอียดใน USB Device CDC Base Class Overview หัวข้อนี้จะกล่าวถึง CCI ประเภท ACM ซึ่งประกอบด้วยจุดสิ้นสุดเริ่มต้นสำหรับองค์ประกอบการจัดการ และจุดสิ้นสุดการขัดจังหวะสำหรับองค์ประกอบการแจ้งเตือน จุดสิ้นสุดจำนวนมากสองจุดจะถูกใช้เพื่อส่งข้อมูลที่ไม่ได้ระบุผ่าน DCI
ACM subclass ถูกใช้โดยอุปกรณ์สื่อสารสองประเภท:
อุปกรณ์ที่รองรับคำสั่ง AT (เช่น โมเด็มแบนด์เสียง) อุปกรณ์จำลองแบบอนุกรม ซึ่งเรียกอีกอย่างว่าอุปกรณ์พอร์ต COM เสมือน
มีคำขอเฉพาะคลาสย่อยหลายรายการสำหรับคลาสย่อย ACM ซึ่งอนุญาตให้คุณควบคุมและกำหนดค่าอุปกรณ์ สามารถดูรายการและคำอธิบายคำขอ ACM ทั้งหมดได้ในรายละเอียด
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
21/174
เกินview ซับคลาสสำหรับอุปกรณ์ PSTN การแก้ไขครั้งที่ 1.2 9 กุมภาพันธ์ 2007 = ส่วนที่ 6.2.2
จากรายการนี้ ซับคลาส ACM ของ Silicon Labs9 รองรับสิ่งต่อไปนี้:
ตาราง – คำขอ ACM ที่ได้รับการสนับสนุนโดย Silicon Labs
คำอธิบายคำขอคลาสย่อย
ตั้งค่าคุณสมบัติการสื่อสาร รับคุณสมบัติการสื่อสาร ล้างคุณสมบัติการสื่อสาร
โฮสต์จะส่งคำขอนี้เพื่อควบคุมการตั้งค่าสำหรับฟีเจอร์การสื่อสารที่กำหนด ไม่ได้ใช้สำหรับการจำลองแบบอนุกรม
โฮสต์จะส่งคำขอนี้เพื่อรับการตั้งค่าปัจจุบันสำหรับฟีเจอร์การสื่อสารที่กำหนด ไม่ได้ใช้สำหรับการจำลองแบบอนุกรม
โฮสต์จะส่งคำขอนี้เพื่อล้างการตั้งค่าสำหรับฟีเจอร์การสื่อสารที่กำหนด ไม่ได้ใช้สำหรับการจำลองแบบอนุกรม
การเข้ารหัส SetLine
โฮสต์จะส่งคำขอนี้เพื่อกำหนดค่าการตั้งค่าอุปกรณ์ ACM ได้แก่ อัตราบอด จำนวนบิตหยุด ประเภทพาริตี และจำนวนบิตข้อมูล สำหรับการจำลองแบบอนุกรม คำขอนี้จะถูกส่งโดยอัตโนมัติจากเทอร์มินัลอนุกรมทุกครั้งที่คุณกำหนดค่าการตั้งค่าอนุกรมสำหรับพอร์ต COM เสมือนแบบเปิด
รับการเข้ารหัสไลน์
โฮสต์จะส่งคำขอนี้เพื่อรับการตั้งค่า ACM ปัจจุบัน (บอดเรต, สต็อปบิต, พาริตี้, บิตข้อมูล) สำหรับการจำลองแบบอนุกรม เทอร์มินัลอนุกรมจะส่งคำขอนี้โดยอัตโนมัติในระหว่างการเปิดพอร์ต COM เสมือน
SetControlLineState โฮสต์จะส่งคำขอนี้เพื่อควบคุมพาหะของโมเด็มแบบฮาล์ฟดูเพล็กซ์ และระบุว่าอุปกรณ์ปลายทางข้อมูล (Data Terminal Equipment: DTE) พร้อมใช้งานหรือไม่ ในกรณีของการจำลองแบบอนุกรม DTE จะเป็นเทอร์มินัลอนุกรม สำหรับการจำลองแบบอนุกรม เทอร์มินัลอนุกรมบางรุ่นอนุญาตให้คุณส่งคำขอนี้พร้อมกับชุดควบคุม
เซ็ตเบรก
โฮสต์จะส่งคำขอนี้เพื่อสร้างเบรกแบบ RS-232 สำหรับการจำลองแบบอนุกรม เทอร์มินัลอนุกรมบางรุ่นอนุญาตให้คุณส่งคำขอนี้ได้
ซับคลาส ACM ของ Silicon Labs9 ใช้จุดสิ้นสุดการขัดจังหวะ IN เพื่อแจ้งให้โฮสต์ทราบเกี่ยวกับสถานะปัจจุบันของสายอนุกรม อนุกรม
สถานะเส้นเป็นบิตแมปที่แจ้งโฮสต์เกี่ยวกับ:
ข้อมูลถูกทิ้งเนื่องจากมีการล้นเกิน ข้อผิดพลาดพาริตี้ ข้อผิดพลาดการสร้างเฟรม สถานะของการตรวจจับสัญญาณริง สถานะของกลไกการตรวจจับการแตก สถานะของพาหะในการส่ง สถานะของการตรวจจับพาหะของตัวรับ
การใช้งานซับคลาส ACM ของ Silicon Labs9 เป็นไปตามข้อกำหนดต่อไปนี้:
Universal Serial Bus, การสื่อสาร, ซับคลาสสำหรับอุปกรณ์ PSTN, การแก้ไขครั้งที่ 1.2, 9 กุมภาพันธ์ 2007
การกำหนดค่าคลาส ACM CDC ของอุปกรณ์ USB
หัวข้อนี้จะอธิบายวิธีการกำหนดค่าคลาส CDC ACM (คลาสอุปกรณ์สื่อสาร, โมเดลการควบคุมเชิงนามธรรม) โดยมีพารามิเตอร์การกำหนดค่าสองกลุ่ม:
การกำหนดค่าเฉพาะแอปพลิเคชันคลาส CDC ACM ของอุปกรณ์ USB การกำหนดค่าอินสแตนซ์คลาส CDC ACM ของอุปกรณ์ USB
การกำหนดค่าเฉพาะแอปพลิเคชันคลาส ACM CDC ของอุปกรณ์ USB
คลาสฐาน CDC ACM ซับคลาส
คลาสฐาน CDC
ก่อนอื่น หากต้องการใช้โมดูลคลาส CDC ของอุปกรณ์ USB ของ Silicon Labs คุณจะต้องปรับค่าคอนฟิกูเรชันเวลาคอมไพล์ CDC #define-s ตามความต้องการของแอปพลิเคชันของคุณ ซึ่งจะถูกจัดกลุ่มใหม่ภายในส่วนหัว sl_usbd_core_config.h file ภายใต้ส่วน CDC วัตถุประสงค์คือเพื่อแจ้งให้โมดูลอุปกรณ์ USB ทราบจำนวนอ็อบเจ็กต์ USB CDC ที่จะจัดสรร
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
22/174
เกินview
ตารางด้านล่างนี้จะอธิบายฟิลด์การกำหนดค่าแต่ละฟิลด์ที่มีอยู่ในโครงสร้างการกำหนดค่านี้
ตาราง – การกำหนดค่า CDC ของอุปกรณ์ USB กำหนด
ชื่อการกำหนดค่า
SL_USBD_CDC_CL เป็น S_INSTANCE_QUANT ITY
SL_USBD_CDC_CONF IGURATION_QUANTI
TY
SL_USBD_CDC_DATA _INTERFACE_QUANTI
TY
คำอธิบาย
จำนวนอินสแตนซ์คลาสที่คุณจะจัดสรรผ่านการเรียกใช้ฟังก์ชัน
sl_usbd_cdc_acm_สร้างอินสแตนซ์()
จำนวนการกำหนดค่า สามารถเพิ่มอินสแตนซ์คลาส ACM ลงในการกำหนดค่า aaaa หนึ่งรายการหรือมากกว่านั้นได้ เช่น sl_usbd_cdc_acm_add_to_configuration()
จำนวนอินเทอร์เฟซข้อมูลทั้งหมด (DCI) สำหรับฟังก์ชัน CDC ทั้งหมด ฟังก์ชัน CDC ACM แต่ละฟังก์ชัน aaaaaaaaa เพิ่ม vi c ll ลงในฟังก์ชัน sl_usbd_cdc_acm_create_instance() จะ dd dt interf ce
ค่าเริ่มต้น
2
1
2
ซับคลาส ACM
ซับคลาส ACM มีการกำหนดค่าเวลาคอมไพล์หนึ่งรายการดังแสดงในตารางด้านล่าง
ตาราง – การกำหนดค่า ACM CDC ของอุปกรณ์ USB
ชื่อการกำหนดค่า
SL_USBD_CDC_ACM_SUBCL ASS_I ปริมาณอินสแตนซ์
คำอธิบาย
กำหนดค่าจำนวนอินสแตนซ์ของคลาสย่อยที่คุณจะจัดสรรผ่านการเรียกไปยัง
ฟังก์ชัน sl_usbd_cdc_acm_create_instance()
ค่าเริ่มต้น
2
การกำหนดค่าอินสแตนซ์คลาส ACM CDC ของอุปกรณ์ USB
ส่วนนี้จะกำหนดค่าคอนฟิกที่เกี่ยวข้องกับอินสแตนซ์คลาสอนุกรม ACM ของ CDC คลาส การสร้างอินสแตนซ์ สถานะบรรทัด ช่วงเวลา การเรียก ความสามารถในการจัดการ p_acm_callbacks
การสร้างอินสแตนซ์คลาส
ในการสร้างอินสแตนซ์คลาสซีเรียล CDC ACM ให้เรียกใช้ฟังก์ชัน T a sl_usbd_cdc_acm_create_instance() ฟังก์ชันนี้มีอาร์กิวเมนต์การกำหนดค่าสามรายการ ดังที่อธิบายไว้ที่นี่
ช่วงสถานะบรรทัด
นี่คือช่วงเวลา (เป็นมิลลิวินาที) ที่อินสแตนซ์คลาสซีเรียล CDC ACM ของคุณจะรายงานการแจ้งเตือนสถานะสายไปยังโฮสต์ T aa ค่านี้จะต้องเป็นเลขยกกำลังสอง (1, 2, 4, 8, 16 เป็นต้น)
ความสามารถในการเรียก_mgmt
บิตแมปความสามารถในการจัดการการโทร ค่าที่เป็นไปได้ของบิตแมปมีดังนี้:
ค่า (บิต)
SL_USBD_ACM_SERIAL_CALL_MGMT_DEV
SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI
คำอธิบาย
อุปกรณ์จะจัดการการจัดการการโทรด้วยตัวเอง อุปกรณ์สามารถส่ง/รับข้อมูลการจัดการการโทรผ่านอินเทอร์เฟซ Data Class ได้
การเรียกกลับ p_acm
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
23/174
เกินview
aa M aa p_acm_callbacks เป็นตัวชี้ไปยังโครงสร้างประเภท sl_usbd_cdc_acm_callbacks_t วัตถุประสงค์คือเพื่อกำหนดชุดฟังก์ชันคอลแบ็กของ CDC AC Cl ss ที่จะเรียกใช้เมื่อเกิดเหตุการณ์ CDC ACM คอลแบ็กบางรายการไม่ได้บังคับ และสามารถส่งผ่านพอยน์เตอร์ null (NULL) ในตัวแปรโครงสร้างคอลแบ็กได้เมื่อไม่จำเป็นต้องใช้คอลแบ็ก ตารางด้านล่างอธิบายฟิลด์การกำหนดค่าแต่ละฟิลด์ที่มีอยู่ในโครงสร้างการกำหนดค่านี้
ตาราง – โครงสร้างการกำหนดค่า sl_usbd_cdc_acm _callbacks_t
ทุ่งนา
คำอธิบาย
.เปิดใช้งาน
เรียกเมื่อเปิดใช้งานอินสแตนซ์คลาส USB
สำเร็จแล้ว.
.ปิดการใช้งาน
เรียกเมื่ออินสแตนซ์คลาส USB ถูกปิดใช้งาน
.line_control_changed เรียกเมื่อได้รับการเปลี่ยนแปลงการควบคุมบรรทัด
line_coding_changed เรียกเมื่อได้รับการเปลี่ยนแปลงการเข้ารหัสบรรทัด
ลายเซ็นฟังก์ชัน
void app_usbd_cdc_acm_enable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_disable(uint8_t subclass_nbr);
void app_usbd_cdc_acm_line_control_changed(uint8_t subclass_nbr, uint8_t event, uint8_t event_chngd); bool app_usbd_cdc_acm_line_coding_changed(uint8_t subclass_nbr, subclass_nbr, sl_usbd_cdc_acm_line_coding_t
*การเข้ารหัส p_line
ดูส่วนการลงทะเบียนการโทรกลับการแจ้งเตือนเหตุการณ์สำหรับฟังก์ชันการโทรกลับ เช่นampเล.
คู่มือการเขียนโปรแกรมคลาส ACM CDC ของอุปกรณ์ USB
ส่วนนี้จะอธิบายวิธีการใช้คลาส CDC Abstract Control Model การเริ่มต้นคลาส USB Device CDC ACM การเพิ่มอินสแตนซ์คลาส USB Device CDC ACM ลงในอุปกรณ์ของคุณ การสื่อสารโดยใช้คลาส CDC ACM
การเริ่มต้นคลาส CDC ACM ของอุปกรณ์ USB
หากต้องการเพิ่มฟังก์ชันคลาส CDC ACM ให้กับอุปกรณ์ของคุณ ก่อนอื่นคุณต้องกำหนดค่าเริ่มต้นคลาสฐาน CDC และคลาสย่อย ACM โดยเรียกใช้ฟังก์ชัน sl_usbd_cdc_init() และ sl_usbd_cdc_acm_init() ตัวอย่างด้านล่างแสดงวิธีการเรียกใช้ sl_usbd_cdc_init() และ sl_usbd_cdc_acm_init() โดยใช้อาร์กิวเมนต์ def ult
Example – การเริ่มต้นคลาส CDC ACM
สถานะ sl_status_t;
สถานะ = sl_usbd_cdc_init(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
สถานะ = sl_usbd_cdc_acm_init(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
การเพิ่มอินสแตนซ์คลาส CDC ACM ของอุปกรณ์ USB ลงในอุปกรณ์ของคุณ
หากต้องการเพิ่มฟังก์ชันคลาส CDC ACM ให้กับอุปกรณ์ของคุณ คุณต้องสร้างอินสแตนซ์ จากนั้นจึงเพิ่มลงในการกำหนดค่าของอุปกรณ์
การสร้างอินสแตนซ์คลาส CDC ACM
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
24/174
เกินview
การเพิ่มอินสแตนซ์คลาส CDC ACM ลงในการกำหนดค่าอุปกรณ์ของคุณ การลงทะเบียนการโทรกลับการแจ้งเตือนเหตุการณ์
การสร้างอินสแตนซ์คลาส CDC ACM
aa M aaa สร้างอินสแตนซ์ CDC AC โดยเรียกใช้ฟังก์ชัน sl_usbd_cdc_acm_create_instance() T aaa M aaa ตัวอย่างด้านล่างแสดงวิธีสร้างอินสแตนซ์ CDC AC โดยเรียกใช้ฟังก์ชัน sl_usbd_cdc_acm_create_instance()
Example – การสร้างฟังก์ชัน CDC ACM ผ่าน sl_usbd_cdc_acm_create_instance()
uint8_t subclass_nbr; 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(subclass_nbr,
(1)
config_nbr_fs);
(2)
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
aaa (1) Cl ss หมายเลขถึง dd ไปยังการกำหนดค่าที่ส่งคืนโดย sl_usbd_cdc_acm_create_instance() (2) หมายเลขการกำหนดค่า (ในที่นี้คือการเพิ่มลงในการกำหนดค่าแบบ Full-Speed)
การลงทะเบียนการโทรกลับแจ้งเตือนเหตุการณ์
คลาส CDC ACM Serial สามารถแจ้งเตือนแอปพลิเคชันของคุณเกี่ยวกับการเปลี่ยนแปลงใดๆ ในการควบคุมบรรทัดหรือการเขียนโค้ดผ่านฟังก์ชัน callback สำหรับการแจ้งเตือน โครงสร้างฟังก์ชัน callback สามารถส่งผ่านเป็นอาร์กิวเมนต์ในระหว่างการสร้างอินสแตนซ์ ACM ได้ โปรดทราบว่า callback เหล่านี้เป็นตัวเลือกเสริม เช่นample – การลงทะเบียนการโทรกลับ ACM ของ CDC แสดงให้เห็นการใช้งานฟังก์ชันการลงทะเบียนการโทรกลับ ตัวอย่างample – การใช้งาน CDC ACM Callbacks แสดงให้เห็นอดีตampแนวทางการใช้งานฟังก์ชันการโทรกลับ
Example – การลงทะเบียนการโทรกลับของ CDC ACM
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
25/174
เกินview
uint8_t subclass_nbr; 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 Callbacks
บูลีน app_usbd_cdc_acm_line_coding_changed (uint8_t
ซับคลาส_nbr,
sl_usbd_cdc_acm_line_coding_t *p_line_coding)
{
uint32_t อัตราบอดใหม่;
uint8_t ความเท่าเทียมกันใหม่;
uint8_t หยุดบิตใหม่;
uint8_t data_bits_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;
กลับ (จริง);
(1)
}
void app_usbd_cdc_acm_line_control_changed (uint8_t subclass_nbr, uint8_t event, uint8_t event_changed)
{ bool rts_state; bool rts_state_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 Silicon Laboratories สงวนลิขสิทธิ์
26/174
เกินview
การสื่อสารแบบอินสแตนซ์ของซับคลาสสถานะสาย
สถานะซีเรียล
การเข้ารหัสบรรทัด
โฮสต์ USB ควบคุมการเข้ารหัสสาย (เช่น อัตราบอด, พาริตี้ ฯลฯ) ของอุปกรณ์ CDC ACM เมื่อจำเป็น แอปพลิเคชันจะรับผิดชอบการตั้งค่าการเข้ารหัสสาย มีสองฟังก์ชันสำหรับดึงข้อมูลและตั้งค่าการเข้ารหัสสายปัจจุบัน ดังที่อธิบายไว้ในตารางด้านล่าง
ตาราง – ฟังก์ชันการเข้ารหัสสาย ACM ของ CDC
การทำงาน
sl_usbd_cdc_acm_g e t_line _co d ing ()
sl_usbd_cdc_acm_s e t_line _co d ing ()
คำอธิบาย
แอปพลิเคชันของคุณสามารถรับการตั้งค่าการเข้ารหัสบรรทัดปัจจุบันได้จากโฮสต์โดยใช้คำขอ SetLineCoding หรือด้วยฟังก์ชัน sl_usbd_cdc_acm_set_line_coding()
แอปพลิเคชันของคุณสามารถตั้งค่าการเข้ารหัสบรรทัดได้ โฮสต์สามารถดึงการตั้งค่าด้วยคำขอ GetLineCoding
การควบคุมสาย
โฮสต์ USB จะควบคุมการควบคุมสาย (พิน RTS และ DTR, สัญญาณเบรก และอื่นๆ) ของอุปกรณ์ CDC ACM เมื่อจำเป็น แอปพลิเคชันของคุณจะรับผิดชอบการใช้งานการควบคุมสาย มีฟังก์ชันสำหรับดึงข้อมูลและตั้งค่าการควบคุมสายปัจจุบัน ดังแสดงในตารางด้านล่าง
ตาราง – ฟังก์ชันการควบคุมสาย ACM ของ CDC
การทำงาน
sl_usb d _cd c_acm_g e t_line _co ntr o l_state ()
แอปพลิเคชันของคุณสามารถรับสถานะเส้นควบคุมปัจจุบันที่ตั้งค่าโดยโฮสต์ด้วยคำขอ SetControlLineState
สถานะของเส้น
โฮสต์ USB จะดึงข้อมูลสถานะสายสัญญาณเป็นระยะๆ แอปพลิเคชันของคุณต้องอัปเดตสถานะสายสัญญาณทุกครั้งที่มีการเปลี่ยนแปลง เมื่อจำเป็น แอปพลิเคชันของคุณจะเป็นผู้รับผิดชอบในการตั้งค่าสถานะสายสัญญาณ มีสองฟังก์ชันสำหรับดึงข้อมูลและตั้งค่าการควบคุมสายสัญญาณปัจจุบัน ดังที่อธิบายไว้ในตารางด้านล่าง
ตาราง – ฟังก์ชันสถานะสาย ACM ของ CDC
การทำงาน
sl_usb d _cd c_acm_se t _line _state _e เวนต์()
sl_usbd_cdc_acm_cle ar_line _state _e เวนต์()
แอปพลิเคชันของคุณสามารถตั้งค่าเหตุการณ์สถานะสายใดๆ ก็ได้ ขณะตั้งค่าสถานะสาย การถ่ายโอนสัญญาณขัดจังหวะจะถูกส่งไปยังโฮสต์เพื่อแจ้งการเปลี่ยนแปลงสถานะสายอนุกรม
แอปพลิเคชันสามารถล้างเหตุการณ์สถานะสายได้สองเหตุการณ์ ได้แก่ การตรวจจับพาหะของสายส่งและพาหะของสายรับ เหตุการณ์อื่นๆ ทั้งหมดจะถูกล้างโดยอัตโนมัติโดยซับคลาสการจำลองแบบอนุกรมของ ACM
การสื่อสารแบบอินสแตนซ์คลาสย่อย
ซับคลาส ACM ของ Silicon Labs มีฟังก์ชันต่อไปนี้สำหรับการสื่อสารกับโฮสต์ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับพารามิเตอร์ฟังก์ชัน 9 โปรดดูข้อมูลอ้างอิงฟังก์ชันซับคลาส ACM ของ CDC
ชื่อฟังก์ชั่น
sl_usb d _cd c_acm_ รี แอด () sl_usb d _cd c_acm_write ()
การดำเนินการ
รับข้อมูลจากโฮสต์ผ่านจุดเชื่อมต่อ OUT จำนวนมาก ฟังก์ชันนี้กำลังบล็อก ส่งข้อมูลไปยังโฮสต์ผ่านจุดเชื่อมต่อ IN จำนวนมาก ฟังก์ชันนี้กำลังบล็อก
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
27/174
เกินview
ตาราง – สรุป API การสื่อสารของ CDC ACM aaaaa sl_usbd_cdc_acm_read() และ sl_usbd_cdc_acm_write() ให้การสื่อสารแบบซิงโครนัส ซึ่งขัดขวางการถ่ายโอน กล่าวอีกนัยหนึ่งคือ เมื่อเรียกใช้ฟังก์ชัน แอปพลิเคชันจะบล็อกจนกว่าการถ่ายโอนจะเสร็จสมบูรณ์ ไม่ว่าจะมีข้อผิดพลาดหรือไม่ก็ตาม สามารถกำหนดเวลาหมดเวลาเพื่อหลีกเลี่ยงการรอคอยอย่างถาวร ตัวอย่างample ด้านล่างแสดงการอ่านและการเขียนampไฟล์ที่รับข้อมูลจากโฮสต์โดยใช้จุดสิ้นสุด OUT จำนวนมากและส่งข้อมูลไปยังโฮสต์โดยใช้จุดสิ้นสุด IN จำนวนมาก
รายการ – การอ่านและเขียนแบบอนุกรมample
__จัดแนว(4) uint8_t rx_buf[2];
__จัดแนว(4) uint8_t tx_buf[2];
ยูอินต์32_ต
xfer_len;
สถานะ sl_t
สถานะ;
สถานะ = sl_usbd_cdc_acm_read(subclass_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
สถานะ = sl_usbd_cdc_acm_write(subclass_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
T aaaaa M (1) คลาสอินสแตนซ์หมายเลขที่สร้างด้วย sl_usbd_cdc_acm_create_instance() จะให้การอ้างอิงภายในไปยังซับคลาส AC เพื่อกำหนดเส้นทางการถ่ายโอนไปยังจุดสิ้นสุด OUT หรือ IN จำนวนมากที่เหมาะสม (2) แอปพลิเคชันของคุณต้องตรวจสอบให้แน่ใจว่าบัฟเฟอร์ที่จัดเตรียมให้กับฟังก์ชันมีขนาดใหญ่พอที่จะรองรับข้อมูลทั้งหมด มิฉะนั้นอาจเกิดปัญหาการซิงโครไนซ์ (3) เพื่อหลีกเลี่ยงสถานการณ์การบล็อกแบบไม่มีที่สิ้นสุด ให้ระบุระยะเวลาหมดเวลาเป็นมิลลิวินาที ค่า 809 จะทำให้งานแอปพลิเคชันต้องรออย่างถาวร (4) แอปพลิเคชันจัดเตรียมบัฟเฟอร์สำหรับส่งข้อมูลที่เริ่มต้นแล้ว
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
28/174
เกินview
เกินview
อุปกรณ์ USB คลาส HID
อุปกรณ์ USB HID คลาสเกินview ความต้องการทรัพยากรคลาส HID ของอุปกรณ์ USB จากการกำหนดค่าคลาส HID ของอุปกรณ์ USB หลัก คู่มือการเขียนโปรแกรมคลาส HID ของอุปกรณ์ USB งานรายงานอินพุตเป็นระยะของ HID
หัวข้อนี้จะอธิบายเกี่ยวกับคลาส Human Interface Device (HID) ที่รองรับโดยอุปกรณ์ USB ของ Silicon Labs
คลาส HID ครอบคลุมอุปกรณ์ที่มนุษย์ใช้ควบคุมการทำงานของคอมพิวเตอร์ เช่น คีย์บอร์ด เมาส์ อุปกรณ์ชี้ตำแหน่ง และอุปกรณ์เล่นเกม
คลาส HID ยังสามารถใช้ในอุปกรณ์คอมโพสิตที่มีการควบคุม เช่น ลูกบิด สวิตช์ ปุ่ม และแถบเลื่อน ตัวอย่างเช่นampการควบคุมระดับเสียง ปิดเสียง และระดับเสียงในชุดหูฟังเสียงถูกควบคุมโดยฟังก์ชัน HID ของชุดหูฟัง คลาส HID สามารถแลกเปลี่ยนข้อมูลเพื่อวัตถุประสงค์ใดก็ได้โดยใช้เพียงการควบคุมและการถ่ายโอนข้อมูลขัดจังหวะเท่านั้น
คลาส HID เป็นหนึ่งในคลาส USB ที่เก่าแก่และใช้งานกันอย่างแพร่หลายที่สุด ระบบปฏิบัติการโฮสต์หลักๆ ทั้งหมดมีไดรเวอร์ในตัวสำหรับจัดการอุปกรณ์ HID ซึ่งเป็นเหตุผลว่าทำไมอุปกรณ์เฉพาะของผู้จำหน่ายหลายรายจึงสามารถทำงานร่วมกับคลาส HID ได้ คลาสนี้ยังรวมถึงเอาต์พุตหลายประเภท เช่น LED, เสียง, การตอบสนองแบบสัมผัส ฯลฯ
การใช้งาน HID เป็นไปตามข้อกำหนดต่อไปนี้:
คำจำกัดความคลาสอุปกรณ์สำหรับอุปกรณ์อินเทอร์เฟซกับมนุษย์ (HID) 27/6/01 เวอร์ชัน 1.11 ตารางการใช้งาน HID ของ Universal Serial Bus 28/10/2004 เวอร์ชัน 1.12
อุปกรณ์ USB HID คลาสเกินview
เกินview
อุปกรณ์ HID ประกอบด้วยจุดสิ้นสุดดังต่อไปนี้:
คู่ของจุดสิ้นสุดการควบคุม IN และ OUT ที่เรียกว่าจุดสิ้นสุดเริ่มต้น จุดสิ้นสุดการขัดจังหวะ IN จุดสิ้นสุดการขัดจังหวะ OUT ที่เป็นทางเลือก
ตารางด้านล่างนี้อธิบายการใช้งานจุดสิ้นสุดที่แตกต่างกัน:
ตาราง – การใช้งานจุดสิ้นสุดคลาส HID
การใช้งานทิศทางปลายทาง
ควบคุมใน
ควบคุม
ออก
ขัดจังหวะใน
ขัดจังหวะ
ออก
อุปกรณ์ถึงโฮสต์
โฮสต์ถึงอุปกรณ์
อุปกรณ์ถึงโฮสต์
โฮสต์ถึงอุปกรณ์
คำขอมาตรฐานสำหรับการแจงนับ คำขอเฉพาะคลาส และการสื่อสารข้อมูล (อินพุต รายงานฟีเจอร์ที่ส่งไปยังโฮสต์ด้วยคำขอ GET_REPORT) คำขอมาตรฐานสำหรับการแจงนับ คำขอเฉพาะคลาส และการสื่อสารข้อมูล (เอาต์พุต รายงานฟีเจอร์ที่ได้รับจากโฮสต์ด้วยคำขอ SET_REPORT) การสื่อสารข้อมูล (รายงานอินพุตและฟีเจอร์)
การสื่อสารข้อมูล (รายงานผลลัพธ์และคุณลักษณะ)
รายงาน
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
29/174
เกินview
โฮสต์และอุปกรณ์ HID แลกเปลี่ยนข้อมูลกันโดยใช้รายงาน รายงานประกอบด้วยข้อมูลที่จัดรูปแบบแล้วซึ่งให้ข้อมูลเกี่ยวกับการควบคุมและองค์ประกอบทางกายภาพอื่นๆ ของอุปกรณ์ HID ผู้ใช้สามารถจัดการการควบคุมและควบคุมส่วนต่างๆ ของอุปกรณ์ได้ ตัวอย่างเช่นampตัวควบคุมอาจเป็นปุ่มบนเมาส์หรือคีย์บอร์ด สวิตช์ ฯลฯ เอนทิตีอื่นๆ จะแจ้งให้ผู้ใช้ทราบเกี่ยวกับสถานะของคุณสมบัติบางอย่างของอุปกรณ์ ตัวอย่างเช่นampไฟ LED บนแป้นพิมพ์จะแจ้งให้ผู้ใช้ทราบว่าปุ่ม Caps Lock เปิดอยู่ แป้นตัวเลขเปิดใช้งานอยู่ เป็นต้น
โฮสต์สามารถเข้าใจรูปแบบและการใช้งานข้อมูลรายงานได้โดยการวิเคราะห์เนื้อหาของตัวอธิบายรายงาน การวิเคราะห์เนื้อหาจะดำเนินการโดยตัวแยกวิเคราะห์ ตัวอธิบายรายงานจะอธิบายข้อมูลที่ได้รับจากตัวควบคุมแต่ละตัวในอุปกรณ์ ซึ่งประกอบด้วยรายการต่างๆ ซึ่งเป็นข้อมูลเกี่ยวกับอุปกรณ์ ประกอบด้วยคำนำหน้าขนาด 1 ไบต์และความยาวแปรผัน
ข้อมูล สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับรูปแบบรายการ โปรดดูที่
1.11= ส่วนที่ 5.6 และ 6.2.2
มีรายการหลักอยู่สามประเภท:
รายการหลักกำหนดหรือจัดกลุ่มฟิลด์ประเภทข้อมูลบางประเภท
รายการทั่วโลกอธิบายลักษณะข้อมูลของการควบคุม
รายการท้องถิ่นอธิบายลักษณะข้อมูลของการควบคุม
ประเภทรายการแต่ละรายการถูกกำหนดโดยฟังก์ชันที่แตกต่างกัน ฟังก์ชันรายการสามารถเรียกอีกอย่างหนึ่งว่า tagฟังก์ชันรายการสามารถมองได้ว่าเป็นรายการย่อยที่อยู่ในประเภทรายการหลักสามประเภท ตารางด้านล่างนี้ให้ข้อมูลสรุปเกี่ยวกับview ของฟังก์ชัน item9 ในแต่ละประเภทรายการ สำหรับคำอธิบายโดยละเอียดของรายการในแต่ละหมวดหมู่ โปรดดู
ตาราง – คำอธิบายฟังก์ชันของรายการสำหรับแต่ละประเภทรายการ
รายการ ประเภทรายการ ฟังก์ชั่น
คำอธิบาย
อินพุตหลัก
อธิบายข้อมูลเกี่ยวกับข้อมูลที่ได้รับจากการควบคุมทางกายภาพอย่างน้อยหนึ่งรายการ
เอาท์พุตหลัก อธิบายข้อมูลที่ส่งไปยังอุปกรณ์
คุณสมบัติหลัก
อธิบายข้อมูลการกำหนดค่าอุปกรณ์ที่ส่งไปหรือได้รับจากอุปกรณ์ซึ่งส่งผลต่อพฤติกรรมโดยรวมของอุปกรณ์หรือส่วนประกอบส่วนใดส่วนหนึ่ง
รายการที่เกี่ยวข้องกับกลุ่มคอลเลกชันหลัก (อินพุต เอาท์พุต หรือฟีเจอร์)
Main End of Closes คอลเลกชัน คอลเลกชัน
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
30/174
เกินview
รายการ ประเภทรายการ ฟังก์ชั่น
คำอธิบาย
หน้าการใช้งานทั่วโลก
ระบุฟังก์ชั่นที่สามารถใช้งานได้ภายในอุปกรณ์
Global Logical กำหนดขีดจำกัดล่างของค่าที่รายงานในหน่วยลอจิคัล ค่าต่ำสุด
ลอจิกทั่วโลก กำหนดขีดจำกัดบนของค่าที่รายงานในหน่วยลอจิก ค่าสูงสุด
Global Physical กำหนดขีดจำกัดล่างของค่าที่รายงานในหน่วยทางกายภาพ นั่นคือค่าต่ำสุดเชิงตรรกะ ค่าต่ำสุดที่แสดงเป็นหน่วยทางกายภาพ
Global Physical กำหนดขีดจำกัดบนของค่าที่รายงานในหน่วยทางกายภาพ ซึ่งก็คือค่าสูงสุดเชิงตรรกะ ค่าสูงสุดที่แสดงเป็นหน่วยทางกายภาพ
หน่วยทั่วโลก
ระบุเลขยกกำลังหน่วยในฐาน 10 เลขยกกำลังมีช่วงตั้งแต่ -8 ถึง +7
เลขยกกำลัง
หน่วยทั่วโลก
ระบุหน่วยของค่าที่รายงาน เช่น ความยาว มวล หน่วยอุณหภูมิ เป็นต้น
ขนาดรายงานทั่วโลก
ระบุขนาดของฟิลด์รายงานเป็นบิต
ID รายงานทั่วโลก ระบุคำนำหน้าที่เพิ่มให้กับรายงานเฉพาะ
จำนวนรายงานทั่วโลก
ระบุจำนวนฟิลด์ข้อมูลสำหรับรายการ
ผลักดันทั่วโลก
วางสำเนาของตารางสถานะรายการทั่วโลกบนสแต็ก CPU
ป๊อปทั่วโลก
แทนที่ตารางสถานะของรายการด้วยโครงสร้างสุดท้ายจากสแต็ก
การใช้งานในท้องถิ่น
แสดงถึงดัชนีสำหรับระบุการใช้งานเฉพาะภายในหน้าการใช้งาน ดัชนีนี้ระบุการใช้งานที่ผู้ขายแนะนำสำหรับการควบคุมหรือกลุ่มการควบคุมเฉพาะ การใช้งานจะให้ข้อมูลแก่นักพัฒนาแอปพลิเคชันเกี่ยวกับสิ่งที่การควบคุมกำลังวัดอยู่จริง
การใช้งานในท้องถิ่น
กำหนดการใช้งานเริ่มต้นที่เชื่อมโยงกับอาร์เรย์หรือบิตแมป
ขั้นต่ำ
การใช้งานในท้องถิ่น
กำหนดการใช้งานสิ้นสุดที่เชื่อมโยงกับอาร์เรย์หรือบิตแมป
สูงสุด
ตัวกำหนดท้องถิ่น กำหนดส่วนของร่างกายที่ใช้สำหรับการควบคุม ดัชนีชี้ไปที่ตัวกำหนดใน Physical
ดัชนี
ตัวอธิบาย
ตัวกำหนดท้องถิ่น กำหนดดัชนีของตัวกำหนดเริ่มต้นที่เชื่อมโยงกับอาร์เรย์หรือบิตแมป ขั้นต่ำ
ตัวกำหนดท้องถิ่น กำหนดดัชนีของตัวกำหนดสิ้นสุดที่เชื่อมโยงกับอาร์เรย์หรือบิตแมป สูงสุด
ดัชนีสตริงท้องถิ่น
ดัชนีสตริงสำหรับตัวระบุสตริง ช่วยให้สามารถเชื่อมโยงสตริงกับรายการหรือตัวควบคุมเฉพาะได้
สตริงท้องถิ่น
ระบุดัชนีสตริงแรกเมื่อกำหนดกลุ่มสตริงแบบต่อเนื่องให้กับตัวควบคุมในอาร์เรย์
ขั้นต่ำหรือบิตแมป
ท้องถิ่น ท้องถิ่น
สตริงสูงสุด
ตัวกำหนดขอบเขต
ระบุดัชนีสตริงสุดท้ายเมื่อกำหนดกลุ่มของสตริงลำดับให้กับตัวควบคุมในอาร์เรย์หรือบิตแมป
กำหนดจุดเริ่มต้นหรือจุดสิ้นสุดของชุดรายการท้องถิ่น
ข้อมูลการควบคุมจะต้องกำหนดอย่างน้อยรายการต่อไปนี้:
รายการหลัก อินพุต เอาท์พุต หรือคุณสมบัติ รายการหลัก การใช้งาน รายการท้องถิ่น การใช้งานหน้า รายการทั่วโลก รายการทั่วโลกขั้นต่ำเชิงตรรกะ รายการทั่วโลกสูงสุดเชิงตรรกะ ขนาดรายงาน รายการทั่วโลก
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
31/174
เกินview
รายงานจำนวนรายการทั่วโลก ตารางด้านล่างแสดงการนำเสนอเนื้อหาตัวอธิบายรายงานเมาส์จากมุมมองของตัวแยกวิเคราะห์ HID ของโฮสต์ เมาส์มีปุ่มสามปุ่ม (ซ้าย ขวา และล้อเลื่อน) โค้ดที่นำเสนอใน exampด้านล่างนี้เป็นการนำโค้ดไปใช้งานจริงซึ่งสอดคล้องกับการแสดงตัวอธิบายรายงานเมาส์นี้
รูปภาพ – รายงานเนื้อหาตัวอธิบายจาก Host HID Parser View
(1) ฟังก์ชันรายการหน้าการใช้งานจะระบุฟังก์ชันทั่วไปของอุปกรณ์ ในกรณีนี้ample อุปกรณ์ HID เป็นของ
การควบคุมเดสก์ท็อปทั่วไป
(2) กลุ่มแอปพลิเคชัน Collection จะจัดกลุ่มรายการหลัก (Main items) ที่มีวัตถุประสงค์การใช้งานร่วมกันและอาจคุ้นเคยกับแอปพลิเคชัน ในแผนภาพ กลุ่มนี้ประกอบด้วยรายการหลักอินพุต (Input Main items) สามรายการ สำหรับคอลเลกชันนี้ การใช้งานที่แนะนำสำหรับตัวควบคุมคือเมาส์ตามที่ระบุโดยรายการการใช้งาน (Usage items) (3) กลุ่มที่ซ้อนกันอาจใช้เพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับการใช้ตัวควบคุมเดี่ยวหรือกลุ่มตัวควบคุมสำหรับแอปพลิเคชัน ในตัวอย่างนี้ample, Collection Physical ซึ่งซ้อนอยู่ใน Collection Application ประกอบด้วยรายการอินพุตสามรายการเดียวกันที่ประกอบกันเป็น Collection Application Collection Physical ใช้สำหรับชุดรายการข้อมูลที่แสดงจุดข้อมูลที่รวบรวม ณ จุดทางเรขาคณิตจุดเดียว ในอดีตample การใช้งานที่แนะนำคือตัวชี้ตามที่ระบุโดยรายการการใช้งาน ในที่นี้ ตัวชี้การใช้งานหมายถึงพิกัดตำแหน่งของเมาส์ และซอฟต์แวร์ระบบจะแปลพิกัดของเมาส์ในการเคลื่อนที่ของเคอร์เซอร์บนหน้าจอ (4) หน้าการใช้งานแบบซ้อนยังสามารถทำได้ และให้รายละเอียดเพิ่มเติมเกี่ยวกับลักษณะเฉพาะบางอย่างภายในฟังก์ชันทั่วไปของอุปกรณ์ ในกรณีนี้ รายการอินพุตสองรายการจะถูกจัดกลุ่มและสอดคล้องกับปุ่มของเมาส์ รายการอินพุตรายการหนึ่งกำหนดปุ่มสามปุ่มของเมาส์ (ขวา ซ้าย และล้อเลื่อน) ในแง่ของจำนวนฟิลด์ข้อมูลสำหรับรายการ (รายการจำนวนรายงาน) ขนาดของฟิลด์ข้อมูล (รายการขนาดรายงาน) และค่าที่เป็นไปได้สำหรับแต่ละฟิลด์ข้อมูล (รายการการใช้งานขั้นต่ำและสูงสุด, รายการขั้นต่ำเชิงตรรกะและสูงสุด) รายการอินพุตอีกรายการหนึ่งเป็นค่าคงที่ 13 บิต ซึ่งช่วยให้ข้อมูลรายงานอินพุตถูกจัดเรียงบนขอบเขตไบต์ รายการอินพุตนี้ใช้เพื่อวัตถุประสงค์ในการแพดดิ้งเท่านั้น (5) หน้าการใช้งานแบบซ้อนอีกหน้าหนึ่งที่อ้างอิงถึงตัวควบคุมเดสก์ท็อปทั่วไป ถูกกำหนดสำหรับพิกัดตำแหน่งของเมาส์ สำหรับหน้าการใช้งานนี้ รายการอินพุตจะอธิบายฟิลด์ข้อมูลที่สอดคล้องกับแกน x และ y ตามที่ระบุโดยการใช้งานสองรายการ
รายการ
หลังจากวิเคราะห์เนื้อหาตัวอธิบายรายงานเมาส์ก่อนหน้า ตัวแยกวิเคราะห์ HID ของโฮสต์จะสามารถตีความข้อมูลรายงานอินพุตที่ส่งโดยอุปกรณ์ด้วยการถ่ายโอนข้อมูลแบบขัดจังหวะ (IN) หรือตอบสนองต่อคำขอ GET_REPORT ข้อมูลรายงานอินพุตที่สอดคล้องกับตัวอธิบายรายงานเมาส์ แสดงในรูปภาพ – เนื้อหาตัวอธิบายรายงานจากตัวแยกวิเคราะห์ HID ของโฮสต์ View is
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
32/174
เกินview
แสดงในตารางด้านล่าง ขนาดรวมของข้อมูลรายงานคือ 4 ไบต์ รายงานประเภทต่างๆ อาจถูกส่งผ่านจุดสิ้นสุดเดียวกันได้ เพื่อวัตถุประสงค์ในการแยกแยะรายงานประเภทต่างๆ จะมีการเพิ่มคำนำหน้ารหัสรายงานขนาด 1 ไบต์ลงในรายงานข้อมูล หากมีการใช้รหัสรายงานใน exampของรายงานเมาส์ ขนาดรวมของข้อมูลรายงานจะมีขนาด 5 ไบต์
ตาราง – รายงานอินพุตที่ส่งไปยังโฮสต์และสอดคล้องกับสถานะของเมาส์ 3 ปุ่ม
บิตออฟเซ็ต
0 1 2 3 16 24
จำนวนบิต 1 1 1 13 8 8
คำอธิบาย ปุ่ม 1 (ปุ่มซ้าย) ปุ่ม 2 (ปุ่มขวา) ปุ่ม 3 (ปุ่มล้อ) ไม่ได้ใช้งาน ตำแหน่งบนแกน X ตำแหน่งบนแกน Y
ตัวระบุทางกายภาพ (Physical descriptor) ระบุส่วนต่างๆ ของร่างกายที่มีวัตถุประสงค์เพื่อเปิดใช้งานการควบคุม แอปพลิเคชันอาจใช้ข้อมูลนี้เพื่อกำหนดฟังก์ชันการทำงานให้กับการควบคุมอุปกรณ์ ตัวระบุทางกายภาพ (Physical descriptor) เป็นตัวระบุเฉพาะคลาสที่เป็นทางเลือก และอุปกรณ์ส่วนใหญ่มีข้อได้เปรียบในการใช้งานน้อยมาก โปรดดูที่
ความต้องการทรัพยากรคลาส HID ของอุปกรณ์ USB จากแกนหลัก
ทุกครั้งที่คุณเพิ่มอินสแตนซ์คลาส HID ลงในการกำหนดค่า USB ผ่านการเรียกฟังก์ชัน sl_usbd_hid_add_to_configuration() ทรัพยากรต่อไปนี้จะถูกจัดสรรจากแกนหลัก
ทรัพยากร
อินเทอร์เฟซ อินเทอร์เฟซสำรอง จุดสิ้นสุด กลุ่มอินเทอร์เฟซ
ปริมาณ
1 1 1 (2 ถ้าจุดสิ้นสุดการขัดจังหวะ OUT เปิดใช้งานอยู่) 0
โปรดทราบว่าตัวเลขเหล่านี้ขึ้นอยู่กับการกำหนดค่าแต่ละค่า เมื่อตั้งค่าการกำหนดค่า SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY และ SL_USBD_DESCRIPTOR_QUANTITY อย่าลืมคำนึงถึงจำนวนการกำหนดค่าที่จะเพิ่มคลาส สำหรับค่าการกำหนดค่า SL_USBD_OPEN_ENDPOINTS_QUANTITY เนื่องจากจุดสิ้นสุดจะเปิดเฉพาะเมื่อโฮสต์ตั้งค่าการกำหนดค่า คุณจึงต้องคำนึงถึงจำนวนจุดสิ้นสุดที่จำเป็นสำหรับอินสแตนซ์ของคลาสเท่านั้น
การกำหนดค่าคลาส HID ของอุปกรณ์ USB
มีการใช้พารามิเตอร์การกำหนดค่าสองกลุ่มเพื่อกำหนดค่าคลาส HID:
การกำหนดค่าเฉพาะแอปพลิเคชันคลาส HID ของอุปกรณ์ USB การกำหนดค่าอินสแตนซ์คลาส HID ของอุปกรณ์ USB
การกำหนดค่าเฉพาะแอปพลิเคชันคลาส HID ของอุปกรณ์ USB
ขั้นแรก ในการใช้โมดูลคลาส HID ของอุปกรณ์ USB ของ Silicon Labs ให้ปรับการกำหนดค่า HID ตามเวลาคอมไพล์ให้ตรงกับความต้องการของแอปพลิเคชันของคุณ ซึ่งจะถูกจัดกลุ่มใหม่ภายในส่วนหัว sl_usbd_core_config.h file ภายใต้ส่วน HID ซึ่งสามารถแบ่งออกเป็นสองส่วน ได้แก่ การกำหนดค่าปริมาณ และการกำหนดค่างาน HID วัตถุประสงค์ของการกำหนดค่าปริมาณคือการแจ้งให้โมดูลอุปกรณ์ USB ทราบถึงจำนวนออบเจ็กต์ USB HID ที่จะจัดสรร
ตารางด้านล่างนี้จะอธิบายการกำหนดค่าแต่ละแบบ
ตาราง – การกำหนดค่า HID ของอุปกรณ์ USB กำหนด
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
33/174
เกินview
ชื่อการกำหนดค่า
SL_USBD_HID_CL ASS_I ปริมาณอินสแตนซ์
SL_USBD_HID_CONFIG ปริมาณการใช้งาน
SL_USBD_HID_REPORT_ ID_QUANTITY
SL_USBD_HID_PUSH_P จำนวนสินค้าที่สั่งซื้อ
SL_USBD_HID_TIMER_T ขนาดสแตกถาม
SL_USBD_HID_TIMER_T ถามลำดับความสำคัญ
คำอธิบาย
จำนวนอินสแตนซ์คลาสที่คุณจะจัดสรรผ่านการเรียกใช้ฟังก์ชัน
sl_usbd_hid_สร้างอินสแตนซ์()
จำนวนการกำหนดค่า สามารถเพิ่มอินสแตนซ์คลาส HID ลงในการกำหนดค่า aaaa หนึ่งรายการหรือมากกว่าได้ เช่น ฟังก์ชัน sl_usbd_hid_add_to_configuration() กำหนดค่าจำนวน ID รายงานทั้งหมดที่จะจัดสรร
กำหนดค่าจำนวนรวมของรายการ Push/Pop ที่จะจัดสรร
งานตัวจับเวลาจะจัดการการทำงานของ HID ทั้งหมดตามตัวจับเวลา การกำหนดค่านี้ช่วยให้คุณกำหนดขนาดสแต็ก (เป็นจำนวนไบต์) ได้ ลำดับความสำคัญของงาน HID นี้คือลำดับความสำคัญของ CMSIS-RTOS2
ค่าเริ่มต้น
2 1 2 0 2048
osPriorityHigh
คลาสการกำหนดค่าอินสแตนซ์ของอุปกรณ์ USB HID คลาสการสร้างอินสแตนซ์คลาสย่อย
รหัสประเทศโปรโตคอล
interval_in และ interval_out p_hid_callback ตัวอธิบายรายงานคลาส HID Exampส่วนนี้จะกำหนดค่าที่เกี่ยวข้องกับอินสแตนซ์คลาส HID
การสร้างอินสแตนซ์คลาส
การสร้างอินสแตนซ์คลาส HID ทำได้โดยการเรียกใช้ฟังก์ชัน aaa sl_usbd_hid_create_instance() ซึ่งเก็บอาร์กิวเมนต์การกำหนดค่าต่างๆ ดังอธิบายไว้ด้านล่าง
ชั้นย่อย
รหัสของซับคลาส HID ค่าที่เป็นไปได้คือ:
SL_USBD_HID_SUBCL ASS_ไม่มี SL_USBD_HID_SUBCL ASS_BOOT
อุปกรณ์ HID ที่ใช้คลาสย่อยการบูตต้องใช้รูปแบบรายงานมาตรฐาน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรหัสคลาสย่อย โปรดดูส่วนที่ 4.2 ของข้อกำหนด HID ฉบับแก้ไข 1.11
โปรโตคอล
โปรโตคอลที่อุปกรณ์ HID ใช้ ค่าที่เป็นไปได้คือ:
SL_USBD_HID_PROTOCOL_ไม่มี SL_USBD_HID_PROTOCOL_KBD SL_USBD_HID_PROTOCOL_เมาส์
หากฟังก์ชัน HID ของคุณคือเมาส์ ควรตั้งค่าโปรโตคอลเป็น SL_USBD_HID_PROTOCOL_MOUSE หากเป็นแป้นพิมพ์ ควรตั้งค่าเป็น SL_USBD_HID_PROTOCOL_KBD ในทางกลับกัน ควรตั้งค่าโปรโตคอลเป็น SL_USBD_HID_PROTOCOL_NONE สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรหัสซับคลาส โปรดดูหัวข้อ 4.3 ของข้อกำหนด HID ฉบับแก้ไข 1.11
รหัสประเทศ
รหัสประเทศ ค่าที่เป็นไปได้คือ:
SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
34/174
เกินview
SL_USBD_HID_COUNTRY_CODE_อาหรับ SL_USBD_HID_COUNTRY_CODE_เบลเยียม 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_เดนมาร์ก SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_ฝรั่งเศส SL_USBD_HID_COUNTRY_CODE_เยอรมัน SL_USBD_HID_COUNTRY_CODE_กรีก SL_USBD_HID_COUNTRY_CODE_HEBREW SL_USBD_HID_COUNTRY_CODE_ฮังการี 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) อย่างไรก็ตาม แป้นพิมพ์อาจใช้ฟิลด์นี้เพื่อระบุภาษาของปุ่มควบคุม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับรหัสประเทศ โปรดดูส่วนที่ 6.2.1 ของข้อกำหนด HID ฉบับแก้ไข 1.11
interval_in และ interval_out
interval_in และ interval_out แสดงถึงช่วงเวลาการโพลของจุดสิ้นสุดการขัดจังหวะ IN และจุดสิ้นสุดการขัดจังหวะ OUT
นี่คือช่วงเวลาการโพลของจุดสิ้นสุดในหน่วยมิลลิวินาที การตั้งค่านี้ขึ้นอยู่กับความถี่ที่อุปกรณ์ของคุณมีแนวโน้มที่จะสร้างรายงานใหม่สำหรับโฮสต์ ตัวอย่างเช่น หากมีการสร้างรายงานทุก 16 มิลลิวินาที ช่วงเวลาควรเป็น 16 หรือน้อยกว่า
ค่าจะต้องเป็นเลขยกกำลัง 2 (1, 2, 4, 8, 16 เป็นต้น)
จะละเว้น v lue ของ interval_out ถ้าตั้งค่า ctrl_rd_en เป็นจริง
p_hid_callback
aaaa p_hid_callback เป็นตัวชี้ไปยังโครงสร้างประเภท sl_usbd_hid_callbacks_t วัตถุประสงค์คือเพื่อกำหนดชุดฟังก์ชันคอลแบ็กของ HID Cl ss ที่จะเรียกใช้เมื่อเกิดเหตุการณ์ HID
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
35/174
เกินview
คอลแบ็กไม่ได้บังคับทั้งหมด และสามารถส่งผ่านพอยน์เตอร์ null (NULL) ในตัวแปรโครงสร้างคอลแบ็กได้เมื่อไม่จำเป็นต้องใช้คอลแบ็ก ตารางด้านล่างอธิบายฟิลด์การกำหนดค่าแต่ละฟิลด์ที่มีอยู่ในโครงสร้างการกำหนดค่านี้
ตาราง – โครงสร้างการกำหนดค่า sl_usbd_hid_callbacks_t
ทุ่งนา
คำอธิบาย
ลายเซ็นฟังก์ชัน
.เปิดใช้งาน .ปิดใช้งาน .get_report_desc
.get_phy_desc
.set_output_report .get_feature_report .set_feature_report
เรียกใช้เมื่อเปิดใช้งานอินสแตนซ์คลาส USB สำเร็จ เรียกใช้เมื่อปิดใช้งานอินสแตนซ์คลาส USB
เรียกใช้ระหว่างการสร้างอินสแตนซ์ HID เพื่อส่งผ่านตัวอธิบายรายงานของคุณ สำหรับแต่ละฟังก์ชัน HID ของคุณ คุณต้องระบุตัวอธิบายรายงาน ตัวอธิบายรายงานจะระบุให้โฮสต์ทราบว่าควรแยกวิเคราะห์รายงานเป็นระยะที่อุปกรณ์จะส่งอย่างไร การเขียนตัวอธิบายรายงานของคุณเองอาจเป็นเรื่องท้าทาย ดังนั้นจึงมีแหล่งข้อมูลที่จะช่วยคุณได้ นี่เป็นฟังก์ชันเรียกกลับที่จำเป็นเพียงฟังก์ชันเดียว เรียกใช้ระหว่างการสร้างอินสแตนซ์ HID เพื่อส่งผ่านตัวอธิบายทางกายภาพ ตัวอธิบายทางกายภาพคือตัวอธิบายที่ให้ข้อมูลเกี่ยวกับส่วนเฉพาะของร่างกายมนุษย์ที่กำลังเปิดใช้งานตัวควบคุม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวอธิบายทางกายภาพ โปรดดูหัวข้อ 6.2.3 ของข้อกำหนด HID ฉบับแก้ไข 1.11 ตัวอธิบายทางกายภาพเป็นตัวเลือกเสริมและส่วนใหญ่จะถูกละเว้น บัฟเฟอร์ที่ส่งมาสามารถตั้งค่าเป็น 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);
ถือเป็นโมฆะ app_usbd_hid_get_phy_desc(uint8_t class_nbr, const uint8_t *p_report_ptr, uint16_tp_report_len);
ถือเป็นโมฆะ app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); ถือเป็นโมฆะ app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); ถือเป็นโมฆะ app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_โปรโตคอล
ดึงข้อมูลโปรโตคอลที่ใช้งานอยู่ในปัจจุบัน
void app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol);
.set_โปรโตคอล
ตั้งค่าโปรโตคอลที่ใช้งานอยู่ปัจจุบัน
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t protocol);
ตัวอธิบายรายงานคลาส HID Example
คลาส HID ของ Silicon Labsampแอปพลิเคชัน le ให้ตัวอย่างample ของตัวอธิบายรายงานสำหรับเมาส์ธรรมดา ตัวอย่างample ข้างล่างแสดงคำอธิบายรายงานเมาส์
Example – ตัวอธิบายรายงานเมาส์
คงที่ uint8_t app_usbd_hid_report_desc[] = {
(1) (2)
SL_USBD_HID_GLOBAL_USAGE_PAGE + 1, SL_USBD_HID_USAGE_PAGE_GENERIC_DESKTOP_CONTROLS,
SL_USBD_HID_LOCAL_USAGE + 1, SL_USBD_HID_CA_MOUSE,
(3)
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
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_ขนาด +1,0 01,
SL_USBD_HID_MAIN_อินพุต +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_อินพุต +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_ขนาด +1,0 08,
SL_USBD_HID_GLOBAL_REPORT_COUNT +1,0 02,
SL_USBD_HID_MAIN_อินพุต +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_MAIN_VARIABLE |
SL_USBD_HID_MAIN_RELATIVE,
SL_USBD_HID_MAIN_ENDคอลเลกชัน,(10)
คอลเลกชัน SL_USBD_HID_MAIN_END
(11)};
(1) ตารางที่แสดงตัวอธิบายรายงานเมาส์จะถูกกำหนดค่าเริ่มต้นโดยให้แต่ละบรรทัดสอดคล้องกับรายการสั้น รายการสั้นนี้สร้างขึ้นจากคำนำหน้าขนาด 1 ไบต์และข้อมูลขนาด 1 ไบต์ โปรดดู viewแก้ไขโดยตัววิเคราะห์ HID โฮสต์ในรูปภาพ – รายงานเนื้อหาตัวอธิบายจากตัววิเคราะห์ HID โฮสต์ View.
(2) มีการใช้หน้าการใช้งานเดสก์ท็อปทั่วไป
(3) ภายในหน้าการใช้งานเดสก์ท็อปทั่วไป การใช้งาน tag แสดงว่ากลุ่มของตัวควบคุมมีไว้สำหรับควบคุมเมาส์ โดยทั่วไปชุดควบคุมเมาส์จะประกอบด้วยแกนสองแกน (X และ Y) และปุ่มหนึ่ง สอง หรือสามปุ่ม
(4) เริ่มการรวบรวมเมาส์แล้ว
(5) ภายในคอลเลกชันเมาส์ การใช้งาน tag ชี้ให้เห็นอย่างชัดเจนยิ่งขึ้นว่าการควบคุมเมาส์เป็นส่วนหนึ่งของชุดตัวชี้ ชุดตัวชี้คือชุดของแกนที่สร้างค่าเพื่อนำทาง ระบุ หรือชี้ทิศทางความตั้งใจของผู้ใช้ไปยังแอปพลิเคชัน
(6) การรวบรวมตัวชี้เริ่มต้นแล้ว
(7) หน้าการใช้งานปุ่มจะกำหนดรายการอินพุตที่ประกอบด้วยฟิลด์ขนาด 1 บิตสามฟิลด์ แต่ละฟิลด์ขนาด 1 บิตแทนปุ่ม 1, 2 และ 3 ของเมาส์ตามลำดับ และสามารถคืนค่าเป็น 0 หรือ 1 ได้
(8) รายการอินพุตสำหรับหน้าการใช้งานปุ่มได้รับการเสริมด้วยส่วนอื่นอีก 13 ส่วน
(9) มีการระบุหน้าการใช้งานเดสก์ท็อปทั่วไปอีกหน้าหนึ่งเพื่ออธิบายตำแหน่งของเมาส์ด้วยแกน X และ Y รายการอินพุตประกอบด้วยฟิลด์ 8 บิตสองฟิลด์ โดยมีค่าระหว่าง -127 ถึง 127
(10) คอลเลกชันตัวชี้ถูกปิด
(11) คอลเลกชันเมาส์ถูกปิดแล้ว
หน้า HID ของ USB.org
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
37/174
เกินview
ฟอรัม USB Implementers Forum (USB-IF) มีเครื่องมือชื่อ “HID Descriptor Tool” พร้อมด้วยข้อมูลอื่นๆ เกี่ยวกับรูปแบบรายงาน โปรดดูข้อมูลเพิ่มเติมได้ที่ http://www.usb.org/developers/hidpage/
คู่มือการเขียนโปรแกรมคลาส HID ของอุปกรณ์ USB
ส่วนนี้จะอธิบายวิธีการใช้คลาส HID การเริ่มต้นคลาส HID ของอุปกรณ์ USB การเพิ่มอินสแตนซ์คลาส HID ของอุปกรณ์ USB ลงในอุปกรณ์ของคุณ การสื่อสารโดยใช้คลาส HID ของอุปกรณ์ USB
การเริ่มต้นคลาส HID ของอุปกรณ์ USB
หากต้องการเพิ่มฟังก์ชัน HID Class ให้กับอุปกรณ์ของคุณ คุณต้องเริ่มต้นคลาสก่อนโดยเรียกใช้ฟังก์ชัน sl_usbd_hid_init() ตัวอย่างampไฟล์ด้านล่างนี้แสดงวิธีการเรียกใช้ sl_usbd_hid_init() โดยใช้อาร์กิวเมนต์เริ่มต้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์การกำหนดค่าที่จะส่งไปยัง sl_usbd_hid_init() โปรดดูการกำหนดค่าเฉพาะแอปพลิเคชันของคลาส HID ของอุปกรณ์ USB
Example – การเรียก sl_usbd_hid_init()
สถานะ sl_status_t;
สถานะ = sl_usbd_hid_init(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
การเพิ่มอินสแตนซ์คลาส HID ของอุปกรณ์ USB ลงในอุปกรณ์ของคุณ
หากต้องการเพิ่มฟังก์ชันคลาส HID ให้กับอุปกรณ์ของคุณ คุณต้องสร้างอินสแตนซ์ จากนั้นจึงเพิ่มลงในการกำหนดค่าของอุปกรณ์
การสร้างอินสแตนซ์คลาส HID
สร้างอินสแตนซ์คลาส HID โดยเรียกใช้ฟังก์ชัน sl_usbd_hid_create_instance() ตัวอย่างampไฟล์ด้านล่างนี้แสดงวิธีการสร้างฟังก์ชันเมาส์อย่างง่ายผ่าน sl_usbd_hid_create_instance() โดยใช้อาร์กิวเมนต์เริ่มต้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์การกำหนดค่าที่จะส่งไปยัง sl_usbd_hid_create_instance() โปรดดู การกำหนดค่าอินสแตนซ์คลาส HID ของอุปกรณ์ USB
Example – การเพิ่มฟังก์ชันเมาส์ผ่าน sl_usbd_hid_create_instance()
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
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 };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (void)class_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = ขนาดของ(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 Silicon Laboratories สงวนลิขสิทธิ์
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(คลาส_nbr,
(1)
config_nbr_fs); (2)
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
(1) หมายเลขคลาสที่จะเพิ่มลงในการกำหนดค่าที่ส่งคืนโดย sl_usbd_hid_create_instance() (2) หมายเลขการกำหนดค่า (ในที่นี้คือการเพิ่มลงในการกำหนดค่าแบบ Full-Speed)
การสื่อสารโดยใช้คลาส HID ของอุปกรณ์ USB
คลาสการสื่อสารแบบอินสแตนซ์ การสื่อสารแบบซิงโครนัส คลาสการสื่อสารแบบอินสแตนซ์ คลาส HID นำเสนอฟังก์ชันต่อไปนี้ในการสื่อสารกับโฮสต์
ตาราง – สรุป API การสื่อสาร HID
ชื่อฟังก์ชั่น
sl_usb d _hid _ โฆษณา _sy nc() sl_usb d _hid _write _sy nc()
การดำเนินการ รับข้อมูลจากโฮสต์ผ่านจุดสิ้นสุดการขัดจังหวะ OUT ฟังก์ชันนี้กำลังบล็อก ส่งข้อมูลไปยังโฮสต์ผ่านจุดสิ้นสุดการขัดจังหวะ IN ฟังก์ชันนี้กำลังบล็อก
การสื่อสารแบบซิงโครนัส การสื่อสารแบบซิงโครนัสหมายความว่าการถ่ายโอนกำลังถูกบล็อก เมื่อมีการเรียกใช้ฟังก์ชัน แอปพลิเคชันจะบล็อกจนกว่าการถ่ายโอนจะเสร็จสมบูรณ์ ไม่ว่าจะมีข้อผิดพลาดหรือไม่ก็ตาม สามารถกำหนดเวลาหมดเวลาเพื่อหลีกเลี่ยงการรอคอยอย่างถาวรได้ ตัวอย่างampภาพด้านล่างแสดงการอ่านและการเขียนที่รับข้อมูลจากโฮสต์โดยใช้จุดสิ้นสุดการขัดจังหวะ OUT และส่งข้อมูลไปยังโฮสต์โดยใช้จุดสิ้นสุดการขัดจังหวะ IN
Example – การอ่านและเขียน HID แบบซิงโครนัส
__จัดแนว(4) uint8_t rx_buf[2];
__จัดแนว(4) uint8_t tx_buf[2];
ยูอินต์32_ต
xfer_len;
สถานะ sl_t
สถานะ;
สถานะ = sl_usbd_hid_read_sync(class_nbr,
(1)
(เป็นโมฆะ *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
40/174
เกินview
สถานะ =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */}
สถานะ =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
เพื่อประหยัดแบนด์วิดท์ โฮสต์สามารถปิดเสียงรายงานจากจุดสิ้นสุดอินเทอร์รัปต์ได้โดยการจำกัดความถี่ในการรายงาน ในการดำเนินการนี้ โฮสต์ต้องส่งคำขอ SET_IDLE คลาส HID ที่ Silicon Labs นำมาใช้ประกอบด้วยงานภายในที่คำนึงถึงข้อจำกัดความถี่ในการรายงาน ซึ่งคุณสามารถนำไปใช้กับรายงานอินพุตหนึ่งรายการหรือหลายรายการได้ รูปภาพ "งานรายงานอินพุตเป็นระยะ" แสดงการทำงานของงานรายงานอินพุตเป็นระยะ
รูปภาพ – งานรายงานอินพุตเป็นระยะ
(1) อุปกรณ์ได้รับคำขอ SET_IDLE คำขอนี้ระบุระยะเวลาการหยุดทำงานสำหรับรหัสรายงานที่กำหนด สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับคำขอ SET_IDLE โปรดดู
(2) โครงสร้างรหัสรายงาน (ซึ่งจัดสรรไว้ในช่วงเริ่มต้นคลาส HID) จะถูกอัปเดตด้วยระยะเวลาว่าง ตัวนับระยะเวลาว่างจะถูกกำหนดค่าเริ่มต้นด้วยค่าระยะเวลาว่าง โครงสร้างรหัสรายงานจะถูกแทรกไว้ท้ายรายการลิงก์ซึ่งประกอบด้วยโครงสร้างรหัสรายงานอินพุต ค่าระยะเวลาว่างจะแสดงเป็นหน่วย 4 มิลลิวินาที ซึ่งมีช่วงตั้งแต่ 4 ถึง 1020 มิลลิวินาที
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
41/174
เกินview
หากระยะเวลาการไม่ได้ใช้งานน้อยกว่าช่วงเวลาการโพลของจุดสิ้นสุดการขัดจังหวะ IN รายงานจะถูกสร้างขึ้นในช่วงเวลาการโพล
(3) ทุก ๆ 4 มิลลิวินาที งานรายงานอินพุตเป็นระยะจะเรียกดูรายการ ID รายงานอินพุต สำหรับแต่ละ ID รายงานอินพุต งานจะดำเนินการอย่างใดอย่างหนึ่งจากสองการดำเนินการที่เป็นไปได้ ระยะเวลาของช่วงเวลางานตรงกับหน่วย 4 มิลลิวินาทีที่ใช้สำหรับระยะเวลาว่าง หากโฮสต์ไม่ได้ส่งคำขอ SET_IDLE รายการ ID รายงานอินพุตจะว่างเปล่าและงานจะไม่มีอะไรให้ประมวลผล งานจะประมวลผลเฉพาะ ID รายงานที่ต่างจาก 0 และมีระยะเวลาว่างมากกว่า 0 เท่านั้น
(4) สำหรับ ID รายงานอินพุตที่กำหนด งานจะตรวจสอบว่าระยะเวลาการไม่ได้ใช้งานผ่านไปแล้วหรือไม่ หากระยะเวลาการไม่ได้ใช้งานยังไม่ผ่านไป ตัวนับจะลดลงและจะไม่มีการส่งรายงานอินพุตไปยังโฮสต์
(5) หากระยะเวลาการไม่ได้ใช้งานผ่านไปแล้ว (นั่นคือ ตัวนับระยะเวลาการไม่ได้ใช้งานได้ถึงศูนย์แล้ว) รายงานอินพุตจะถูกส่งไปยังโฮสต์โดยเรียกใช้ฟังก์ชัน sl_usbd_hid_write_sync() ผ่านจุดสิ้นสุดการขัดจังหวะ IN
(6) ข้อมูลรายงานอินพุตที่ส่งโดยงานมาจากบัฟเฟอร์ข้อมูลภายในที่จัดสรรไว้สำหรับรายงานอินพุตแต่ละรายการตามที่อธิบายไว้ในตัวอธิบายรายงาน งานแอปพลิเคชันสามารถเรียกใช้ฟังก์ชัน sl_usbd_hid_write_sync() เพื่อส่งรายงานอินพุตได้ หลังจากส่งข้อมูลรายงานอินพุตแล้ว sl_usbd_hid_write_sync() จะอัปเดตบัฟเฟอร์ภายในที่เชื่อมโยงกับ ID รายงานอินพุตด้วยข้อมูลที่เพิ่งส่งไป จากนั้น งานรายงานอินพุตแบบเป็นระยะจะส่งข้อมูลรายงานอินพุตเดียวกันทุกครั้งหลังจากหมดเวลาพักการทำงานแต่ละครั้ง และจนกว่างานแอปพลิเคชันจะอัปเดตข้อมูลในบัฟเฟอร์ภายใน มีกลไกการล็อกบางอย่างเพื่อป้องกันความเสียหายของข้อมูล ID รายงานอินพุตในกรณีที่มีการแก้ไขข้อมูล ณ เวลาที่ส่งข้อมูลโดยงานรายงานอินพุตแบบเป็นระยะ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
42/174
เกินview
เกินview
อุปกรณ์ USB คลาส MSC
อุปกรณ์ USB MSC คลาสเกินview ความต้องการทรัพยากรคลาส MSC ของอุปกรณ์ USB จากการกำหนดค่าคลาส MSC ของอุปกรณ์ USB หลัก คู่มือการเขียนโปรแกรมคลาส MSC ของอุปกรณ์ USB ไดรเวอร์ที่เก็บข้อมูลคลาส MSC ของอุปกรณ์ USB
ส่วนนี้จะอธิบายถึงคลาสอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่ (MSC) ที่อุปกรณ์ USB ของ Silicon Labs รองรับ MSC คือโปรโตคอลที่ช่วยให้สามารถถ่ายโอนข้อมูลระหว่างอุปกรณ์ USB และโฮสต์ได้ ข้อมูลที่ถูกถ่ายโอนคือข้อมูลใดๆ ที่สามารถจัดเก็บในรูปแบบอิเล็กทรอนิกส์ได้ เช่น โปรแกรมที่ปฏิบัติการได้ ซอร์สโค้ด เอกสาร รูปภาพ ข้อมูลการกำหนดค่า หรือข้อมูลข้อความหรือตัวเลขอื่นๆ อุปกรณ์ USB จะปรากฏเป็นสื่อบันทึกข้อมูลภายนอกสำหรับโฮสต์ ทำให้สามารถถ่ายโอนข้อมูลได้ fileโดยการลากและวาง
A file ระบบกำหนดว่าวิธีการ files ถูกจัดระเบียบในสื่อจัดเก็บข้อมูล ข้อกำหนดคลาสการจัดเก็บข้อมูลขนาดใหญ่ของ USB ไม่จำเป็นต้องมีข้อกำหนดเฉพาะใดๆ file ระบบที่จะใช้งานบนอุปกรณ์ที่สอดคล้อง แต่จะมีอินเทอร์เฟซที่เรียบง่ายสำหรับการอ่านและเขียนข้อมูลโดยใช้ชุดคำสั่งโปร่งใสของ Small Computer System Interface (SCSI) ดังนั้น ระบบปฏิบัติการจึงอาจปฏิบัติต่อไดรฟ์ USB เหมือนกับฮาร์ดไดรฟ์ และสามารถฟอร์แมตด้วยไดรฟ์ใดก็ได้ file ระบบที่พวกเขาชอบ
คลาสอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่แบบ USB รองรับโปรโตคอลการขนส่งสองแบบ ดังนี้:
การขนส่งแบบ Bulk-Only Transport (BOT) การควบคุม/Bulk/Interrupt (CBI) การขนส่ง (ใช้เฉพาะสำหรับฟลอปปีดิสก์ไดรฟ์)
คลาสอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่ใช้ชุดคำสั่งโปร่งใสของ SCSI โดยใช้โปรโตคอล BOT เท่านั้น ซึ่งหมายความว่าจะใช้เฉพาะจุดปลายทางจำนวนมากในการส่งข้อมูลและข้อมูลสถานะ การใช้งาน MSC รองรับหน่วยลอจิคัลหลายหน่วย
การใช้งาน MSC เป็นไปตามข้อกำหนดต่อไปนี้:
ข้อกำหนดคลาสการจัดเก็บข้อมูลขนาดใหญ่ของ Universal Serial Busview, การแก้ไขครั้งที่ 1.3 เมื่อวันที่ 5 กันยายน พ.ศ. 2008 การขนส่งแบบ Mass Storage Class Bulk-Only ของ Universal Serial Bus การแก้ไขครั้งที่ 1.0 เมื่อวันที่ 31 กันยายน พ.ศ. 1999
อุปกรณ์ USB MSC aCl ss เหนือview
จุดสิ้นสุดโปรโตคอล คำขอคลาส อินเทอร์เฟซระบบคอมพิวเตอร์ขนาดเล็ก (SCSI)
โปรโตคอล
ในหัวข้อนี้ เราจะพูดถึงโปรโตคอล Bulk-Only Transport (BOT) ของคลาส Mass Storage โปรโตคอล Bulk-Only Transport มีสามแบบtagใช่:
การขนส่งคำสั่ง การขนส่งข้อมูล การขนส่งสถานะ
คำสั่งจัดเก็บข้อมูลจำนวนมากจะถูกส่งโดยโฮสต์ผ่านโครงสร้างที่เรียกว่า Command Block Wrapper (CBW) สำหรับคำสั่งที่ต้องการการขนส่งข้อมูลtage โฮสต์จะพยายามส่งหรือรับจำนวนไบต์ที่แน่นอนจากอุปกรณ์ตามที่ระบุโดยฟิลด์ความยาวและแฟล็กของ CBW หลังจากการถ่ายโอนข้อมูลtage โฮสต์พยายามรับ Command Status Wrapper (CSW) จากอุปกรณ์ที่ให้รายละเอียดสถานะของคำสั่ง รวมถึงข้อมูลที่เหลือ (ถ้า
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
43/174
เกินview
ใด ๆ) สำหรับคำสั่งที่ไม่มีการขนส่งข้อมูลtage โฮสต์จะพยายามรับ CSW โดยตรงหลังจากส่ง CBW รายละเอียดโปรโตคอลอยู่ในรูป – โปรโตคอล MSC
รูปภาพ – โปรโตคอล MSC
ปลายทาง
ในส่วนของอุปกรณ์ ตามข้อกำหนดของ BOT MSC ประกอบด้วยจุดสิ้นสุดดังต่อไปนี้: จุดสิ้นสุดควบคุมขาเข้าและขาออกคู่หนึ่งที่เรียกว่าจุดสิ้นสุดเริ่มต้น และจุดสิ้นสุดขาเข้าและขาออกจำนวนมากอีกคู่หนึ่ง
ตารางด้านล่างแสดงการใช้งานที่แตกต่างกันของจุดสิ้นสุด
ตาราง – การใช้งานจุดสิ้นสุด MSC
จุดสิ้นสุด
ควบคุมเข้า ควบคุมออก จำนวนมาก จำนวนมาก ออก
ทิศทาง
อุปกรณ์ถึงโฮสต์ โฮสต์ถึงอุปกรณ์ อุปกรณ์ถึงโฮสต์ โฮสต์ถึงอุปกรณ์
การใช้งาน
การแจงนับและคำขอเฉพาะคลาส MSC การแจงนับและคำขอเฉพาะคลาส MSC ส่ง CSW และข้อมูล รับ CBW และข้อมูล
คำขอชั้นเรียน
มีคำขอควบคุมที่กำหนดไว้สองรายการสำหรับโปรโตคอล MSC BOT คำขอเหล่านี้และคำอธิบายมีรายละเอียดอยู่ในตารางด้านล่าง
ตาราง – คำขอคลาสการจัดเก็บข้อมูลจำนวนมาก
คำขอชั้นเรียน
การรีเซ็ตการจัดเก็บข้อมูลจำนวนมากเท่านั้น
คำอธิบาย
คำขอนี้ใช้เพื่อรีเซ็ตอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่และอินเทอร์เฟซที่เกี่ยวข้อง คำขอนี้เตรียมอุปกรณ์ให้พร้อมรับบล็อกคำสั่งถัดไป
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
44/174
เกินview
คำขอชั้นเรียน
คำอธิบาย
รับค่าสูงสุด คำขอนี้ใช้เพื่อส่งคืนหมายเลขหน่วยลอจิคัล (LUN) สูงสุดที่อุปกรณ์รองรับ ตัวอย่างเช่นampเลอ อะ
ลุน
อุปกรณ์ที่มี LUN 0 และ LUN 1 จะส่งคืนค่า 1 อุปกรณ์ที่มีหน่วยลอจิคัลเดียวจะส่งคืนค่า 0 หรือหยุดการทำงาน
คำขอ ค่าสูงสุดที่สามารถส่งคืนได้คือ 15
อินเทอร์เฟซระบบคอมพิวเตอร์ขนาดเล็ก SCSI
ในระดับอินเทอร์เฟซการเขียนโปรแกรม อุปกรณ์ MSC จะใช้โปรโตคอลการสื่อสารสื่อบันทึกข้อมูลมาตรฐานอย่างใดอย่างหนึ่ง เช่น SCSI และ SFF-8020i (ATAPI) ส่วน "อินเทอร์เฟซการเขียนโปรแกรม" จะระบุโปรโตคอลที่จะนำมาใช้ และช่วยให้ระบบปฏิบัติการโฮสต์โหลดไดรเวอร์อุปกรณ์ที่เหมาะสมสำหรับการสื่อสารกับอุปกรณ์จัดเก็บข้อมูล USB SCSI เป็นโปรโตคอลที่นิยมใช้กับอุปกรณ์จัดเก็บข้อมูล USB MSC มากที่สุด เรามีการพัฒนาสำหรับคลาสย่อย MSC SCSI ที่ผู้ใช้ GSDK ของเราสามารถใช้งานได้ทันที
SCSI คือชุดมาตรฐานสำหรับการจัดการการสื่อสารระหว่างคอมพิวเตอร์และอุปกรณ์ต่อพ่วง มาตรฐานเหล่านี้ประกอบด้วยคำสั่ง โปรโตคอล อินเทอร์เฟซทางไฟฟ้า และอินเทอร์เฟซแบบออปติคัล อุปกรณ์จัดเก็บข้อมูลที่ใช้อินเทอร์เฟซฮาร์ดแวร์อื่นๆ เช่น USB จะใช้คำสั่ง SCSI เพื่อรับข้อมูลอุปกรณ์/โฮสต์ และควบคุมการทำงานของอุปกรณ์ รวมถึงถ่ายโอนข้อมูลเป็นบล็อกในสื่อจัดเก็บข้อมูล
คำสั่ง SCSI ครอบคลุมอุปกรณ์หลากหลายประเภทและฟังก์ชัน ดังนั้น อุปกรณ์จึงจำเป็นต้องใช้คำสั่งย่อยเหล่านี้ โดยทั่วไป คำสั่งต่อไปนี้จำเป็นสำหรับการสื่อสารขั้นพื้นฐาน:
สอบถาม อ่าน ความจุ(10) อ่าน(10) ขอ ทดสอบความรู้สึก หน่วย พร้อม เขียน(10)
ความต้องการทรัพยากรคลาส MSC ของอุปกรณ์ USB จากแกนหลัก
ทุกครั้งที่คุณเพิ่มอินสแตนซ์คลาส MSC ลงในการกำหนดค่า USB ผ่านฟังก์ชัน sl_usbd_msc_add_to_configuration() ทรัพยากรต่อไปนี้จะถูกจัดสรรจากแกนหลัก
ทรัพยากร
อินเทอร์เฟซ อินเทอร์เฟซสำรอง จุดสิ้นสุด กลุ่มอินเทอร์เฟซ
ปริมาณ
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 เนื่องจากจุดสิ้นสุดจะเปิดเฉพาะเมื่อโฮสต์ตั้งค่าการกำหนดค่า คุณจึงต้องคำนึงถึงจำนวนจุดสิ้นสุดที่จำเป็นสำหรับอินสแตนซ์ของคลาสเท่านั้น
การกำหนดค่าคลาส MSC ของอุปกรณ์ USB
มีการใช้พารามิเตอร์การกำหนดค่าสองกลุ่มเพื่อกำหนดค่าคลาส MSC:
การกำหนดค่าเฉพาะแอปพลิเคชันคลาส MSC ของอุปกรณ์ USB การกำหนดค่าหน่วยลอจิคัลคลาส MSC ของอุปกรณ์ USB
การกำหนดค่าเฉพาะแอปพลิเคชันคลาส MSC ของอุปกรณ์ USB
การกำหนดค่าคลาสในเวลาคอมไพล์ การสร้างอินสแตนซ์คลาส
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
45/174
เกินview
การกำหนดค่าเวลาคอมไพล์คลาส
คลาส MSC ของอุปกรณ์ USB Silicon Labs และคลาสย่อย SCSI สามารถกำหนดค่าได้ในเวลาคอมไพล์ผ่าน #defines ที่อยู่ใน sl_usbd_core_config.h file.
ตาราง – ค่าคงที่การกำหนดค่าทั่วไป
ชื่อการกำหนดค่า
คำอธิบาย
SL_USBD_MSC_CLASS_INST จำนวนอินสแตนซ์คลาสที่คุณจะจัดสรรผ่านการเรียกใช้ฟังก์ชัน
ปริมาณ
sl_usbd_msc_scsi_สร้างอินสแตนซ์()
SL_USBD_MSC_CONFIGURA จำนวนการกำหนดค่าที่สามารถเพิ่มอินสแตนซ์คลาสได้โดยการเรียกใช้
TION_QUANTITY
ฟังก์ชัน sl_usbd_msc_scsi_add_to_configuration()
SL_USBD_MSC_LUN_QUANT จำนวนหน่วยลอจิคัลต่ออินสแตนซ์คลาสที่คุณจะเพิ่มผ่านการเรียกไปยัง
ไอตี้
ฟังก์ชัน sl_usbd_msc_scsi_lun_add()
SL_USBD_MSC_SCSI_64_BIT เปิดใช้งานหรือปิดใช้งานการรองรับ Logical Block Address (LBA) ขนาด 64 บิต
_LBA_EN
SL_USBD_MSC_DATA_BUFF ขนาดของบัฟเฟอร์ข้อมูลต่ออินสแตนซ์คลาสเป็นไบต์ ER_SIZE
ค่าเริ่มต้น
2
1
2
0
512
การสร้างอินสแตนซ์คลาส
การสร้างอินสแตนซ์คลาส MSC SCSI ของอุปกรณ์ USB ทำได้โดยการเรียกใช้ฟังก์ชัน sl_usbd_msc_scsi_create_instance() ฟังก์ชันนี้รับอาร์กิวเมนต์การกำหนดค่าหนึ่งตัวตามที่อธิบายไว้ด้านล่าง
การเรียกกลับ p_scsi
p_scsi_callbacks คือตัวชี้ไปยังโครงสร้างการกำหนดค่าประเภท sl_usbd_msc_scsi_callbacks_t นอกจากคอลแบ็กของคลาสอุปกรณ์ usb ทั่วไปที่ชื่อว่า connect/disconnect แล้ว ยังมีชุดฟังก์ชันคอลแบ็กเสริมให้กับคลาส MSC ซึ่งจะถูกเรียกใช้เมื่อเหตุการณ์เกิดขึ้นบนหน่วยลอจิคัล สามารถส่งพอยน์เตอร์ null (NULL) ไปยังอาร์กิวเมนต์นี้ได้หากไม่จำเป็นต้องใช้คอลแบ็ก
ตารางด้านล่างนี้จะอธิบายฟิลด์การกำหนดค่าแต่ละฟิลด์ที่มีอยู่ในโครงสร้างการกำหนดค่านี้
ตาราง – โครงสร้างการกำหนดค่า sl_usbd_msc_scsi_callbacks_t
ทุ่งนา
คำอธิบาย
.เปิดใช้งาน
เรียกเมื่อเปิดใช้งานอินสแตนซ์คลาส USB สำเร็จ
.disable เรียกเมื่ออินสแตนซ์คลาส USB ถูกปิดใช้งาน
ฟังก์ชัน .host_eject จะถูกเรียกเมื่อหน่วยลอจิคัลถูกดีดออกจากโฮสต์
ลายเซ็นฟังก์ชัน
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
เป็นโมฆะ app_usbd_msc_scsi_disable(uint8_t class_nbr); เป็นโมฆะ app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);
การกำหนดค่าหน่วยลอจิคัลคลาส MSC ของอุปกรณ์ USB
การเพิ่มหน่วยลอจิคัลลงในอินสแตนซ์คลาส MSC ทำได้โดยการเรียกใช้ฟังก์ชัน sl_usbd_msc_lun_add() ฟังก์ชันนี้รับอาร์กิวเมนต์การกำหนดค่าหนึ่งตัวดังที่อธิบายไว้ด้านล่าง
p_lu_info
p_lu_info คือตัวชี้ไปยังโครงสร้างประเภท sl_usbd_msc_scsi_lun_info_t วัตถุประสงค์คือเพื่อส่งข้อมูลบนหน่วยลอจิคัลไปยังคลาส MSC
ตารางด้านล่างนี้จะอธิบายฟิลด์การกำหนดค่าแต่ละฟิลด์ที่มีอยู่ในโครงสร้างการกำหนดค่านี้
ตาราง – โครงสร้างการกำหนดค่า sl_usbd_msc_scsi_lun_info_t
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
46/174
เกินview
สนาม
คำอธิบาย
สนาม
.scsi_lun_api_p tr
คำอธิบาย
ตัวชี้ไปยัง API ของไดรเวอร์สื่อที่จะจัดการหน่วยลอจิคัลนี้ ดูไดรเวอร์หน่วยเก็บข้อมูลคลาส MSC ของอุปกรณ์ USB สำหรับข้อมูลเพิ่มเติมเกี่ยวกับไดรเวอร์หน่วยเก็บข้อมูล
.ve nd o r_id _ p tr
.รหัสผลิตภัณฑ์_ptr
.p ro d uct_ re v isi on_level .is_ re ad _o nly
ตัวชี้ไปยังสตริงที่มีรหัสประจำตัวผู้ขายของหน่วยลอจิคัล ความยาวสูงสุดของสตริงคือ 8 อักขระ ตัวชี้ไปยังสตริงที่มีรหัสประจำตัวผลิตภัณฑ์ของหน่วยลอจิคัล ความยาวสูงสุดของสตริงคือ 16 อักขระ ระดับการแก้ไขผลิตภัณฑ์
แฟล็กที่ระบุว่าควรดูหน่วยลอจิกเป็นแบบอ่านอย่างเดียวจากจุด view ของโฮสต์ ( true ) หรือไม่ ( false )
คู่มือการเขียนโปรแกรมคลาส MSC ของอุปกรณ์ USB
ส่วนนี้จะอธิบายวิธีการใช้งานคลาส MSC
การเริ่มต้นคลาส MSC ของอุปกรณ์ USB การเพิ่มอินสแตนซ์คลาส MSC SCSI ของอุปกรณ์ USB ลงในอุปกรณ์ของคุณ คลาส MSC ของอุปกรณ์ USB การจัดการหน่วยลอจิคัล
การเริ่มต้นคลาส MSC ของอุปกรณ์ USB
หากต้องการเพิ่มฟังก์ชันการทำงานของคลาส MSC SCSI ให้กับอุปกรณ์ของคุณ ขั้นแรกให้เริ่มต้นคลาสฐาน MSC และคลาสย่อย SCSI ด้วยการเรียกใช้ฟังก์ชัน sl_usbd_msc_init() และ sl_usbd_msc_scsi_init()
อดีตampไฟล์ด้านล่างนี้แสดงวิธีการเรียก sl_usbd_msc_init() และ sl_usbd_msc_scsi_init()
Example – การเรียก sl_usbd_msc_init() และ sl_usbd_msc_scsi_init()
สถานะ sl_status_t;
สถานะ = sl_usbd_msc_init(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
สถานะ = sl_usbd_msc_scsi_init(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
การเพิ่มอินสแตนซ์คลาส MSC SCSI ของอุปกรณ์ USB ลงในอุปกรณ์ของคุณ
หากต้องการเพิ่มฟังก์ชันคลาส MSC SCSI ให้กับอุปกรณ์ของคุณ ขั้นแรกให้สร้างอินสแตนซ์ จากนั้นเพิ่มลงในคอนฟิกูเรชันของอุปกรณ์ คุณต้องเพิ่มหน่วยลอจิคัลอย่างน้อยหนึ่งหน่วยลงในอินสแตนซ์ของคุณ
การสร้างอินสแตนซ์คลาส MSC SCSI
สร้างอินสแตนซ์คลาส MSC SCSI โดยเรียกใช้ฟังก์ชัน sl_usbd_msc_scsi_create_instance()
อดีตampไฟล์ด้านล่างนี้แสดงวิธีการเรียกใช้ sl_usbd_msc_scsi_create_instance() โดยใช้อาร์กิวเมนต์เริ่มต้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์การกำหนดค่าที่จะส่งไปยัง sl_usbd_msc_scsi_create_instance() โปรดดูที่ การกำหนดค่าเฉพาะแอปพลิเคชันคลาส MSC ของอุปกรณ์ USB
Example – การเรียก sl_usbd_ msc_scsi_create_instance()
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
47/174
เกินview
uint8_t class_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(class_nbr,
(1)
config_nbr_fs);
(2)
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
(1) หมายเลขคลาสที่จะเพิ่มลงในการกำหนดค่าที่ส่งคืนโดย sl_usbd_msc_scsi_create_instance() (32) หมายเลขการกำหนดค่า (ในที่นี้คือการเพิ่มลงในการกำหนดค่าแบบ Full-Speed)
การจัดการหน่วยลอจิคัลคลาส MSC ของอุปกรณ์ USB
การเพิ่มหน่วยลอจิคัล การเชื่อมต่อ/การแยกสื่อจัดเก็บข้อมูล
การเพิ่มหน่วยลอจิก
เมื่อเพิ่มหน่วยลอจิคัลลงในอินสแตนซ์คลาส MSC SCSI ของคุณ จะต้องผูกหน่วยนั้นเข้ากับสื่อบันทึกข้อมูล (RAMDisk, การ์ด SD, หน่วยความจำแฟลช ฯลฯ) คลาส MSC จะใช้ไดรเวอร์หน่วยเก็บข้อมูลเพื่อสื่อสารกับสื่อบันทึกข้อมูล ไดรเวอร์นี้จะต้องจัดเตรียมให้เมื่อเพิ่มหน่วยลอจิคัล
อดีตampไฟล์ด้านล่างนี้แสดงวิธีการเพิ่มหน่วยลอจิคัลผ่าน sl_usbd_msc_scsi_lun_add()
Example – การเพิ่มหน่วยลอจิคัลผ่าน sl_usbd_msc_scsi_lun_add()
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
48/174
เกินview
sl_usbd_msc_scsi_lun_t *lu_object_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t ข้อมูล lu_info;
สถานะ sl_t
สถานะ;
ข้อมูลเพิ่มเติม
lu_info.vendor_id_ptr
= “ซิลิคอนแล็บส์”;
lu_info.product_id_ptr
= “อุปกรณ์บล็อกเช่นampเล”;
lu_info.product_revision_level = 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 มีสองฟังก์ชันสำหรับควบคุมการเชื่อมโยงสื่อบันทึกข้อมูลกับหน่วยลอจิคัล ได้แก่ 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 – Media Attach/Detach
สถานะ sl_status_t;
สถานะ = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
…
(1)
สถานะ = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
…
(2)
สถานะ = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
…
(3)
(1) ตั้งแต่นี้เป็นต้นไป หากอุปกรณ์ MSC เชื่อมต่อกับโฮสต์แล้ว สื่อจัดเก็บข้อมูลก็สามารถเข้าถึงได้
(2) หากอุปกรณ์ MSC เชื่อมต่อกับโฮสต์ สื่อจะแสดงเป็นไม่พร้อมใช้งาน ในขณะนี้ คุณสามารถดำเนินการกับสื่อจากแอปพลิเคชันที่ฝังไว้ได้
(3) อีกครั้ง หากอุปกรณ์ MSC เชื่อมต่อกับโฮสต์ สื่อจัดเก็บข้อมูลจะปรากฏว่าเชื่อมต่อแล้ว
ไดรเวอร์จัดเก็บข้อมูลคลาส MSC ของอุปกรณ์ USB
อุปกรณ์ USB MSC Class จำเป็นต้องมีไดรเวอร์จัดเก็บข้อมูลเพื่อสื่อสารกับสื่อจัดเก็บข้อมูล ในขณะนี้ Silicon Labs ยังไม่มีไดรเวอร์ให้บริการ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
49/174
เกินview
ไดรเวอร์ AI ของ TPY ถูกกำหนดโดย typedef sl_usbd_msc_scsi_lun_api_t ต้องมี sl_usbd_msc_scsi_lun_api_t v ri ble ของเราเพื่อ aaaaaaaa sl_usbd_msc_scsi_lun_info_t v ri ble, p ssed s rgument เมื่อคุณ dd หน่วยตรรกะ l ด้วย sl_usbd_msc_scsi_lun_add() ดูรายละเอียดเพิ่มเติมเกี่ยวกับโครงสร้างในส่วน USB Device MSC SCSI API การใช้งานไดรเวอร์หน่วยเก็บข้อมูลสามารถทำได้ง่ายๆ เพียงแค่อาร์เรย์ของเซกเตอร์ใน RAM ขนาดเซกเตอร์ทั่วไป (เช่น ขนาดบล็อก) คือ 512 สำหรับอุปกรณ์จัดเก็บข้อมูลขนาดใหญ่ และ 2048 สำหรับ CD-ROM
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
50/174
เกินview
เกินview
คลาสผู้จำหน่ายอุปกรณ์ USB
ผู้จำหน่ายอุปกรณ์ USB คลาสเกินview ความต้องการทรัพยากรของคลาสผู้จำหน่ายอุปกรณ์ USB จากการกำหนดค่าคลาสผู้จำหน่ายอุปกรณ์ USB หลัก คู่มือการเขียนโปรแกรมคลาสผู้จำหน่ายอุปกรณ์ USB คลาสผู้จำหน่ายอุปกรณ์ USB ช่วยให้คุณสร้างอุปกรณ์เฉพาะของผู้จำหน่ายที่สามารถใช้โปรโตคอลที่เป็นกรรมสิทธิ์ได้ คลาสนี้ใช้จุดปลายจำนวนมากสองจุดเพื่อถ่ายโอนข้อมูลระหว่างโฮสต์และอุปกรณ์ การถ่ายโอนข้อมูลจำนวนมากสะดวกสำหรับการถ่ายโอนข้อมูลที่ไม่มีโครงสร้างจำนวนมาก และให้การแลกเปลี่ยนข้อมูลที่เชื่อถือได้โดยใช้กลไกการตรวจจับข้อผิดพลาดและการลองใหม่ นอกจากจุดปลายจำนวนมากแล้ว คลาสผู้จำหน่ายยังสามารถใช้จุดปลายขัดจังหวะคู่ที่เป็นทางเลือกได้อีกด้วย ระบบปฏิบัติการ (OS) ใดๆ ก็สามารถทำงานร่วมกับคลาสผู้จำหน่ายได้ โดยมีเงื่อนไขว่าระบบปฏิบัติการนั้นมีไดรเวอร์สำหรับจัดการคลาสผู้จำหน่าย ไดรเวอร์อาจเป็นแบบเนทีฟหรือแบบเฉพาะของผู้จำหน่าย ขึ้นอยู่กับระบบปฏิบัติการ ตัวอย่างเช่น ใน Microsoft Windows® แอปพลิเคชันของคุณจะโต้ตอบกับไดรเวอร์ WinUSB ที่ Microsoft จัดเตรียมให้เพื่อสื่อสารกับอุปกรณ์ของผู้จำหน่าย
ผู้จำหน่ายอุปกรณ์ USB คลาสเกินview
รูปภาพ – สถาปัตยกรรมทั่วไประหว่างโฮสต์ Windows และคลาส Vendor แสดงสถาปัตยกรรมทั่วไประหว่างโฮสต์และอุปกรณ์โดยใช้คลาส Vendor ในตัวอย่างนี้ampระบบปฏิบัติการหลักคือ MS Windows
รูปภาพ – สถาปัตยกรรมทั่วไประหว่างโฮสต์ MS Windows และคลาสผู้ขาย
ในส่วนของ MS Windows แอปพลิเคชันจะสื่อสารกับอุปกรณ์ของผู้จำหน่ายโดยโต้ตอบกับไลบรารี USB ไลบรารีต่างๆ เช่น libusb มี API สำหรับจัดการอุปกรณ์และไพพ์ที่เกี่ยวข้อง และสื่อสารกับอุปกรณ์ผ่านจุดควบคุม ปลายทางแบบ Bulk และปลายทางแบบ Interrupt
ในด้านอุปกรณ์ คลาส Vendor ประกอบด้วยจุดสิ้นสุดดังต่อไปนี้:
จุดสิ้นสุดการควบคุมคู่หนึ่งเรียกว่าจุดสิ้นสุดเริ่มต้น จุดสิ้นสุดแบบอินและเอาท์จำนวนมากคู่หนึ่ง
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
51/174
เกินview
คู่ปลายทางขัดจังหวะ IN และ OUT คู่นี้เป็นตัวเลือกเสริม ตารางด้านล่างแสดงการใช้งานของจุดสิ้นสุดที่แตกต่างกัน:
ตาราง – การใช้งานจุดสิ้นสุดคลาสผู้ขาย
ทิศทางจุดสิ้นสุด
ควบคุมใน
ควบคุม
ออก
จำนวนมากใน
อุปกรณ์โฮสต์
>โฮสต์ถึงอุปกรณ์
อุปกรณ์โฮสต์
จำนวนมากออก
ขัดจังหวะใน
ขัดจังหวะ
ออก
โฮสต์ถึงอุปกรณ์
อุปกรณ์โฮสต์
โฮสต์ถึงอุปกรณ์
การใช้งาน
คำขอมาตรฐานสำหรับการนับและคำขอเฉพาะของผู้จำหน่าย
คำขอมาตรฐานสำหรับการนับและคำขอเฉพาะของผู้จำหน่าย
การสื่อสารข้อมูลดิบ ข้อมูลสามารถจัดโครงสร้างตามโปรโตคอลที่เป็นกรรมสิทธิ์ได้
การสื่อสารข้อมูลดิบ ข้อมูลสามารถจัดโครงสร้างตามโปรโตคอลที่เป็นกรรมสิทธิ์ได้
การสื่อสารข้อมูลดิบหรือการแจ้งเตือน ข้อมูลสามารถจัดโครงสร้างตามโปรโตคอลที่เป็นกรรมสิทธิ์ได้ การสื่อสารข้อมูลดิบหรือการแจ้งเตือน ข้อมูลสามารถจัดโครงสร้างตามโปรโตคอลที่เป็นกรรมสิทธิ์ได้
แอปพลิเคชันอุปกรณ์สามารถใช้จุดสิ้นสุดแบบกลุ่มและแบบขัดจังหวะเพื่อส่งหรือรับข้อมูลไปยังหรือจากโฮสต์ สามารถใช้จุดสิ้นสุดเริ่มต้นเพื่อถอดรหัสคำขอเฉพาะของผู้ขายที่ส่งโดยโฮสต์เท่านั้น คำขอมาตรฐานได้รับการจัดการภายในโดยเลเยอร์หลักของอุปกรณ์ USB ของ Silicon Labs
ความต้องการทรัพยากรคลาสผู้จำหน่ายอุปกรณ์ 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
มีการใช้พารามิเตอร์การกำหนดค่าสองกลุ่มเพื่อกำหนดค่าคลาสผู้ขาย:
การกำหนดค่าเฉพาะแอปพลิเคชันคลาสผู้จำหน่ายอุปกรณ์ USB การกำหนดค่าอินสแตนซ์คลาสผู้จำหน่ายอุปกรณ์ USB
การกำหนดค่าเฉพาะแอปพลิเคชันคลาสผู้จำหน่ายอุปกรณ์ USB
ขั้นแรก ในการใช้โมดูลคลาส Vendor ของอุปกรณ์ USB ของ Silicon Labs ให้ปรับการกำหนดค่า Vendor ในเวลาคอมไพล์ให้ตรงกับความต้องการของแอปพลิเคชันของคุณ ซึ่งจะถูกจัดกลุ่มใหม่ภายในส่วนหัว sl_usbd_core_config.h file ภายใต้ส่วน Vendor วัตถุประสงค์ของการกำหนดค่าปริมาณคือการแจ้งให้โมดูลอุปกรณ์ USB ทราบถึงจำนวนอ็อบเจ็กต์ USB Vendor ที่จะจัดสรร
ตารางด้านล่างนี้จะอธิบายการกำหนดค่าแต่ละแบบ
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
52/174
เกินview
ตาราง – การกำหนดค่าผู้จำหน่ายอุปกรณ์ USB กำหนด
ชื่อการกำหนดค่า
คำอธิบาย
ค่าเริ่มต้น
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY จำนวนอินสแตนซ์คลาสที่คุณจะจัดสรรผ่านการเรียกฟังก์ชัน sl_usbd_vendor_create_instance() จำนวน 2 รายการ
SL_USBD_VENDOR_CONFIGURATION_QUANTITY จำนวนการกำหนดค่า สามารถเพิ่มอินสแตนซ์คลาส Vendor 1 รายการลงในการกำหนดค่าอย่างน้อยหนึ่งรายการได้โดยการเรียกใช้ฟังก์ชัน sl_usbd_vendor_add_to_configuration()
การกำหนดค่าอินสแตนซ์คลาสผู้จำหน่ายอุปกรณ์ USB
ส่วนนี้จะกำหนดค่าการกำหนดค่าที่เกี่ยวข้องกับอินสแตนซ์คลาส Vendor
การสร้างอินสแตนซ์คลาส intr_en ช่วงเวลา p_vendor_callbacks
การสร้างอินสแตนซ์คลาส
การสร้างอินสแตนซ์คลาส Vendor ทำได้โดยการเรียกใช้ฟังก์ชัน sl_usbd_vendor_create_instance() ซึ่งรับอาร์กิวเมนต์การกำหนดค่าสามรายการดังที่อธิบายไว้ด้านล่าง
อินทราเอ็น
บูลีนที่ระบุว่าควรเพิ่มจุดสิ้นสุดการขัดจังหวะคู่หนึ่งหรือไม่
ค่า
จริงเท็จ
คำอธิบาย
จะมีการเพิ่มคู่ปลายทาง IN/OUT และให้แอปพลิเคชันแบบฝังใช้งานได้ จะไม่มีการเพิ่มจุดสิ้นสุดการขัดจังหวะ จะมีเพียงคู่ปลายทาง Bulk IN/OUT เท่านั้นที่สามารถใช้งานได้
ช่วงเวลา
หากคุณตั้งค่า intr_en เป็น true คุณสามารถระบุช่วงเวลาการโพลจุดสิ้นสุดการขัดจังหวะได้ (เป็นมิลลิวินาที) หากคุณตั้งค่า intr_en เป็น false คุณสามารถตั้งค่า interval เป็น 0 ได้ เนื่องจากคลาสจะไม่สนใจ
การเรียกกลับของ p_vendor
p_vendor_callbacks คือตัวชี้ไปยังตัวแปรโครงสร้างฟังก์ชันคอลแบ็ก ซึ่งคุณสามารถระบุเพื่อจัดการคำขอควบคุมเฉพาะคลาสได้ หากคุณไม่ได้ใช้คำขอเฉพาะคลาสใดๆ หรือต้องการเปิด/ปิดการแจ้งเตือน คุณสามารถตั้งค่านี้เป็น NULL ได้
อดีตampไฟล์ด้านล่างนี้แสดงลายเซ็นที่คาดหวังของตัวจัดการคำขอเฉพาะคลาสของคุณ
Example – ลายเซ็นของฟังก์ชันการร้องขอเฉพาะคลาส
ถือเป็นโมฆะ 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 Silicon Laboratories สงวนลิขสิทธิ์
53/174
เกินview
(2) ตัวชี้ไปยังคำขอการตั้งค่าที่ได้รับจากโฮสต์
คู่มือการเขียนโปรแกรมคลาสผู้จำหน่ายอุปกรณ์ USB
ส่วนนี้จะอธิบายวิธีการใช้คลาส Vendor การเริ่มต้นคลาส USB Device Vendor การเพิ่มอินสแตนซ์ของคลาส USB Device Vendor ให้กับอุปกรณ์ของคุณ การสื่อสารโดยใช้คลาส USB Device Vendor
การเริ่มต้นคลาสผู้จำหน่ายอุปกรณ์ USB
หากต้องการเพิ่มฟังก์ชัน Vendor Class ให้กับอุปกรณ์ของคุณ ขั้นแรกให้เริ่มต้นคลาสโดยเรียกใช้ฟังก์ชัน USBD_Vendor_Init() ตัวอย่างampด้านล่างนี้แสดงวิธีการเรียก sl_usbd_vendor_init()
Example – การเรียก sl_usbd_vendor_init()
สถานะ sl_status_t;
สถานะ = sl_usbd_vendor_init(); ถ้าสถานะ ! SL_STATUS_OK { /* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */ }
การเพิ่มอินสแตนซ์คลาสผู้จำหน่ายอุปกรณ์ USB ให้กับอุปกรณ์ของคุณ
หากต้องการเพิ่มฟังก์ชันคลาสผู้ขายให้กับอุปกรณ์ของคุณ คุณต้องสร้างอินสแตนซ์ก่อน จากนั้นจึงเพิ่มลงในการกำหนดค่าของอุปกรณ์
การสร้างอินสแตนซ์คลาสผู้ขาย การเพิ่มอินสแตนซ์คลาสผู้ขายลงในการกำหนดค่าอุปกรณ์ของคุณ
การสร้างอินสแตนซ์คลาสผู้ขาย
สร้างอินสแตนซ์คลาส Vendor โดยเรียกใช้ฟังก์ชัน sl_usbd_vendor_create_instance() ตัวอย่างampไฟล์ด้านล่างนี้แสดงวิธีการเรียกใช้ sl_usbd_vendor_create_instance() โดยใช้อาร์กิวเมนต์เริ่มต้น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์การกำหนดค่าที่จะส่งไปยัง sl_usbd_vendor_create_instance() โปรดดู การกำหนดค่าอินสแตนซ์คลาสผู้จำหน่ายอุปกรณ์ USB
Example – การเรียก sl_usbd_vendor_create_instance()
uint8_t class_nbr; sl_status_t สถานะ;
สถานะ = sl_usbd_vendor_create_instance(เท็จ,
(1)
0u,
(2)
ฟังก์ชันการเรียกกลับของ app_usbd_vendor (3)
&class_nbr);
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
(1) ไม่มีจุดสิ้นสุดการขัดจังหวะกับอินสแตนซ์คลาสนี้ (2) ช่วงเวลาจะถูกละเว้นเนื่องจากจุดสิ้นสุดการขัดจังหวะถูกปิดใช้งาน
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
54/174
เกินview
(3) ฟังก์ชัน Callback ซึ่งเป็นส่วนหนึ่งของแอปพลิเคชันของคุณที่จัดการคำขอคลาสเฉพาะของผู้ขาย ดูข้อมูลเพิ่มเติมได้ที่ การสื่อสารโดยใช้คลาส Vendor ของอุปกรณ์ USB การเพิ่มอินสแตนซ์คลาส Vendor ลงในการกำหนดค่าอุปกรณ์ของคุณ หลังจากที่คุณสร้างอินสแตนซ์คลาส Vendor แล้ว คุณสามารถเพิ่มอินสแตนซ์ดังกล่าวลงในการกำหนดค่าได้โดยการเรียกใช้ฟังก์ชัน 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(class_nbr,
(1)
config_nbr_fs);
(2)
ถ้าสถานะ ! SL_STATUS_OK {
/* เกิดข้อผิดพลาด ควรเพิ่มการจัดการข้อผิดพลาดที่นี่ */
}
(1) หมายเลขคลาสที่จะเพิ่มลงในการกำหนดค่าที่ส่งคืนโดย sl_usbd_vendor_create_instance() (2) หมายเลขการกำหนดค่า (ในที่นี้คือการเพิ่มลงในการกำหนดค่าแบบ Full-Speed)
การสื่อสารโดยใช้คลาสผู้จำหน่ายอุปกรณ์ USB
การสื่อสารแบบซิงโครนัสทั่วไป การสื่อสารแบบอะซิงโครนัส คำขอ Vendor ทั่วไป คลาส Vendor มีฟังก์ชันต่อไปนี้สำหรับการสื่อสารกับโฮสต์ สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับพารามิเตอร์ของฟังก์ชัน โปรดดูที่ USB Device Vendor API
ตาราง – สรุป API การสื่อสารของผู้ขาย
ชื่อฟังก์ชั่น
sl_usb d _v e nd o r_ re ad _b ulk_sy nc() sl_usb d _v e nd o r_read _b ulk_asy nc() sl_usb d _v e nd o r_read _inte rrup t_sy nc() sl_usb d _v e nd o r_read _inte rrup t_sy nc() sl_usb d _v e nd o r_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 Silicon Laboratories สงวนลิขสิทธิ์
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
__จัดแนว(4) uint8_t rx_buf[2];
__จัดแนว(4) uint8_t tx_buf[2];
ยูอินต์32_ต
xfer_len;
สถานะ sl_t
สถานะ;
status = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(void *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ จัดการข้อผิดพลาด */
}
status = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(void *)&tx_buf[0],
(4)
2u,
0u,
(3)
false,
(5)
&xfer_len);
ถ้าสถานะ ! 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 Silicon Laboratories สงวนลิขสิทธิ์
56/174
เกินview
void app_usbd_vendor_comm (uint8_t class_nbr)
{
__จัดแนว(4) uint8_t rx_buf[2];
__จัดแนว(4) uint8_t tx_buf[2];
สถานะ sl_t
สถานะ;
status = sl_usbd_vendor_read_bulk_async(class_nbr,
(void *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ จัดการข้อผิดพลาด */
}
status = sl_usbd_vendor_write_bulk_async(class_nbr,
(void *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_completed,
โมฆะ
(4)
false);
(6)
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ จัดการข้อผิดพลาด */
}
}
(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)
{
ถ้าสถานะ ! SL_STATUS_OK {
/* $$$$ Do some processing. */
} อื่น {
/* $$$$ จัดการข้อผิดพลาด */
}
}
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)
{
ถ้าสถานะ ! 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 Silicon Laboratories สงวนลิขสิทธิ์
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 Silicon Laboratories สงวนลิขสิทธิ์
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
50ยู
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;
(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],
'เอ'
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;
ค่าเริ่มต้น:
(6)
// Request is not supported.
ลิขสิทธิ์ © 2025 Silicon Laboratories สงวนลิขสิทธิ์
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 stagอีปัจจุบัน
*/
} 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 Silicon Laboratories สงวนลิขสิทธิ์
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 Silicon Laboratories สงวนลิขสิทธิ์
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 Silicon Laboratories สงวนลิขสิทธิ์
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_t
สถานะ sl_t
สถานะ sl_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 Silicon Laboratories สงวนลิขสิทธิ์
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 Silicon Laboratories สงวนลิขสิทธิ์
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.
พารามิเตอร์
พิมพ์
ยูอินต์16_ต
ยูอินต์16_ต
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 Silicon Laboratories สงวนลิขสิทธิ์
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 [พีดีเอฟ] คู่มือการใช้งาน USB Device Stack, Device Stack, Stack |