USB 장치 스택
명세서
- USB 버전 : 1.5.1
- 출시일: 21년 2025월 XNUMX일
- Simplicity SDK 버전: 2025.6.1
제품 끝view
Silicon Labs의 USB 장치 스택은 다재다능하고
IoT 프로젝트를 위한 사용하기 쉬운 USB 연결로 용이함
네트워크 보조 프로세서와 호스트 간의 통신.
특징
- 효율적인 USB 장치 스택
- IoT 프로젝트에 이상적입니다
- 네트워크 공동 프로세서 간 통신 지원
호스트
제품 사용 지침
USB 장치 구성
프로젝트에 따라 USB 장치 설정을 구성하세요
USB 장치 구성 섹션을 참조하여 요구 사항을 확인하세요.
설명서에서.
USB 장치 프로그래밍 가이드
USB 장치 프로그래밍 가이드를 따라 방법을 이해하세요.
다양한 USB 장치를 프로그래밍하고 상호 작용합니다.
응용 프로그램.
USB 장치 클래스
USB 장치 클래스 섹션은 다음을 제공합니다.view 다른
CDC ACM, HID, MSC SCSI 및 공급업체 클래스와 같은 클래스를 선택합니다.
기기 기능에 따라 적절한 클래스를 선택하세요.
USB 장치 문제 해결
USB 장치에 문제가 발생하면 다음을 참조하세요.
솔루션 및 디버깅을 위한 USB 장치 문제 해결 섹션
팁.
Microsoft Windows OS USB 호스트
Microsoft Windows OS USB 장치를 사용하는 경우
호스트는 제공된 지침을 반드시 준수해야 합니다.
원활한 통합을 위한 문서화.
자주 묻는 질문
Q: 일반적인 예는 무엇입니까?amp내가 만들 수 있는 장치의 수는 적습니다.
이 USB 스택?
A: USB 스택을 사용하면 다음과 같은 장치를 빌드할 수 있습니다.
USB-직렬 어댑터, 마우스 또는 키보드, 이동식 저장 장치
장치 및 사용자 정의 장치.
질문: 이것을 사용하기 위한 특정 소프트웨어 요구 사항이 있습니까?
USB 장치 스택?
A: 호환 소프트웨어에는 Simplicity SDK, Simplicity가 포함됩니다.
Studio, Simplicity Commander, GCC(GNU 컴파일러 컬렉션),
ARM용 IAR Embedded Workbench와 IAR EWARM.
범용 직렬 버스 USB
범용 직렬 버스 USB
USB 오버view 위에view
릴리스 노트 USB
사양 및 기능view
USB 장치 구성 완료view
USB 장치 프로그래밍 가이드view
USB 장치 클래스view CDC ACM 수업 종료view HID 클래스 오버view MSC SCSI 클래스 오버view 공급업체 클래스 종료view
USB API API 문서 USB 장치 API USB 장치 ACM API a sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t USB 장치 CDC API a sl_usbd_cdc_subcl ss_driver_t USB 장치 코어 API
sl_usbd_장치_구성_t sl_usbd_설정_요구_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_콜백_t
저작권 © 2025 Silicon Laboratories. 판권 소유.
1/174
범용 직렬 버스 USB
sl_usbd_msc_scsi_lun_ pi
sl_usbd_msc_scsi_lun_info sl_usbd_msc_scsi_lun
USB 장치 공급업체 API sl_usbd_vendor_callbacks_t
API 문서 USB 장치 문제 해결
위에view Microsoft Windows OS USB 호스트
위에view
저작권 © 2025 Silicon Laboratories. 판권 소유.
2/174
위에view
위에view
USB 장치
USB는 컴퓨터 시스템 역사상 가장 성공적인 통신 인터페이스 중 하나이며, 컴퓨터 주변 장치 연결의 사실상 표준입니다. Silicon Labs USB Device Stack은 임베디드 시스템용으로 특별히 설계된 USB 장치 모듈입니다. Silicon Labs의 품질, 확장성 및 신뢰성을 기반으로 처음부터 개발되었으며, USB 2.0 사양을 준수하기 위해 엄격한 검증 절차를 거쳤습니다. 이 문서에서는 Silicon Labs USB Device Stack을 초기화, 시작 및 사용하는 방법을 설명합니다. 다양한 설정 값과 그 용도를 설명합니다. 또한,view 기술, 구성 가능성 유형, 구현 절차 및 예amp사용 가능한 모든 클래스에 대한 일반적인 사용법입니다.
USB 개념을 빠르게 이해할 수 있도록 설명서에는 다음과 같은 많은 예가 포함되어 있습니다.amp기본 기능을 갖춘 USB입니다. 이러한 예는 다음과 같습니다.amples는 장치를 빠르게 구축할 수 있는 프레임워크를 제공합니다. 이러한 예는 다음과 같습니다.amples에는 다음이 포함됩니다.
USB-직렬 어댑터(통신 장치 클래스) 마우스 또는 키보드(인간 인터페이스 장치 클래스) 이동식 저장 장치(대용량 저장 장치 클래스) 사용자 지정 장치(공급업체 클래스)
다음은 끝입니다view 문서 섹션 중:
사양 및 기능 USB 장치 구성 USB 장치 프로그래밍 가이드 USB 장치 클래스
CDC ACM 클래스 HID 클래스 MSC SCSI 클래스 공급업체 클래스 USB 장치 문제 해결 Microsoft Windows OS USB 호스트
저작권 © 2025 Silicon Laboratories. 판권 소유.
3/174
USB
USB
USB 버전 1.5.1 2025년 7월 21일 – 릴리스 노트
심플리시티 SDK 버전 2025.6.1
실리콘랩스의 효율적인 USB 디바이스 스택은 네트워크 코프로세서와 호스트 간 통신을 포함한 IoT 프로젝트에 이상적인 다재다능하고 사용하기 쉬운 USB 연결을 제공합니다. 이전 릴리스는 여기를 클릭하세요.
릴리스 요약
주요 기능 | API 변경 | 버그 수정 | 칩 활성화
주요 특징
기본 플랫폼만 변경됩니다.
API 변경
없음.
버그 수정
없음.
칩 활성화
없음.
주요 특징
새로운 기능 | 향상된 기능 | 제거된 기능 | 사용되지 않는 기능
새로운 기능
없음.
향상점
기본 플랫폼만 변경됩니다.
제거된 기능
없음.
더 이상 사용되지 않는 기능
없음.
API 변경
새로운 API | 수정된 API | 제거된 API | 사용되지 않는 API
새로운 API
저작권 © 2025 Silicon Laboratories. 판권 소유.
4/174
USB
없음.
수정된 API
없음.
제거된 API
없음.
더 이상 사용되지 않는 API
없음.
버그 수정
없음.
칩 활성화
없음.
응용 프로그램 예ample 변경 사항
새로운 전amples | 수정된 Examples | 제거됨 Examples | 더 이상 사용되지 않는 Examp레
새로운 전amp레
없음.
수정된 Examp레
없음.
Ex 제거됨amp레
없음.
더 이상 사용되지 않는 Examp레
없음.
릴리스 변경의 영향
영향 평가서 | 마이그레이션 가이드
영향 진술
없음.
마이그레이션 가이드
없음.
알려진 문제 및 제한 사항
없음.
이 릴리스 사용
저작권 © 2025 Silicon Laboratories. 판권 소유.
5/174
USB
이번 릴리스에는 무엇이 포함되어 있나요? | 호환 소프트웨어 | 설치 및 사용 | 도움말 및 피드백
보도자료에는 무엇이 들어있나요?
USB 장치 스택 응용 프로그램 Examp레
호환 소프트웨어
소프트웨어
Simplicity SDK Simplicity Studio Simplicity Commander GCC (GNU 컴파일러 컬렉션) ARM용 IAR Embedded Workbench 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"을 준수합니다. "인터페이스 연결 설명자 엔지니어링 변경 공지(ECN)" 전송 유형을 구현합니다.
제어 대량 인터럽트 USB 클래스 통신 장치 클래스(CDC) 추상 제어 모델(ACM) 인간 인터페이스 장치(HID) 대용량 저장 장치 클래스(MSC) 공급업체별 클래스 프레임워크
특징
메모리 사용량을 최소화하기 위해 필요한 기능만 포함하도록 확장 가능 전체 속도(12Mbit/s) 지원 복합(다기능) 장치 지원 다중 구성 장치 지원 USB 절전 기능(장치 일시 중지 및 재개) 지원 Micrium OS에 대용량 저장 클래스 완전 통합 File 다양한 OS에서 작동할 수 있도록 CMSIS-RTOS2 추상화 계층으로 개발된 시스템 모듈입니다. Silicon Labs GSDK에는 FreeRTOS 및 Micrium OS 포트가 포함되어 있습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
7/174
위에view
위에view
USB 장치 구성
이 섹션에서는 Silicon Labs USB 장치를 구성하는 방법을 설명합니다. 구성 매개변수는 다음과 같이 세 그룹으로 나뉩니다.
USB 장치 핵심 구성 USB 장치 정보 구성 USB 장치 하드웨어 구성
USB 장치 코어 구성
Silicon Labs USB 장치는 sl_usbd_core_config.h에 있는 #define 세트를 통해 컴파일 시간에 구성될 수 있습니다. fileUSB 장치는 가능한 경우 #define을 사용합니다. 이는 컴파일 시점에 활성화된 기능에 따라 코드와 데이터 크기를 조정할 수 있기 때문입니다. 이를 통해 Silicon Labs USB 장치의 읽기 전용 메모리(ROM) 및 랜덤 액세스 메모리(RAM) 사용량을 애플리케이션 요구 사항에 맞게 조정할 수 있습니다.
권장 사항: 기본값(굵게 강조 표시)으로 구성 프로세스를 시작합니다.
아래 섹션은 템플릿 구성의 순서를 기준으로 구성됩니다. file, sl_usbd_core_config.h.
핵심 구성 클래스 구성
핵심 구성
표 – USB 장치 코어 구성 상수
상수 설명
기본값
SL_USBD_TA SK_스택_ 크기
USBD 코어 작업의 스택 크기를 바이트 단위로 구성합니다.
4096
SL_USBD_TA SK_우선순위
USBD 코어 작업의 우선순위를 설정합니다. 이는 CMSIS-RTOS2 우선순위입니다.
osPriorityHigh
SL_USBD_AUTO_START_USB_장치
활성화된 경우, 커널이 시작되고 해당 USBD 코어 작업이 처음으로 예약되면 USB 장치가 자동으로 시작됩니다. 비활성화된 경우, USB 호스트에서 감지될 준비가 되면 애플리케이션에서 sl_usbd_core_start_device()를 호출해야 합니다.
SL_USBD_C sl_usbd_add_configuration()을 통해 추가될 구성의 총 수
1
ONFIGURATI 기능.
ON_QUANTI
TY
저작권 © 2025 Silicon Laboratories. 판권 소유.
8/174
위에view
끊임없는
SL_USBD_인터페이스_수량
SL_USBD _ALT_INT ERFACE_ 수량
TY
SL_USBD_인터페이스_GR
오우피큐
앤티
SL_USBD_설명
PTOR_Q
유니티
SL_USBD _문자열 _수량
TY
SL_USBD _OPEN_ENDPOIN TS_QUA NTITY
설명 모든 구성에 추가할 USB 인터페이스의 총 개수입니다. 이는 사용하는 클래스에 따라 크게 달라집니다. 클래스 인스턴스에 필요한 인터페이스 수에 대한 자세한 내용은 클래스의 "코어 리소스 요구 사항" 섹션을 참조하십시오.
모든 구성에 추가할 USB 대체 인터페이스의 총 개수입니다. 이 값은 사용하는 클래스에 따라 크게 달라집니다. 이 값은 항상 SL_USBD_INTERFACE_QUANTITY보다 크거나 같아야 합니다. 클래스 인스턴스에 필요한 대체 인터페이스 수에 대한 자세한 내용은 클래스의 "코어 리소스 요구 사항" 섹션을 참조하십시오.
모든 구성에 추가될 USB 인터페이스 그룹의 총 개수입니다. 이는 사용하는 클래스에 따라 크게 달라집니다. 클래스 인스턴스가 필요한 인터페이스 그룹 수에 대한 자세한 내용은 클래스의 "코어 리소스 요구 사항" 섹션을 참조하십시오.
모든 구성에 추가될 엔드포인트 설명자의 총 개수입니다. 이는 사용되는 클래스에 따라 크게 달라집니다. 클래스 인스턴스에 필요한 엔드포인트 설명자 수에 대한 자세한 내용은 클래스의 "코어 리소스 요구 사항" 섹션에서 "엔드포인트 수"를 참조하십시오. 제어 엔드포인트는 여기서 고려할 필요가 없습니다. USB 문자열의 총 개수입니다. 수량을 0으로 설정하면 기능이 비활성화됩니다. 비활성화하면 장치가 애플리케이션에서 전달된 USB 설명 문자열을 저장하지 않습니다. 즉, 호스트가 설명 문자열(예: 제조업체 및 제품 이름)을 검색할 수 없습니다. 구성당 열린 엔드포인트의 총 개수입니다. 장치는 제어 전송을 위해 최소 두 개의 열린 엔드포인트가 필요하지만, 사용되는 클래스의 엔드포인트도 추가해야 합니다. 클래스 인스턴스에 필요한 열린 엔드포인트 수에 대한 자세한 내용은 클래스의 "코어 리소스 요구 사항" 섹션에서 "엔드포인트 수"를 참조하십시오.
기본값
10 10
2
20 30 20
클래스 구성
클래스에는 특정 컴파일 시점 구성이 있습니다. 자세한 내용은 USB 장치 클래스를 참조하세요.
USB 장치 정보 구성
sl_usbd_device_config.h 구성 file 공급업체/제품 ID, 장치 문자열 등과 같은 장치에 대한 기본 정보를 설정하기 위해 컴파일 타임 #define-s를 다시 그룹화합니다. 아래 표는 이 구성에서 사용 가능한 각 정보 구성 정의를 설명합니다. file.
표 - USB 장치 정보 구성 정의
끊임없는
SL_USBD_DEVIC E_공급업체_ID
SL_USBD_DEVIC E_PRODUCT_ID
설명 USB 구현 포럼에서 제공하는 공급업체 식별 번호입니다. 공급업체 ID를 얻는 방법에 대한 자세한 내용은 http://www.usb.org/developers/vendor/를 참조하세요. 제품 식별 번호입니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
9/174
위에view
끊임없는
설명
SL_USBD_DEVICE_RELEASE 장치의 릴리스 번호입니다. _NUMBER
SL_USBD_DEVICE_MANUFA 장치 제조업체를 설명하는 문자열입니다. 이 구성은 다음 경우 무시됩니다.
CTURER_STRING
구성 SL_USBD_STRING_QUANTITY가 0으로 설정되었습니다.
SL_USBD_DEVICE_PRODUC 제품을 설명하는 문자열입니다. 이 구성은 구성이
T_문자열
SL_USBD_STRING_QUANTITY가 0으로 설정되었습니다.
SL_USBD_DEVICE_SERIAL_N 장치의 일련 번호가 포함된 문자열입니다. 이 구성은 다음 경우 무시됩니다.
UMBER_STRING
구성 SL_USBD_STRING_QUANTITY가 0으로 설정되었습니다.
SL_USBD_DEVICE_LANGUA 장치 문자열의 언어 식별 번호입니다. 가능한 값은 다음과 같습니다.
GE_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_LANG_ID_산스크리트
SL_USBD_STRING_QUANTITY 구성이 0으로 설정된 경우 이 구성은 무시됩니다.
USB 장치 하드웨어 구성
사용 중인 Silicon Labs 장치에 따라 USB VBUS Sense 신호에 맞게 설정할 수 있는 GPIO 핀과 포트가 있을 수 있습니다. 설정 정의는 sl_usbd_hardware_config.h 헤더에 있습니다. file.
끊임없는
SL_USBD_드라이버_VBUS_감지_포트 SL_USBD_드라이버_VBUS_감지_핀
설명
보드의 USB VBUS Sense 신호를 위한 GPIO 포트입니다. 보드의 USB VBUS Sense 신호를 위한 GPIO 핀입니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
10/174
위에view
위에view
USB 장치 프로그래밍 가이드
이 섹션에서는 USB 장치 모듈을 사용하는 방법을 설명합니다.
USB 장치 모듈의 초기 설정
이 섹션에서는 USB 장치 모듈을 초기화하고 장치를 추가, 준비 및 시작하는 데 필요한 기본 단계를 설명합니다. USB 장치 모듈 초기화, USB 장치 코어 초기화, ACL 초기화, USB 장치 추가, USB 장치 빌드, 구성 추가, USB 기능 추가, USB 장치 시작
이벤트 후크 함수
USB 장치 모듈 초기화
USB 장치 코어 초기화
a US a sl_usbd_core_init() 함수를 호출하여 B 장치 모듈 코어를 초기화합니다. 아래 예제에서는 sl_usbd_core_init() 함수를 호출하는 방법을 보여줍니다.
Example – sl_usbd_core_init() 호출
sl_status_t status; status = sl_usbd_core_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
클래스 초기화
USB 장치 모듈 코어가 초기화된 후에는 사용할 각 클래스를 초기화해야 합니다. 자세한 내용은 ACL의 "프로그래밍 가이드" 섹션을 참조하십시오.
USB 장치 구축
구성 추가
장치를 성공적으로 초기화한 후, 새 구성부터 시작하여 USB 기능을 추가할 수 있습니다. 장치에는 최소 하나의 구성이 있어야 합니다. 구성을 추가하려면 sl_usbd_core_dd_configurtion() 함수를 호출하세요. 이 함수는 추가하려는 각 구성에 대해 호출해야 합니다. examp아래는 Full-speed를 추가하는 방법을 보여줍니다.
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_장치_속도_전체,
/* 풀 스피드 구성.
*/
“구성 추가 Example Full-Speed 구성”,
&config_nbr_fs);
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
USB 기능 추가
장치에 하나 이상의 구성을 성공적으로 추가한 후에는 장치에 인터페이스와 엔드포인트를 추가할 수 있습니다. 각 USB 클래스는 인터페이스 및 엔드포인트 유형, 수량 및 기타 매개변수 측면에서 고유한 요구 사항을 가지고 있습니다. Silicon Labs USB Device는 제공하는 클래스에 인터페이스와 엔드포인트를 추가합니다.
애플리케이션에서 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 구성에 클래스 인스턴스를 추가합니다. */ status = 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 호스트에 표시되는 시점을 제어하려면 SL_USBD_AUTO_START_USB_DEVICE 구성 정의를 사용하여 자동 시작 기능을 비활성화하십시오. 비활성화된 경우, 장치를 빌드/준비한 후 sl_usbd_core_start_device() 함수를 호출하여 장치를 시작하고 USB 호스트에 표시되도록 할 수 있습니다.
전직amp아래는 sl_usbd_core_start_device() 함수를 사용하여 장치를 시작하는 방법을 보여줍니다.
Example – 장치 시작
저작권 © 2025 Silicon Laboratories. 판권 소유.
12/174
위에view
sl_status_t 상태;
status = sl_usbd_core_start_device(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */ }
이벤트 후크 함수
USB 장치 코어 모듈은 애플리케이션에서 다시 정의할 수 있는 두 가지 약한 후크 함수를 제공합니다. 이 함수들의 목적은 버스 및 구성 이벤트 발생 시 알림을 제공하는 것입니다.
표 – USB 이벤트 후크 기능
이벤트
설명
버스
USB 버스 이벤트가 발생하면 호출됩니다.
USB 구성 이벤트가 발생할 때 호출되는 구성
함수 서명
void sl_usbd_on_bus_event(sl_usbd_bus_event_t 이벤트); void sl_usbd_on_config_event(sl_usbd_config_event_t 이벤트, uint8_t config_nbr);
Example – 이벤트 후크 함수
void sl_usbd_on_bus_event(sl_usbd_bus_event_t 이벤트) { switch (이벤트) { case SL_USBD_EVENT_BUS_CONNECT:
// 호스트 컨트롤러에 USB 케이블이 삽입되면 호출됩니다.
case SL_USBD_EVENT_BUS_DISCONNECT: // 호스트 컨트롤러에서 USB 케이블이 제거되면 호출됩니다.
case SL_USBD_EVENT_BUS_RESET: // 호스트가 재설정 명령을 보낼 때 호출됨 break;
case SL_USBD_EVENT_BUS_SUSPEND: // 호스트가 일시 중단 명령을 보낼 때 호출됨 break;
case SL_USBD_EVENT_BUS_RESUME: // 호스트가 웨이크업 명령을 보낼 때 호출됨 break;
기본값: break; } }
void sl_usbd_on_config_event(sl_usbd_config_event_t 이벤트, uint8_t config_nbr) { switch (이벤트) { case SL_USBD_EVENT_CONFIG_SET:
// 호스트가 구성 중단을 설정할 때 호출됩니다.
case SL_USBD_EVENT_CONFIG_UNSET: // 구성이 설정 해제될 때 호출됨 break;
기본값: break; } }
저작권 © 2025 Silicon Laboratories. 판권 소유.
13/174
위에view
저작권 © 2025 Silicon Laboratories. 판권 소유.
14/174
위에view
위에view
USB 장치 클래스
Silicon Labs USB Device에서 사용 가능한 USB 클래스는 몇 가지 공통적인 특징을 공유합니다. 이 섹션에서는 이러한 특징과 코어 계층과의 상호 작용을 설명합니다.
특정 클래스에 대한 자세한 내용은 다음을 참조하세요.
CDC ACM 클래스 HID 클래스 MSC SCSI 클래스 공급업체 클래스
클래스 인스턴스에 대하여
USB 장치에서 사용 가능한 USB 클래스는 클래스 인스턴스 개념을 구현합니다. 클래스 인스턴스는 장치 내의 하나의 함수를 나타냅니다. 이 함수는 하나의 인터페이스 또는 인터페이스 그룹으로 설명될 수 있으며, 특정 클래스에 속합니다.
각 USB 클래스 구현은 클래스 인스턴스 개념에 따라 몇 가지 공통적인 구성과 함수를 갖습니다. 공통적인 구성과 함수는 아래 표에 제시되어 있습니다. '상수 또는 함수' 열 제목에서 자리 표시자 XXXX는 클래스 이름(CDC, HID, MSC, CDC_ACM 또는 VENDOR(함수 이름의 경우 공급업체))으로 대체할 수 있습니다.
표 - 다중 클래스 인스턴스 개념과 관련된 상수 및 함수
상수 또는 함수
SL_USBD_XXXX_CL ASS_INSTANCE_QUANTITY
SL_USBD_XXXX_구성_수량
sl_usb d _XXXX_create_instance()
sl_usbd_XXXX_add_to_config()
설명
클래스 인스턴스의 최대 수를 구성합니다.
최대 구성 개수를 설정합니다. 클래스 초기화 중에 생성된 클래스 인스턴스가 하나 이상의 구성에 추가됩니다. 새 클래스 인스턴스를 생성합니다.
지정된 장치 구성에 기존 클래스 인스턴스를 추가합니다.
코드 구현 측면에서, 클래스는 클래스 제어 구조를 포함하는 지역 전역 변수를 선언합니다. 이 클래스 제어 구조는 하나의 클래스 인스턴스와 연관되며, 클래스 인스턴스를 관리하는 데 필요한 특정 정보를 포함합니다.
다음 그림은 여러 가지 사례 시나리오를 보여줍니다. 각 그림에는 코드 예가 포함되어 있습니다.amp해당 사례 시나리오에 해당하는 le.
그림 - 다중 클래스 인스턴스 - FS 장치(구성 1개, 인터페이스 1개)는 일반적인 USB 장치를 나타냅니다. 이 장치는 풀 스피드(FS)이며 단일 구성을 포함합니다. 장치의 기능은 데이터 통신을 위한 한 쌍의 엔드포인트로 구성된 하나의 인터페이스로 설명됩니다. 하나의 클래스 인스턴스가 생성되어 연결된 엔드포인트를 통해 전체 인터페이스를 관리할 수 있습니다.
그림 – 다중 클래스 인스턴스 – 1개 인터페이스가 있는 FS 장치 1 구성
저작권 © 2025 Silicon Laboratories. 판권 소유.
15/174
위에view
그림 - 다중 클래스 인스턴스 - FS 장치(1개 인터페이스가 있는 1개 구성)에 해당하는 코드는 다음과 같습니다.amp아래에 있습니다.
Example – 다중 클래스 인스턴스 – 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_콜백_t 클래스_콜백 = {
(1)
.활성화 = app_usbd_XXXX_활성화,
.disable = app_usbd_XXXX_disable
};
상태 = sl_usbd_XXXX_init();
(2)
if (상태 ! SL_STATUS_OK) {
/* $$$$ 오류를 처리합니다. */
}
상태 = sl_usbd_XXXX_create_instance(&class_callbacks,
(3)
&class_0);
if (상태 ! SL_STATUS_OK) {
/* $$$$ 오류를 처리합니다. */
}
상태 = sl_usbd_XXXX_add_to_configuration(class_0, config_0);
(4)
if (상태 ! 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) 클래스 인스턴스인 class_0을 지정된 구성 번호인 config_0에 추가합니다. sl_usbd_XXXX_add_to_configuration()은 인터페이스 0과 연관된 IN 및 OUT 엔드포인트를 만듭니다. 결과적으로 클래스 인스턴스는 인터페이스 0과 해당 엔드포인트를 포함합니다. 인터페이스 0에서 수행되는 모든 통신은 클래스 인스턴스 번호인 class_0을 사용합니다. 그림 - 여러 클래스 인스턴스 - FS 장치(2개의 구성 및 여러 인터페이스)는 더 복잡한 예를 나타냅니다.amp풀 스피드 장치는 두 가지 구성으로 구성됩니다. 이 장치는 동일한 클래스에 속하는 두 가지 기능을 갖지만, 각 기능은 두 개의 인터페이스로 설명되고 한 쌍의 양방향 엔드포인트를 갖습니다. 이 예제에서는amp두 개의 클래스 인스턴스가 생성됩니다. 각 클래스 인스턴스는 인터페이스 그룹과 연결됩니다. 반면, 그림 - 다중 클래스 인스턴스 - FS 장치(구성 1개, 인터페이스 1개) 및 그림 - 다중 클래스 인스턴스 - FS 장치(구성 2개, 인터페이스 2개)에서는 클래스 인스턴스가 단일 인터페이스와 연결되었습니다.
그림 – 다중 클래스 인스턴스 – FS 장치 2 구성 및 다중 인터페이스)
그림 - 다중 클래스 인스턴스 - FS 장치(2개 구성 및 다중 인터페이스)에 해당하는 코드는 다음과 같습니다.amp아래에 있습니다. 명확성을 위해 오류 처리는 생략되었습니다.
Example – 다중 클래스 인스턴스 – FS 장치 2 구성 및 다중 인터페이스)
저작권 © 2025 Silicon Laboratories. 판권 소유.
17/174
위에view
sl_status_t 상태; uint8_t 클래스_0; uint8_t 클래스_1;
상태 = sl_usbd_XXXX_init();
상태 = sl_usbd_XXXX_인스턴스 생성(&class_0); 상태 = sl_usbd_XXXX_인스턴스 생성(&class_1);
상태 = sl_usbd_XXXX_구성에_추가(클래스_0, cfg_0); 상태 = sl_usbd_XXXX_구성에_추가(클래스_1, cfg_0);
상태 = sl_usbd_XXXX_구성에_추가(클래스_0, cfg_1); 상태 = sl_usbd_XXXX_구성에_추가(클래스_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) 다른 구성인 cfg_1에 동일한 클래스 인스턴스인 class_0 및 class_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 USB 장치 CDC ACM 클래스 리소스 요구 사항(핵심 USB 장치 CDC ACM 하위 클래스)view USB 장치 CDC ACM 클래스 구성 USB 장치 CDC ACM 클래스 프로그래밍 가이드
이 섹션에서는 Silicon Labs의 USB Device 스택에서 지원하는 통신 장치 클래스(CDC)와 관련 CDC 하위 클래스에 대해 설명합니다. Silicon Labs USB-Device는 현재 직렬 에뮬레이션에 일반적으로 사용되는 추상 제어 모델(ACM) 하위 클래스를 지원합니다.
CDC에는 다양한 통신 및 네트워킹 장치가 포함됩니다. 통신 장치에는 아날로그 모뎀, 아날로그 및 디지털 전화기, ISDN 터미널 어댑터 등이 포함됩니다. 예를 들어amp네트워킹 장치에는 ADSL 및 케이블 모뎀, 이더넷 어댑터, 허브가 포함됩니다. CDC는 USB 링크를 사용하여 V.250(전화망 모뎀용) 및 이더넷(근거리 통신망 장치용)과 같은 기존 통신 서비스 표준을 캡슐화하는 프레임워크를 정의합니다. 통신 장치는 장치 관리, 필요 시 통화 관리, 그리고 데이터 전송을 담당합니다.
CDC는 7개의 주요 장치 그룹을 정의합니다. 각 그룹은 여러 하위 클래스를 포함할 수 있는 통신 모델에 속합니다. 각 장치 그룹은 CDC 기본 클래스 외에도 자체 사양 문서를 갖습니다. 7개 그룹은 다음과 같습니다.
공중 전화 교환망(PSTN), 음성 대역 모뎀, 전화기, 직렬 에뮬레이션 장치를 포함한 장치. 단말 어댑터 및 전화기를 포함한 종합 서비스 디지털 네트워크(ISDN) 장치. IEEE 802 계열을 지원하는 장치(예: 케이블 및 ADSL 모뎀, WiFi 어댑터)를 포함한 이더넷 제어 모델(ECM) 장치. ADSL 모뎀 및 ATM 네트워크에 연결된 기타 장치(워크스테이션, 라우터, LAN 스위치)를 포함한 비동기 전송 모드(ATM) 장치. 음성 및 데이터 통신을 관리하는 다기능 통신 핸드셋 장치를 포함한 무선 이동 통신(WMC) 장치. 이더넷 프레임 데이터를 교환하는 이더넷 에뮬레이션 모델(EEM) 장치. 고속 네트워크 장치(고속 패킷 접속 모뎀, 회선 단말 장치)를 포함한 네트워크 제어 모델(NCM) 장치
CDC와 관련 하위 클래스 구현은 다음 사양을 준수합니다.
범용 직렬 버스, 통신 장치를 위한 클래스 정의, 개정판 1.2, 2010년 11월 3일. 범용 직렬 버스, 통신, PSTN 장치를 위한 하위 클래스, 개정판 1.2, 2007년 2월 9일.
USB 장치 CDC 기본 클래스view
CDC 장치는 통신 기능을 구현하기 위해 다음과 같은 인터페이스로 구성됩니다.
통신 클래스 인터페이스(CCI)는 장치 관리 및 선택적으로 통화 관리를 담당합니다.
장치 관리를 통해 장치의 일반적인 구성 및 제어와 호스트에 대한 이벤트 알림을 수행할 수 있습니다. 통화 관리는 통화 설정 및 종료를 지원합니다. 통화 관리는 DCI를 통해 다중화될 수 있습니다. CCI는 모든 CDC 장치에 필수입니다. CCI는 CDC 장치가 지원하는 통신 모델을 지정하여 CDC 기능을 식별합니다. CCI 다음에 오는 인터페이스는 오디오 또는 공급업체별 인터페이스와 같이 정의된 USB 클래스 인터페이스일 수 있습니다. 공급업체별 인터페이스는 DCI로 구체적으로 표현됩니다.
데이터 클래스 인터페이스(DCI)는 데이터 전송을 담당합니다. 전송 및/또는 수신되는 데이터는 특정 규칙을 따르지 않습니다.
형식입니다. 데이터는 통신 회선의 원시 데이터일 수도 있고, 독점 형식을 따르는 데이터일 수도 있습니다. CCI를 따르는 모든 DCI는 하위 인터페이스로 볼 수 있습니다.
CDC 장치는 최소 하나의 CCI와 0개 이상의 DCI를 가져야 합니다. 하나의 CCI와 모든 하위 DCI는 함께 호스트에 기능을 제공합니다. 이 기능을 함수라고도 합니다. CDC 복합 장치에는 여러 개의 CCI가 있을 수 있습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
19/174
위에view
따라서 이 장치는 그림 CDC 복합 장치와 같이 여러 세트의 CCI와 DCI로 구성됩니다.
그림 – CDC 복합 장치
CDC 장치는 다음과 같은 엔드포인트 조합을 사용할 가능성이 높습니다.
기본 엔드포인트라고 하는 제어 IN 및 OUT 엔드포인트 쌍. 선택 사항인 벌크 또는 인터럽트 IN 엔드포인트. 벌크 또는 등시성 IN 및 OUT 엔드포인트 쌍. Silicon Labs USB 장치 스택은 현재 등시성 엔드포인트를 지원하지 않습니다.
아래 표는 다양한 엔드포인트의 사용법과 CDC의 인터페이스를 보여줍니다.
표 – CDC 엔드포인트 사용
엔드포인트
컨트롤 인
컨트롤 아웃
인터럽트 또는 대량 IN 대량 또는 등시성 IN 대량 또는 등시성
밖으로
방향
장치-호스트
호스트-디바이스
장치-호스트
장치-호스트
호스트-디바이스
인터페이스 사용
한국상공회의소(CCI)
열거형, 클래스별 요청, 장치에 대한 표준 요청
관리팀에 문의하고, 선택적으로 관리팀에 전화하세요.
한국상공회의소(CCI)
열거형, 클래스별 요청, 장치에 대한 표준 요청
관리팀에 문의하고, 선택적으로 관리팀에 전화하세요.
한국상공회의소(CCI)
링 감지, 직렬 회선 상태, 네트워크 상태 등의 이벤트 알림입니다.
디시인사이드
원시 또는 포맷된 데이터 통신.
디시인사이드
원시 또는 포맷된 데이터 통신.
대부분의 통신 장치는 호스트에 이벤트를 알리기 위해 인터럽트 엔드포인트를 사용합니다. USB 프로토콜 오류 발생 시 데이터 재전송에 의존하는 독점 프로토콜의 경우, 동기식 엔드포인트는 데이터 전송에 사용해서는 안 됩니다. 동기식 통신은 재시도 메커니즘이 없으므로 본질적으로 데이터 손실이 발생할 수 있습니다.
7가지 주요 통신 모델은 여러 하위 클래스를 포함합니다. 하위 클래스는 장치가 CCI를 사용하여 장치 관리 및 통화 관리를 처리하는 방식을 설명합니다. 아래 표는 가능한 모든 하위 클래스와 각 하위 클래스가 속하는 통신 모델을 보여줍니다.
표 – CDC 하위 클래스
아강
직접 제어 모델 추상 제어 모델
커뮤니케이션 모델
공중전화
공중전화
Examp이 하위 클래스를 사용하는 장치의 le
USB 호스트에서 직접 제어되는 모뎀 장치
직렬 에뮬레이션 장치, 직렬 명령 세트를 통해 제어되는 모뎀 장치
저작권 © 2025 Silicon Laboratories. 판권 소유.
20/174
위에view
아강
커뮤니케이션 모델
Examp이 하위 클래스를 사용하는 장치의 le
전화 제어 모델
공중전화
다중 채널 제어 ISDN 모델
CAPI 제어 모델 ISDN
이더넷 네트워킹 ECM 제어 모델
ATM 네트워킹
ATM
제어 모델
무선 핸드셋 제어 모델
WMC
장치 관리 WMC
모바일 직통 모델
WMC
오벡스
WMC
이더넷 에뮬레이션 EEM 모델
네트워크 제어 모델
NCM
음성 전화 장치
기본 요금 단말기 어댑터, 기본 요금 단말기 어댑터, 전화기
기본 속도 단말 어댑터, 기본 속도 단말 어댑터, 전화 DOC-SIS 케이블 모뎀, PPPoE 에뮬레이션을 지원하는 ADSL 모뎀, Wi-Fi 어댑터(IEEE 802.11-family), IEEE 802.3 어댑터 ADSL 모뎀
무선 장치에 연결하는 모바일 단말 장비
무선 장치에 연결하는 모바일 단말 장비 무선 장치에 연결하는 모바일 단말 장비
무선 장치에 연결하는 모바일 단말 장비. 이더넷 프레임을 다음 전송 계층으로 사용하는 장치. 라우팅 및 인터넷 연결 장치에는 적합하지 않음. 네트워크에서 고속 데이터 대역폭을 전송하는 IEEE 802.3 어댑터
USB 장치 CDC ACM 클래스 리소스 요구 사항(코어)
sl_usbd_cdc_acm_add_to_configuration() 함수를 호출하여 USB 구성에 CDC ACM 클래스 인스턴스를 추가할 때마다 코어에서 다음 리소스가 할당됩니다.
의지
인터페이스 대체 인터페이스 엔드포인트 인터페이스 그룹
수량
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 기본 클래스는 USB 장치 CDC 기본 클래스에서 자세히 설명하는 통신 클래스 인터페이스(CCI)와 데이터 클래스 인터페이스(DCI)로 구성됩니다.view 이 섹션에서는 ACM 유형의 CCI에 대해 설명합니다. CCI는 관리 요소에 대한 기본 엔드포인트와 알림 요소에 대한 인터럽트 엔드포인트로 구성됩니다. 한 쌍의 벌크 엔드포인트는 DCI를 통해 지정되지 않은 데이터를 전송하는 데 사용됩니다.
ACM 하위 클래스는 두 가지 유형의 통신 장치에서 사용됩니다.
AT 명령을 지원하는 장치(예: 음성 대역 모뎀). 가상 COM 포트 장치라고도 하는 직렬 에뮬레이션 장치.
ACM 하위 클래스에는 여러 하위 클래스별 요청이 있습니다. 이러한 요청을 통해 장치를 제어하고 구성할 수 있습니다. 모든 ACM 요청의 전체 목록과 설명은 사양에서 확인할 수 있습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
21/174
위에view PSTN 장치용 하위 클래스, 개정판 1.2, 2007년 2월 9일, 섹션 6.2.2.
이 목록에서 Silicon Labs9 ACM 하위 클래스는 다음을 지원합니다.
표 – Silicon Labs에서 지원하는 ACM 요청
하위 클래스 요청 설명
SetCommFeature GetCommFeature ClearCommFeature
호스트는 특정 통신 기능의 설정을 제어하기 위해 이 요청을 보냅니다. 직렬 에뮬레이션에는 사용되지 않습니다.
호스트는 이 요청을 보내 특정 통신 기능의 현재 설정을 가져옵니다. 직렬 에뮬레이션에는 사용되지 않습니다.
호스트는 지정된 통신 기능의 설정을 지우기 위해 이 요청을 보냅니다. 직렬 에뮬레이션에는 사용되지 않습니다.
SetLineCoding
호스트는 ACM 장치 설정(통신 속도, 정지 비트 수, 패리티 유형, 데이터 비트 수)을 구성하기 위해 이 요청을 전송합니다. 직렬 에뮬레이션의 경우, 열려 있는 가상 COM 포트의 직렬 설정을 구성할 때마다 직렬 터미널에서 이 요청이 자동으로 전송됩니다.
GetLineCoding
호스트는 현재 ACM 설정(통신 속도, 정지 비트, 패리티, 데이터 비트)을 확인하기 위해 이 요청을 전송합니다. 직렬 에뮬레이션의 경우, 직렬 터미널은 가상 COM 포트가 열리는 동안 자동으로 이 요청을 전송합니다.
SetControlLineState 호스트는 반이중 모뎀의 반송파를 제어하고 데이터 단말 장치(DTE)의 준비 여부를 나타내기 위해 이 요청을 전송합니다. 직렬 에뮬레이션의 경우 DTE는 직렬 단말기입니다. 직렬 에뮬레이션의 경우, 일부 직렬 단말기에서는 제어 설정을 설정한 상태로 이 요청을 전송할 수 있습니다.
세트브레이크
호스트는 RS-232 방식의 브레이크를 생성하기 위해 이 요청을 전송합니다. 직렬 에뮬레이션의 경우, 특정 직렬 터미널에서 이 요청을 전송할 수 있습니다.
Silicon Labs9 ACM 하위 클래스는 인터럽트 IN 엔드포인트를 사용하여 호스트에 현재 직렬 회선 상태를 알립니다. 직렬
라인 상태는 호스트에 다음 정보를 알리는 비트맵입니다.
오버런으로 인한 데이터 폐기 패리티 오류 프레이밍 오류 링 신호 감지 상태 브레이크 감지 메커니즘 상태 전송 캐리어 상태 수신기 캐리어 감지 상태
Silicon Labs9 ACM 하위 클래스 구현은 다음 사양을 준수합니다.
PSTN 장치용 범용 직렬 버스 통신 하위 클래스, 개정판 1.2, 2007년 2월 9일.
USB 장치 CDC ACM 클래스 구성
이 섹션에서는 CDC ACM 클래스(통신 장치 클래스, 추상 제어 모델)를 구성하는 방법을 설명합니다. 구성 매개변수는 두 그룹으로 나뉩니다.
USB 장치 CDC ACM 클래스 애플리케이션별 구성 USB 장치 CDC ACM 클래스 인스턴스 구성
USB 장치 CDC ACM 클래스 애플리케이션별 구성
CDC 기본 클래스 ACM 하위 클래스
CDC 기본 클래스
먼저, Silicon Labs USB 장치 CDC 클래스 모듈을 사용하려면 애플리케이션 요구 사항에 맞게 CDC 컴파일 타임 구성 #define-s를 조정해야 합니다. 이 구성들은 sl_usbd_core_config.h 헤더 파일 내에 다시 정리되어 있습니다. file CDC 섹션 아래에 있습니다. 이 함수의 목적은 USB 장치 모듈에 할당할 USB CDC 객체의 수를 알려주는 것입니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
22/174
위에view
아래 표에서는 이 구성 구조에서 사용할 수 있는 각 구성 필드를 설명합니다.
표 - USB 장치 CDC 구성 정의
구성 이름
SL_USBD_CDC_CL AS S_INSTANCE_QUANT ITY
SL_USBD_CDC_구성_수량
TY
SL_USBD_CDC_DATA_인터페이스_수량
TY
설명
함수 호출을 통해 할당할 클래스 인스턴스 수
sl_usbd_cdc_acm_create_instance() .
구성 수. ACM 클래스 인스턴스는 sl_usbd_cdc_acm_add_to_configuration()을 통해 하나 이상의 aaaa 구성에 추가될 수 있습니다.
모든 CDC 함수에 대한 총 데이터 인터페이스(DCI) 수입니다. sl_usbd_cdc_acm_create_instance() 함수에 vi c ll을 추가한 각 CDC ACM 함수는 dt 인터페이스를 추가합니다.
기본값
2
1
2
ACM 하위 클래스
ACM 하위 클래스에는 아래 표에 표시된 하나의 컴파일 타임 구성이 있습니다.
표 – USB 장치 CDC ACM 구성 정의
구성 이름
SL_USBD_CDC_ACM_SUBCL ASS_INSTANCE_QUANTITY
설명
호출을 통해 할당할 하위 클래스 인스턴스 수를 구성합니다.
함수 sl_usbd_cdc_acm_create_instance() .
기본값
2
USB 장치 CDC ACM 클래스 인스턴스 구성
이 섹션에서는 CDC ACM 직렬 클래스 인스턴스와 관련된 구성을 정의합니다. 클래스 인스턴스 생성, 라인 상태, 간격, 호출 관리, 기능, p_acm_callbacks
클래스 인스턴스 생성
CDC ACM 직렬 클래스 인스턴스를 생성하려면 T a sl_usbd_cdc_acm_create_instance() 함수를 호출합니다. 이 함수는 여기에 설명된 대로 세 개의 구성 인수를 사용합니다.
라인_상태_간격
이는 CDC ACM 직렬 클래스 인스턴스가 T aa 호스트에 회선 상태 알림을 보고하는 간격(밀리초)입니다. 이 값은 2의 거듭제곱(1, 2, 4, 8, 16 등)이어야 합니다.
콜_관리_역량
통화 관리 기능 비트맵입니다. 비트맵의 가능한 값은 다음과 같습니다.
값(비트)
SL_USBD_ACM_시리얼_콜_관리_장치
SL_USBD_ACM_시리얼_콜_관리_데이터_CCI_DCI
설명
장치는 통화 관리를 직접 처리합니다. 장치는 데이터 클래스 인터페이스를 통해 통화 관리 정보를 송수신할 수 있습니다.
p_acm_콜백
저작권 © 2025 Silicon Laboratories. 판권 소유.
23/174
위에view
aa M aa p_acm_callbacks는 sl_usbd_cdc_acm_callbacks_t 유형의 구조체에 대한 포인터입니다. 이 구조체의 목적은 CDC ACM 이벤트 발생 시 호출될 CDC AC Cl ss 콜백 함수 세트를 제공하는 것입니다. 모든 콜백이 필수는 아니며, 콜백이 필요하지 않은 경우 콜백 구조체 변수에 널 포인터(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_라인_코딩
콜백 함수에 대한 이벤트 알림 콜백 등록 섹션을 참조하세요.amp르.
USB 장치 CDC ACM 클래스 프로그래밍 가이드
이 섹션에서는 CDC 추상 제어 모델(CDC ACM) 클래스를 사용하는 방법을 설명합니다. USB 장치 CDC ACM 클래스 초기화, 장치에 USB 장치 CDC ACM 클래스 인스턴스 추가, CDC ACM 클래스를 사용한 통신
USB 장치 CDC ACM 클래스 초기화
장치에 CDC ACM 클래스 기능을 추가하려면 먼저 sl_usbd_cdc_init() 및 sl_usbd_cdc_acm_init() 함수를 호출하여 CDC 기본 클래스와 ACM 하위 클래스를 초기화해야 합니다. 아래 예제는 기본 인수를 사용하여 sl_usbd_cdc_init() 및 sl_usbd_cdc_acm_init() 함수를 호출하는 방법을 보여줍니다.
Example – CDC ACM 클래스 초기화
sl_status_t 상태;
status = sl_usbd_cdc_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
status = sl_usbd_cdc_acm_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
장치에 USB 장치 CDC ACM 클래스 인스턴스 추가
장치에 CDC ACM 클래스 기능을 추가하려면 인스턴스를 만든 다음 장치 구성에 추가해야 합니다.
CDC ACM 클래스 인스턴스 생성
저작권 © 2025 Silicon Laboratories. 판권 소유.
24/174
위에view
장치 구성에 CDC ACM 클래스 인스턴스 추가 이벤트 알림 콜백 등록
CDC ACM 클래스 인스턴스 생성
aa M aaa sl_usbd_cdc_acm_create_instance() 함수를 호출하여 CDC AC 클래스 인스턴스를 생성합니다. 아래 예제는 sl_usbd_cdc_acm_create_instance() 함수를 사용하여 CDC AC 클래스 인스턴스를 생성하는 방법을 보여줍니다.
Example – sl_usbd_cdc_acm_create_instance()를 통한 CDC ACM 함수 생성
uint8_t 하위 클래스_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)
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
aaa (1) sl_usbd_cdc_acm_create_instance()에서 반환된 구성에 추가할 클래스 번호입니다. (2) 구성 번호(여기서는 Full-Speed 구성에 추가).
이벤트 알림 콜백 등록
CDC ACM Serial 클래스는 알림 콜백 함수를 통해 라인 제어 또는 코딩 변경 사항을 애플리케이션에 알릴 수 있습니다. 콜백 함수 구조체는 ACM 인스턴스 생성 시 인수로 전달될 수 있습니다. 이러한 콜백은 선택 사항입니다. 예:ample – CDC ACM 콜백 등록은 콜백 등록 함수의 사용을 보여줍니다. 예ample – CDC ACM 콜백 구현은 예를 보여줍니다.amp콜백 함수 구현의 le.
Example – CDC ACM 콜백 등록
저작권 © 2025 Silicon Laboratories. 판권 소유.
25/174
위에view
uint8_t 하위 클래스_nbr; sl_status_t 상태;
sl_usbd_cdc_acm_콜백_t sli_usbd_cdc_acm_콜백 = { app_usbd_cdc_acm_connect, app_usbd_cdc_acm_disconnect, app_usbd_cdc_acm_line_control_changed, app_usbd_cdc_acm_line_coding_changed, };
상태 = sl_usbd_cdc_acm_create_instance(64u, SL_USBD_ACM_SERIAL_CALL_MGMT_DATA_CCI_DCI | SL_USBD_ACM_SERIAL_CALL_MGMT_DEV, &sli_usbd_cdc_acm_callbacks, &subclass_nbr);
if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */ }
Example – CDC ACM 콜백 구현
bool app_usbd_cdc_acm_line_coding_changed(uint8_t
하위 클래스_nbr,
sl_usbd_cdc_acm_라인_코딩_t *p_라인_코딩)
{
uint32_t 전송 속도_새로운;
uint8_t 패리티_뉴;
uint8_t 정지_비트_새로 만들기;
uint8_t 데이터_비트_새로 만들기;
/* 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 이벤트, uint8_t 이벤트_변경)
{ bool rts_state; bool rts_state_changed; bool dtr_state; bool dtr_state_changed; bool brk_state; bool brk_state_changed;
/* TODO 새 라인 컨트롤을 적용합니다. */ rts_state = ((event & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; rts_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_RTS) ! 0) ? true : false; dtr_state = ((event & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; dtr_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_DTR) ! 0) ? true : false; brk_state = ((event & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false; brk_state_changed = ((event_changed & SL_USBD_CDC_ACM_CTRL_BREAK) ! 0) ? true : false;
}
(1) 라인 코딩 적용에 실패하면 이 함수에 false를 반환하는 것이 중요합니다. 그렇지 않으면 true를 반환합니다.
CDC ACM 클래스를 활용한 소통
직렬 상태
라인 코딩 라인 제어
저작권 © 2025 Silicon Laboratories. 판권 소유.
26/174
위에view
라인 상태 하위 클래스 인스턴스 통신
직렬 상태
라인 코딩
USB 호스트는 CDC ACM 장치의 회선 코딩(전송 속도, 패리티 등)을 제어합니다. 필요한 경우, 애플리케이션이 회선 코딩을 설정합니다. 아래 표에 설명된 대로 현재 회선 코딩을 검색하고 설정하는 두 가지 함수가 제공됩니다.
표 – CDC ACM 라인 코딩 기능
기능
sl_usbd_cdc_acm_g e t_line _코딩()
sl_usbd_cdc_acm_set_line_코딩()
설명
귀하의 애플리케이션은 SetLineCoding 요청을 통해 호스트에서 현재 라인 코딩 설정을 가져오거나 sl_usbd_cdc_acm_set_line_coding() 함수를 사용하여 가져올 수 있습니다.
애플리케이션에서 라인 코딩을 설정할 수 있습니다. 호스트는 GetLineCoding 요청을 통해 설정을 검색할 수 있습니다.
라인 제어
USB 호스트는 CDC ACM 장치의 라인 제어(RTS 및 DTR 핀, 브레이크 신호 등)를 제어합니다. 필요한 경우, 애플리케이션에서 라인 제어를 적용해야 합니다. 아래 표에 설명된 대로 현재 라인 제어를 검색하고 설정하는 함수가 제공됩니다.
표 – CDC ACM 라인 제어 기능
기능
sl_usb d _cd c_acm_g e t_line _control_state()
귀하의 애플리케이션은 SetControlLineState 요청을 통해 호스트가 설정한 현재 제어 라인 상태를 가져올 수 있습니다.
회선 상태
USB 호스트는 정기적으로 회선 상태를 검색합니다. 애플리케이션은 회선 상태가 변경될 때마다 이를 업데이트해야 합니다. 필요한 경우 애플리케이션에서 회선 상태를 설정해야 합니다. 아래 표에 설명된 것처럼 현재 회선 제어를 검색하고 설정하는 두 가지 함수가 제공됩니다.
표 – CDC ACM 라인 상태 기능
기능
sl_usb d _cd c_acm_set _line _state _event()
sl_usbd_cdc_acm_cle ar_line _state _event()
애플리케이션은 모든 회선 상태 이벤트를 설정할 수 있습니다. 회선 상태를 설정하는 동안 인터럽트 IN 전송이 호스트로 전송되어 직렬 회선 상태의 변화를 알립니다.
애플리케이션은 회선 상태의 두 가지 이벤트, 즉 전송 반송파와 수신 반송파 감지를 지울 수 있습니다. 다른 모든 이벤트는 ACM 직렬 에뮬레이션 하위 클래스에 의해 자동으로 지워집니다.
서브클래스 인스턴스 통신
Silicon Labs의 ACM 하위 클래스는 호스트와 통신하기 위해 다음과 같은 함수를 제공합니다. 함수 매개변수에 대한 자세한 내용은 CDC ACM 하위 클래스 함수 참조를 참조하십시오.
함수 이름
sl_usb d _cd c_acm_ 읽기 () sl_usb d _cd c_acm_쓰기 ()
작업
대량 OUT 엔드포인트를 통해 호스트로부터 데이터를 수신합니다. 이 함수는 차단 중입니다. 대량 IN 엔드포인트를 통해 호스트로 데이터를 전송합니다. 이 함수는 차단 중입니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
27/174
위에view
표 – CDC ACM 통신 API 요약 aaaaa sl_usbd_cdc_acm_read() 및 sl_usbd_cdc_acm_write()는 동기 통신을 제공하는데, 이는 전송이 차단됨을 의미합니다. 즉, 이 함수를 호출하면 애플리케이션은 오류 발생 여부와 관계없이 전송이 완료될 때까지 차단됩니다. 무한정 대기하는 것을 방지하기 위해 시간 초과를 지정할 수 있습니다. examp아래는 읽기 및 쓰기 예제를 보여줍니다.amp대량 OUT 엔드포인트를 사용하여 호스트로부터 데이터를 수신하고 대량 IN 엔드포인트를 사용하여 호스트로 데이터를 전송하는 파일입니다.
목록 – 직렬 읽기 및 쓰기 Example
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
단위32_t
xfer_len;
sl_상태_t
상태;
상태 = sl_usbd_cdc_acm_read(subclass_nbr,
(1)
rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
상태 = sl_usbd_cdc_acm_write(subclass_nbr,
(1)
tx_buf,
(4)
2u,
0u,
(3)
&xfer_len);
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
T aaaaa M (1) sl_usbd_cdc_acm_create_instance()로 생성된 클래스 인스턴스 번호는 전송을 적절한 대량 OUT 또는 IN 엔드포인트로 라우팅하기 위한 AC 하위 클래스에 대한 내부 참조를 제공합니다. (2) 애플리케이션은 함수에 제공된 버퍼가 모든 데이터를 수용할 만큼 충분히 큰지 확인해야 합니다. 그렇지 않으면 동기화 문제가 발생할 수 있습니다. (3) 무한 차단 상황을 방지하려면 밀리초 단위로 표시되는 시간 초과를 지정하십시오. 값이 809이면 애플리케이션 작업이 영원히 대기합니다. (4) 애플리케이션은 초기화된 전송 버퍼를 제공합니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
28/174
위에view
위에view
USB 장치 HID 클래스
USB 장치 HID 클래스 오버view USB 장치 HID 클래스 리소스 요구 사항(코어 USB 장치 HID 클래스 구성) USB 장치 HID 클래스 프로그래밍 가이드 HID 주기적 입력 보고서 작업
이 섹션에서는 Silicon Labs USB Device에서 지원하는 HID(Human Interface Device) 클래스에 대해 설명합니다.
HID 클래스는 키보드, 마우스, 포인팅 장치, 게임 장치 등 사람이 컴퓨터 작업을 제어하는 데 사용하는 장치를 포함합니다.
HID 클래스는 노브, 스위치, 버튼, 슬라이더와 같은 컨트롤을 포함하는 복합 장치에서도 사용할 수 있습니다. 예를 들어amp오디오 헤드셋의 음소거 및 볼륨 컨트롤은 헤드셋의 HID 기능으로 제어됩니다. HID 클래스는 제어 및 인터럽트 전송만을 사용하여 어떤 목적으로든 데이터를 교환할 수 있습니다.
HID 클래스는 가장 오래되고 널리 사용되는 USB 클래스 중 하나입니다. 모든 주요 호스트 운영 체제는 HID 장치를 관리하는 네이티브 드라이버를 제공하며, 이는 다양한 공급업체별 장치가 HID 클래스와 호환되는 이유입니다. 이 클래스에는 LED, 오디오, 촉각 피드백 등 다양한 유형의 출력 항목도 포함됩니다.
HID 구현은 다음 사양을 준수합니다.
인간 인터페이스 장치(HID)에 대한 장치 클래스 정의, 01년 6월 27일, 버전 1.11. 범용 직렬 버스 HID 사용 표, 2004년 10월 28일, 버전 1.12.
USB 장치 HID 클래스 오버view
위에view
HID 장치는 다음과 같은 엔드포인트로 구성됩니다.
기본 엔드포인트라고 하는 제어 IN 및 OUT 엔드포인트 쌍 인터럽트 IN 엔드포인트 선택적 인터럽트 OUT 엔드포인트
아래 표는 다양한 엔드포인트의 사용법을 설명합니다.
표 – HID 클래스 엔드포인트 사용
엔드포인트 방향 사용
컨트롤 인
제어
밖으로
인터럽트 IN
방해하다
밖으로
장치-호스트
호스트-디바이스
장치-호스트
호스트-디바이스
열거형, 클래스별 요청 및 데이터 통신(입력, 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 각 항목 유형의 항목9 기능에 대한 자세한 내용은 다음을 참조하세요. 각 범주의 항목에 대한 자세한 설명은 다음을 참조하세요.
표 - 각 항목 유형에 대한 항목 기능 설명
항목 항목 유형 기능
설명
메인 입력
하나 이상의 물리적 제어에서 제공하는 데이터에 대한 정보를 설명합니다.
주요 출력 장치로 전송된 데이터를 설명합니다.
주요 특징
장치 또는 구성 요소의 전반적인 동작에 영향을 미치는 장치로 전송되거나 장치에서 수신되는 장치 구성 정보를 설명합니다.
주요 컬렉션 그룹 관련 항목(입력, 출력 또는 기능).
컬렉션을 닫습니다. 컬렉션
저작권 © 2025 Silicon Laboratories. 판권 소유.
30/174
위에view
항목 항목 유형 기능
설명
글로벌 사용 페이지
장치 내에서 사용 가능한 기능을 식별합니다.
글로벌 논리 보고된 값의 하한을 논리 단위로 정의합니다. 최소값
글로벌 논리 보고된 값의 상한을 논리 단위로 정의합니다. 최대
전역 물리적 보고된 값의 하한을 물리적 단위로 정의합니다. 즉, 물리적 단위로 표현된 논리적 최소값입니다.
전역 물리적 보고된 값의 상한을 물리적 단위로 정의합니다. 즉, 물리적 단위로 표현된 논리적 최대값입니다.
글로벌 유닛
10진법의 단위 지수를 나타냅니다. 지수 범위는 -8에서 +7입니다.
멱지수
글로벌 유닛
보고된 값의 단위를 나타냅니다. 예를 들어 길이, 질량, 온도 단위 등이 있습니다.
글로벌 보고서 크기
보고서 필드의 크기를 비트 단위로 나타냅니다.
글로벌 보고서 ID는 특정 보고서에 추가된 접두사를 나타냅니다.
글로벌 보고서 수
항목에 대한 데이터 필드의 수를 나타냅니다.
글로벌 푸시
CPU 스택에 글로벌 항목 상태 테이블의 사본을 넣습니다.
글로벌 팝
항목 상태 테이블을 스택의 마지막 구조로 바꿉니다.
지역별 사용
사용 페이지 내에서 특정 사용을 지정하는 인덱스를 나타냅니다. 특정 컨트롤 또는 컨트롤 그룹에 대해 공급업체가 제안하는 사용 방식을 나타냅니다. 사용 방식은 애플리케이션 개발자에게 컨트롤이 실제로 무엇을 측정하는지에 대한 정보를 제공합니다.
지역별 사용
배열이나 비트맵과 관련된 시작 사용법을 정의합니다.
최저한의
지역별 사용
배열이나 비트맵과 관련된 종료 사용법을 정의합니다.
최고
로컬 지정자는 컨트롤에 사용된 신체 부위를 결정합니다. 인덱스는 물리적
색인
설명자.
로컬 지정자 배열 또는 비트맵과 연관된 시작 지정자의 인덱스를 정의합니다. 최소값
로컬 지정자 배열 또는 비트맵과 연관된 종료 지정자의 인덱스를 정의합니다. 최대
로컬 문자열 인덱스
문자열 설명자의 문자열 인덱스입니다. 문자열을 특정 항목이나 컨트롤과 연결할 수 있습니다.
로컬 문자열
배열의 컨트롤에 순차적 문자열 그룹을 할당할 때 첫 번째 문자열 인덱스를 지정합니다.
최소 또는 비트맵.
로컬 로컬
문자열 최대
구분 기호
배열이나 비트맵의 컨트롤에 순차적 문자열 그룹을 할당할 때 마지막 문자열 인덱스를 지정합니다.
로컬 항목 집합의 시작이나 끝을 정의합니다.
control9s 데이터는 최소한 다음 항목을 정의해야 합니다.
입력, 출력 또는 기능 주요 항목 사용 로컬 항목 사용 페이지 글로벌 항목 논리적 최소값 글로벌 항목 논리적 최대값 글로벌 항목 보고서 크기 글로벌 항목
저작권 © 2025 Silicon Laboratories. 판권 소유.
31/174
위에view
보고서 수 글로벌 항목 아래 표는 호스트 HID 파서 관점에서 본 마우스 보고서 설명자 콘텐츠의 표현을 보여줍니다. 마우스에는 세 개의 버튼(왼쪽, 오른쪽, 휠)이 있습니다. 예제에 제시된 코드는amp아래는 이 마우스 보고서 설명자 표현에 해당하는 코드 구현입니다.
그림 – 호스트 HID 파서의 보고서 설명자 콘텐츠 View
(1) 사용 페이지 항목 기능은 장치의 일반적인 기능을 지정합니다. 이 예제에서는ample, HID 장치는 다음에 속합니다.
일반 데스크톱 컨트롤.
(2) 컬렉션 애플리케이션은 공통적인 용도를 가지고 애플리케이션에 익숙할 수 있는 주요 항목들을 그룹화합니다. 다이어그램에서 이 그룹은 세 개의 입력 주요 항목으로 구성됩니다. 이 컬렉션에서 컨트롤의 권장 용도는 사용 항목에서 알 수 있듯이 마우스입니다. (3) 중첩된 컬렉션은 애플리케이션에서 단일 컨트롤 또는 컨트롤 그룹의 사용에 대한 자세한 정보를 제공하는 데 사용될 수 있습니다. 이 예제에서는amp컬렉션 애플리케이션에 중첩된 컬렉션 물리(Collection Physical)는 컬렉션 애플리케이션을 구성하는 동일한 세 개의 입력 항목으로 구성됩니다. 컬렉션 물리는 하나의 기하학적 지점에서 수집된 데이터 포인트를 나타내는 데이터 항목 집합에 사용됩니다. 예를 들어,ample, 제안된 사용법은 사용법 항목에서 표시된 포인터입니다.여기서 포인터 사용법은 마우스 위치 좌표를 참조하고 시스템 소프트웨어는 화면 커서의 움직임에 따라 마우스 좌표를 변환합니다.(4) 중첩된 사용법 페이지도 가능하며 장치의 일반 기능 내의 특정 측면에 대한 자세한 내용을 제공합니다.이 경우 두 개의 입력 항목이 그룹화되어 마우스 버튼에 해당합니다.한 입력 항목은 항목의 데이터 필드 수(보고서 수 항목), 데이터 필드의 크기(보고서 크기 항목) 및 각 데이터 필드에 가능한 값(사용 최소 및 최대, 논리적 최소 및 최대 항목) 측면에서 마우스의 세 버튼(오른쪽, 왼쪽 및 휠)을 정의합니다.다른 입력 항목은 입력 보고서 데이터를 바이트 경계에 정렬할 수 있도록 하는 13비트 상수입니다.이 입력 항목은 패딩 목적으로만 사용됩니다.(5) 일반 데스크톱 컨트롤을 참조하는 또 다른 중첩된 사용법 페이지는 마우스 위치 좌표에 대해 정의됩니다. 이 사용 페이지에서 입력 항목은 두 가지 사용 방법에 의해 지정된 x축 및 y축에 해당하는 데이터 필드를 설명합니다.
품목.
이전 마우스 보고서 설명자 내용을 분석한 후, 호스트9의 HID 파서는 장치가 인터럽트 IN 전송 또는 GET_REPORT 요청에 대한 응답으로 전송한 입력 보고서 데이터를 해석할 수 있습니다. 그림 - 호스트 HID 파서의 보고서 설명자 내용에 표시된 마우스 보고서 설명자에 해당하는 입력 보고서 데이터 View is
저작권 © 2025 Silicon Laboratories. 판권 소유.
32/174
위에view
아래 표에 나와 있습니다. 보고서 데이터의 총 크기는 4바이트입니다. 동일한 엔드포인트를 통해 여러 유형의 보고서를 전송할 수 있습니다. 보고서 유형을 구분하기 위해 데이터 보고서에 1바이트 보고서 ID 접두사가 추가됩니다. 보고서 ID가 사용된 경우amp마우스 보고서의 경우 보고서 데이터의 총 크기는 5바이트가 됩니다.
표 - 호스트로 전송된 입력 보고서 및 3개 버튼 마우스 상태에 해당
비트 오프셋
0 1 2 3 16 24
비트 수 1 1 1 13 8 8
설명 버튼 1(왼쪽 버튼). 버튼 2(오른쪽 버튼). 버튼 3(휠 버튼). 사용되지 않음. X축 위치. Y축 위치.
물리적 설명자는 컨트롤을 활성화하기 위한 본체의 일부 또는 전부를 나타냅니다. 애플리케이션은 이 정보를 사용하여 장치 컨트롤에 기능을 할당할 수 있습니다. 물리적 설명자는 클래스별 선택적 설명자이며, 대부분의 장치에서는 이를 사용해도 별다른 이점이 없습니다. 다음을 참조하십시오.
USB 장치 HID 클래스 리소스는 코어에서 필요합니다.
sl_usbd_hid_add_to_configuration() 함수를 호출하여 USB 구성에 HID 클래스 인스턴스를 추가할 때마다 코어에서 다음 리소스가 할당됩니다.
의지
인터페이스 대체 인터페이스 엔드포인트 인터페이스 그룹
수량
1 1 1 (인터럽트 OUT 엔드포인트가 활성화된 경우 2) 0
해당 숫자는 구성당입니다. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY 및 SL_USBD_DESCRIPTOR_QUANTITY 구성 값을 설정할 때 클래스가 추가될 구성 수를 고려해야 합니다. SL_USBD_OPEN_ENDPOINTS_QUANTITY 구성 값의 경우, 호스트에서 구성을 설정할 때만 엔드포인트가 열리므로 클래스 인스턴스에 필요한 엔드포인트 수만 고려하면 됩니다.
USB 장치 HID 클래스 구성
HID 클래스를 구성하는 데는 두 가지 구성 매개변수 그룹이 사용됩니다.
USB 장치 HID 클래스 애플리케이션별 구성 USB 장치 HID 클래스 인스턴스 구성
USB 장치 HID 클래스 애플리케이션별 구성
먼저, Silicon Labs USB 장치 HID 클래스 모듈을 사용하려면 애플리케이션 요구에 맞게 HID 컴파일 타임 구성 정의를 조정해야 합니다. 이 정의는 sl_usbd_core_config.h 헤더에 다시 정리되어 있습니다. file HID 섹션 아래에 있습니다. 이 섹션은 수량 구성과 HID 작업 구성의 두 섹션으로 나눌 수 있습니다. 수량 구성의 목적은 USB 장치 모듈에 할당할 USB HID 객체의 수를 알려주는 것입니다.
아래 표에서는 각 구성 정의를 설명합니다.
표 - USB 장치 HID 구성 정의
저작권 © 2025 Silicon Laboratories. 판권 소유.
33/174
위에view
구성 이름
SL_USBD_HID_CL ASS_INSTANCE_QUANTITY
SL_USBD_HID_구성_수량
SL_USBD_HID_REPORT_ ID_수량
SL_USBD_HID_PUSH_P OP_항목_수량
SL_USBD_HID_TIMER_T 스택 크기 요청
SL_USBD_HID_TIMER_T 우선 순위 묻기
설명
함수 호출을 통해 할당할 클래스 인스턴스 수
sl_usbd_hid_create_instance() .
구성 수. HID 클래스 인스턴스는 sl_usbd_hid_add_to_configuration() 함수를 사용하여 하나 이상의 AAA 구성에 추가할 수 있습니다. 할당할 보고서 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_NONE SL_USBD_HID_SUBCL ASS_BOOT
부트 하위 클래스를 사용하는 HID 장치는 표준 보고서 형식을 사용해야 합니다. 하위 클래스 코드에 대한 자세한 내용은 HID 사양 개정판 1.11의 4.2절을 참조하십시오.
규약
HID 장치에서 사용하는 프로토콜입니다. 가능한 값은 다음과 같습니다.
SL_USBD_HID_프로토콜_없음 SL_USBD_HID_프로토콜_키보드 SL_USBD_HID_프로토콜_마우스
HID 기능이 마우스인 경우 프로토콜을 SL_USBD_HID_PROTOCOL_MOUSE로 설정해야 합니다. 키보드인 경우 프로토콜을 SL_USBD_HID_PROTOCOL_KBD로 설정해야 합니다. 그렇지 않은 경우 프로토콜을 SL_USBD_HID_PROTOCOL_NONE으로 설정해야 합니다. 하위 클래스 코드에 대한 자세한 내용은 HID 사양 개정판 1.11의 4.3절을 참조하십시오.
국가 코드
국가 코드의 ID입니다. 가능한 값은 다음과 같습니다.
SL_USBD_HID_국가_코드_지원되지_않음
저작권 © 2025 Silicon Laboratories. 판권 소유.
34/174
위에view
SL_USBD_HID_COUNTRY_CODE_ARABIC SL_USBD_HID_COUNTRY_CODE_BELGIAN SL_USBD_HID_COUNTRY_CODE_CANADIAN_BILINGUAL SL_USBD_HID_COUNTRY_CODE_CANADIAN_FRENCH SL_USBD_HID_COUNTRY_CODE_CZECH_REPUBLIC SL_USBD_HID_COUNTRY_CODE_DANISH SL_USBD_HID_COUNTRY_CODE_FINNISH SL_USBD_HID_COUNTRY_CODE_FRENCH SL_USBD_HID_COUNTRY_CODE_GERMAN SL_USBD_HID_COUNTRY_CODE_GREEK SL_USBD_HID_COUNTRY_CODE_HEBREW SL_USBD_HID_COUNTRY_CODE_HUNGARY SL_USBD_HID_COUNTRY_CODE_INTERNATIONAL SL_USBD_HID_COUNTRY_CODE_ITALIAN SL_USBD_HID_COUNTRY_CODE_JAPAN_KATAKANA SL_USBD_HID_COUNTRY_CODE_KOREAN SL_USBD_HID_COUNTRY_CODE_L ATIN_AMERICAN SL_USBD_HID_COUNTRY_CODE_NETHERL ANDS_DUTCH SL_USBD_HID_COUNTRY_CODE_NORWEGIAN SL_USBD_HID_COUNTRY_CODE_PERSIAN_FARSI SL_USBD_HID_COUNTRY_CODE_POL AND SL_USBD_HID_COUNTRY_CODE_PORTUGUESE SL_USBD_HID_COUNTRY_CODE_RUSSIA SL_USBD_HID_COUNTRY_CODE_SLOVAKIA SL_USBD_HID_COUNTRY_CODE_SPANISH SL_USBD_HID_COUNTRY_CODE_SWEDISH SL_USBD_HID_COUNTRY_CODE_SWISS_FRENCH SL_USBD_HID_COUNTRY_CODE_SWISS_GERMAN SL_USBD_HID_COUNTRY_CODE_SWITZERL 및 SL_USBD_HID_COUNTRY_CODE_TAIWAN SL_USBD_HID_COUNTRY_CODE_TURKISH_Q SL_USBD_HID_COUNTRY_CODE_UK SL_USBD_HID_COUNTRY_CODE_US SL_USBD_HID_COUNTRY_CODE_YUG OSL AVIA SL_USBD_HID_COUNTRY_CODE_TURKISH_F
국가 코드는 하드웨어가 어느 국가에 현지화되어 있는지를 나타냅니다. 대부분의 하드웨어는 현지화되어 있지 않으므로 이 aaaaav lue는 SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED (0)가 됩니다. 그러나 키보드는 이 필드를 사용하여 키 캡의 언어를 나타낼 수 있습니다.
국가 코드에 대한 자세한 내용은 HID 사양 개정판 1.11의 섹션 6.2.1을 참조하세요.
interval_in 및 interval_out
interval_in과 interval_out은 IN 인터럽트 엔드포인트와 OUT 인터럽트 엔드포인트의 폴링 간격을 나타냅니다.
엔드포인트의 폴링 간격(밀리초)을 나타냅니다. 이 값의 설정은 장치가 호스트에 대한 새 보고서를 생성하는 빈도에 따라 달라집니다. 예를 들어, 보고서가 16밀리초마다 생성되는 경우, 간격은 16밀리초 이하여야 합니다.
값은 2의 거듭제곱(1, 2, 4, 8, 16 등)이어야 합니다.
ctrl_rd_en이 true로 설정된 경우 interval_out v lue는 무시됩니다.
p_hid_콜백
aaaa p_hid_callback은 sl_usbd_hid_callbacks_t 유형의 구조체를 가리키는 포인터입니다. 이 구조체의 목적은 HID 이벤트 발생 시 호출될 HID 클래스 콜백 함수 세트를 제공하는 것입니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
35/174
위에view
모든 콜백이 필수는 아니며, 콜백이 필요하지 않은 경우 콜백 구조체 변수에 널 포인터(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 인스턴스 생성 중에 호출되어 물리적 설명자를 전달합니다. 물리적 설명자는 컨트롤을 활성화하는 인체의 특정 부분에 대한 정보를 제공하는 설명자입니다. 물리적 설명자에 대한 자세한 내용은 HID 사양 개정판 1.11의 섹션 6.2.3을 참조하세요. 물리적 설명자는 선택 사항이며 대부분 무시됩니다. 여기에 전달된 버퍼는 NULL로 설정하고 길이는 0으로 설정할 수 있습니다. 호스트가 보고서 설명자에 설명된 대로 보고서를 설정할 때(보고서를 보낼 때) 호출됩니다.
보고서 설명자에 설명된 대로 호스트가 기능 보고서를 요청할 때 호출됩니다.
호스트가 보고서 설명자에 설명된 대로 기능 보고서를 설정할 때 호출됩니다.
app_usbd_hid_enable(uint8_t class_nbr); app_usbd_hid_disable(uint8_t class_nbr); 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);
void app_usbd_hid_set_output_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_get_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len); void app_usbd_hid_set_feature_report(uint8_t class_nbr, uint8_t report_id, uint8_t *p_report_buf, uint16_t report_len);
.get_protocol
현재 활성 프로토콜을 검색합니다.
app_usbd_hid_get_protocol(uint8_t class_nbr, uint8_t *p_protocol)을 무효화합니다.
.프로토콜 설정
현재 활성 프로토콜을 설정합니다.
void app_usbd_hid_set_protocol(uint8_t class_nbr, uint8_t 프로토콜);
HID 클래스 보고서 설명자 Example
실리콘랩스의 HID 클래스ample 응용 프로그램은 ex를 제공합니다amp간단한 마우스에 대한 보고서 설명자의 le. examp아래는 마우스 보고서 설명자를 보여줍니다.
Example – 마우스 보고서 설명자
정적 uint8_t app_usbd_hid_report_desc[] = {
(1) (2)
SL_USBD_HID_글로벌_사용_페이지 + 1, SL_USBD_HID_사용_페이지_일반_데스크톱_컨트롤,
SL_USBD_HID_로컬_사용 + 1, SL_USBD_HID_CA_마우스,
(3)
저작권 © 2025 Silicon Laboratories. 판권 소유.
36/174
위에view
SL_USBD_HID_메인_컬렉션 +1, SL_USBD_HID_컬렉션_애플리케이션,(4)
SL_USBD_HID_로컬_사용 +1, SL_USBD_HID_CP_포인터,(5)
SL_USBD_HID_기본_수집 +1, SL_USBD_HID_수집_물리적,(6)
SL_USBD_HID_글로벌_사용_페이지 +1, SL_USBD_HID_사용_페이지_버튼,(7)
SL_USBD_HID_로컬_사용_최소 +1,0 01,
SL_USBD_HID_로컬_사용_최대 +1,0 03,
SL_USBD_HID_글로벌_로그_분 +1,0 00,
SL_USBD_HID_글로벌_로그_최대 +1,0 01,
SL_USBD_HID_글로벌_보고서_카운트 +1,0 03,
SL_USBD_HID_글로벌_보고서_크기 +1,0 01,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_메인_변수 |
SL_USBD_HID_MAIN_ABSOLUTE,
SL_USBD_HID_글로벌_보고서_카운트 +1,0 01,(8)
SL_USBD_HID_글로벌_보고서_크기 +1,0 0D,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_CONSTANT,(9)
SL_USBD_HID_글로벌_사용_페이지 +1, SL_USBD_HID_사용_페이지_일반_데스크톱_컨트롤,
SL_USBD_HID_로컬_사용 +1, SL_USBD_HID_DV_X,
SL_USBD_HID_로컬_사용 +1, SL_USBD_HID_DV_Y,
SL_USBD_HID_글로벌_로그_분 +1,0 81,
SL_USBD_HID_글로벌_로그_최대 +1,0 7F,
SL_USBD_HID_글로벌_보고서_크기 +1,0 08,
SL_USBD_HID_글로벌_보고서_카운트 +1,0 02,
SL_USBD_HID_MAIN_INPUT +1, SL_USBD_HID_MAIN_DATA |
SL_USBD_HID_메인_변수 |
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축을 사용하여 마우스 위치를 설명하기 위해 표시됩니다. 입력 항목은 값이 -127과 127 사이일 수 있는 두 개의 8비트 필드로 구성됩니다.
(10) 포인터 컬렉션이 닫힙니다.
(11) 마우스 컬렉션이 종료되었습니다.
USB.org HID 페이지
저작권 © 2025 Silicon Laboratories. 판권 소유.
37/174
위에view
USB 구현 포럼(USB-IF)에서는 "HID 설명자 도구"라는 도구를 제공하며, 보고서 설명자 형식에 대한 기타 정보도 함께 제공합니다. 자세한 내용은 http://www.usb.org/developers/hidpage/를 참조하십시오.
USB 장치 HID 클래스 프로그래밍 가이드
이 섹션에서는 HID 클래스를 사용하는 방법을 설명합니다. USB 장치 HID 클래스 초기화, 장치에 USB 장치 HID 클래스 인스턴스 추가, USB 장치 HID 클래스를 사용한 통신
USB 장치 HID 클래스 초기화
장치에 HID 클래스 기능을 추가하려면 먼저 sl_usbd_hid_init() 함수를 호출하여 클래스를 초기화해야 합니다.amp아래 코드는 기본 인수를 사용하여 sl_usbd_hid_init()를 호출하는 방법을 보여줍니다. sl_usbd_hid_init()에 전달할 구성 인수에 대한 자세한 내용은 "USB 장치 HID 클래스 애플리케이션별 구성"을 참조하세요.
Example – sl_usbd_hid_init() 호출
sl_status_t 상태;
status = sl_usbd_hid_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
장치에 USB 장치 HID 클래스 인스턴스 추가
장치에 HID 클래스 기능을 추가하려면 인스턴스를 만든 다음 장치 구성에 추가해야 합니다.
HID 클래스 인스턴스 생성
sl_usbd_hid_create_instance() 함수를 호출하여 HID 클래스 인스턴스를 생성합니다.amp아래 코드는 sl_usbd_hid_create_instance()를 통해 기본 인수를 사용하여 간단한 마우스 함수를 생성하는 방법을 보여줍니다. sl_usbd_hid_create_instance()에 전달할 구성 인수에 대한 자세한 내용은 "USB 장치 HID 클래스 인스턴스 구성"을 참조하세요.
Example – sl_usbd_hid_create_instance()를 통해 마우스 기능 추가
저작권 © 2025 Silicon Laboratories. 판권 소유.
38/174
위에view
/* 전역 상수. */ static const uint8_t app_usbd_hid_mouse_report_desc[] = {
SL_USBD_HID_GLOBAL_사용_페이지 + 1, SL_USBD_HID_사용_페이지_일반_데스크톱_컨트롤, SL_USBD_HID_로컬_사용_페이지 + 1, SL_USBD_HID_CA_마우스, SL_USBD_HID_메인_수집 + 1, SL_USBD_HID_수집_애플리케이션, SL_USBD_HID_로컬_사용_페이지 + 1, SL_USBD_HID_CP_포인터, SL_USBD_HID_메인_수집 + 1, SL_USBD_HID_물리적_수집, SL_USBD_HID_글로벌_사용_페이지 + 1, SL_USBD_HID_사용_페이지_버튼, SL_USBD_HID_로컬_사용_최소값 + 1, 0 01, SL_USBD_HID_로컬_사용_최대값 + 1, 0 03, SL_USBD_HID_글로벌_로그_최소값 + 1, 0 00, SL_USBD_HID_글로벌_로그_최대값 + 1, 0 01, SL_USBD_HID_글로벌_보고서_수 + 1, 0 03, SL_USBD_HID_글로벌_보고서_크기 + 1, 0 01, SL_USBD_HID_MAIN_INPUT + 1, SL_USBD_HID_MAIN_DATA | SL_USBD_HID_MAIN_변수 | 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 상태;
sl_usbd_hid_callbacks_t app_usbd_hid_callbacks = { NULL, NULL, app_usbd_hid_get_report_desc, NULL, NULL, NULL, NULL, NULL, NULL };
void app_usbd_hid_get_report_desc(uint8_t class_nbr, const uint8_t **p_report_ptr, uint16_t *p_report_len)
{ (공백)클래스_nbr;
*p_report_ptr = app_usbd_hid_mouse_report_desc; *p_report_len = sizeof(app_usbd_hid_mouse_report_desc); }
상태 = sl_usbd_hid_create_instance(SL_USBD_HID_SUBCLASS_BOOT, SL_USBD_HID_PROTOCOL_MOUSE, SL_USBD_HID_COUNTRY_CODE_NOT_SUPPORTED, Ex_USBD_HID_Mouse_ReportDesc, sizeof(Ex_USBD_HID_Mouse_ReportDesc), 2u, 2u, true, &app_usbd_hid_callbacks, &class_nbr);
저작권 © 2025 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(class_nbr,
(1)
config_nbr_fs); (2)
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
(1) sl_usbd_hid_create_instance()에서 반환된 구성에 추가할 클래스 번호입니다. (2) 구성 번호(여기서는 Full-Speed 구성에 추가).
USB 장치 HID 클래스를 사용하여 통신
클래스 인스턴스 통신 동기 통신 클래스 인스턴스 통신 HID 클래스는 호스트와 통신하기 위해 다음과 같은 기능을 제공합니다.
표 – HID 통신 API 요약
함수 이름
sl_usb d _hid _ read _sy nc() sl_usb d _hid _write _sy nc()
인터럽트 OUT 엔드포인트를 통해 호스트로부터 데이터를 수신합니다. 이 함수는 차단 중입니다. 인터럽트 IN 엔드포인트를 통해 호스트로 데이터를 전송합니다. 이 함수는 차단 중입니다.
동기 통신 동기 통신은 전송이 차단됨을 의미합니다. 함수 호출 시, 애플리케이션은 오류 발생 여부와 관계없이 전송이 완료될 때까지 차단됩니다. 무한 대기를 방지하기 위해 시간 제한을 지정할 수 있습니다. examp아래의 그림은 인터럽트 OUT 엔드포인트를 사용하여 호스트로부터 데이터를 수신하고 인터럽트 IN 엔드포인트를 사용하여 호스트로 데이터를 전송하는 읽기 및 쓰기를 보여줍니다.
Example – 동기식 HID 읽기 및 쓰기
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
단위32_t
xfer_len;
sl_상태_t
상태;
상태 = sl_usbd_hid_read_sync(class_nbr,
(1)
(void *)rx_buf,
(2)
2u,
0u,
(3)
&xfer_len);
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
저작권 © 2025 Silicon Laboratories. 판권 소유.
40/174
위에view
status =sl_usbd_hid_read_sync(class_nbr,(1)(void *)rx_buf,(2)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */}
status =sl_usbd_hid_write_sync(class_nbr,(1)(void *)tx_buf,(4)2u,0u,(3)&xfer_len);if(status ! SL_STATUS_OK){/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */}
(1) sl_usbd_hid_create_instance()에서 생성된 클래스 인스턴스 번호는 HID 클래스가 전송을 적절한 인터럽트 OUT 또는 IN 엔드포인트로 라우팅할 수 있는 내부 참조를 제공합니다.
(2) 애플리케이션은 함수에 제공된 버퍼가 모든 데이터를 수용할 만큼 충분히 큰지 확인해야 합니다. 그렇지 않으면 동기화 문제가 발생할 수 있습니다. 내부적으로 읽기 작업은 sl_usbd_hid_create_instance() 호출 시 설정된 제어 읽기 플래그에 따라 제어 엔드포인트 또는 인터럽트 엔드포인트에서 수행됩니다.
(3) 무한 차단 상황을 피하기 위해 밀리초 단위로 표현되는 시간 제한을 지정할 수 있습니다. 809 값을 지정하면 애플리케이션 작업이 영원히 대기합니다.
(4) 응용 프로그램은 초기화된 전송 버퍼를 제공합니다.
HID 주기적 입력 보고서 작업
대역폭을 절약하기 위해 호스트는 보고 빈도를 제한하여 인터럽트 IN 엔드포인트에서 발생하는 보고를 차단할 수 있습니다. 이를 위해 호스트는 SET_IDLE 요청을 전송해야 합니다. Silicon Labs에서 구현한 HID 클래스에는 하나 이상의 입력 보고서에 적용할 수 있는 보고 빈도 제한을 준수하는 내부 작업이 포함되어 있습니다. 그림 1. 주기적 입력 보고 작업은 주기적 입력 보고 작업의 작동 방식을 보여줍니다.
그림 – 주기적 입력 보고서 작업
(1) 장치는 SET_IDLE 요청을 수신합니다. 이 요청은 주어진 보고서 ID에 대한 유휴 기간을 지정합니다. SET_IDLE 요청에 대한 자세한 내용은 다음을 참조하십시오.
(2) HID 클래스 초기화 단계에서 할당된 보고서 ID 구조체는 유휴 지속 시간으로 업데이트됩니다. 유휴 지속 시간 카운터는 유휴 지속 시간 값으로 초기화됩니다. 보고서 ID 구조체는 입력 보고서 ID 구조체를 포함하는 연결 리스트의 끝에 삽입됩니다. 유휴 지속 시간 값은 4ms 단위로 표현되며, 4ms에서 1020ms까지의 범위를 나타냅니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
41/174
위에view
유휴 기간이 인터럽트 IN 엔드포인트의 폴링 간격보다 짧으면 보고서는 폴링 간격으로 생성됩니다.
(3) 주기적 입력 보고 작업은 4ms마다 입력 보고 ID 목록을 탐색합니다. 각 입력 보고 ID에 대해 작업은 두 가지 가능한 작업 중 하나를 수행합니다. 작업 기간의 길이는 유휴 기간에 사용된 4ms 단위와 일치합니다. 호스트에서 SET_IDLE 요청을 보내지 않으면 입력 보고 ID 목록은 비어 있고 작업은 처리할 내용이 없습니다. 작업은 0이 아니고 유휴 기간이 0보다 큰 보고서 ID만 처리합니다.
(4) 주어진 입력 보고서 ID에 대해 작업은 유휴 기간이 경과했는지 확인합니다. 유휴 기간이 경과하지 않으면 카운터가 감소하고 호스트로 입력 보고서가 전송되지 않습니다.
(5) 유휴 기간이 경과한 경우(즉, 유휴 기간 카운터가 0에 도달한 경우) 인터럽트 IN 엔드포인트를 통해 sl_usbd_hid_write_sync() 함수를 호출하여 호스트에 입력 보고서가 전송됩니다.
(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 USB 장치 MSC 클래스 리소스 요구 사항(코어 USB 장치 MSC 클래스 구성) USB 장치 MSC 클래스 프로그래밍 가이드 USB 장치 MSC 클래스 스토리지 드라이버
이 섹션에서는 Silicon Labs USB Device에서 지원하는 대용량 저장 장치 클래스(MSC)에 대해 설명합니다. MSC는 USB 장치와 호스트 간의 정보 전송을 가능하게 하는 프로토콜입니다. 전송되는 정보는 실행 프로그램, 소스 코드, 문서, 이미지, 구성 데이터 또는 기타 텍스트 또는 숫자 데이터와 같이 전자적으로 저장될 수 있는 모든 것입니다. USB 장치는 호스트에 외부 저장 매체로 인식되어 다음 정보를 전송할 수 있습니다. file드래그 앤 드롭으로 가능합니다.
A file 시스템은 어떻게 정의합니까? files는 저장 매체에 구성됩니다. USB 대용량 저장 장치 클래스 사양은 특별한 것을 요구하지 않습니다. file 규격에 맞는 장치에서 사용할 수 있는 시스템입니다. 대신, SCSI(Small Computer System Interface) 투명 명령 세트를 사용하여 데이터 섹터를 읽고 쓸 수 있는 간단한 인터페이스를 제공합니다. 따라서 운영 체제는 USB 드라이브를 하드 드라이브처럼 취급할 수 있으며, 어떤 방식으로든 포맷할 수 있습니다. file 그들이 좋아하는 시스템.
USB 대용량 저장 장치 클래스는 다음과 같이 두 가지 전송 프로토콜을 지원합니다.
대량 전용 전송(BOT) 제어/대량/인터럽트(CBI) 전송(플로피 디스크 드라이브에만 사용됨)
대용량 저장 장치 클래스는 BOT 프로토콜만을 사용하여 SCSI 투명 명령 집합을 구현합니다. 즉, 대량 엔드포인트만 사용하여 데이터 및 상태 정보를 전송합니다. MSC 구현은 여러 논리 장치를 지원합니다.
MSC 구현은 다음 사양을 준수합니다.
범용 직렬 버스 대용량 저장 장치 클래스 사양view, 개정판 1.3 2008년 9월 5일. USB 대용량 저장 장치 클래스 대량 전용 전송, 개정판 1.0 1999년 9월 31일.
USB 장치 MSC aCl ss Overview
프로토콜 엔드포인트 클래스 요청 SCSI(Small Computer System Interface)
규약
이 섹션에서는 대용량 저장 장치 클래스의 대량 전용 전송(BOT) 프로토콜에 대해 설명합니다. 대량 전용 전송 프로토콜에는 세 가지 유형이 있습니다.tag에스:
명령 전송 데이터 전송 상태 전송
대용량 저장 장치 명령은 호스트에서 명령 블록 래퍼(CBW)라는 구조를 통해 전송됩니다. 데이터 전송이 필요한 명령의 경우tag즉, 호스트는 CBW의 길이 및 플래그 필드에 지정된 정확한 바이트 수를 장치로부터 전송하거나 수신하려고 시도합니다. 데이터 전송 후tag즉, 호스트는 명령 상태와 데이터 잔여물(있는 경우)을 자세히 설명하는 명령 상태 래퍼(CSW)를 장치에서 수신하려고 시도합니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
43/174
위에view
데이터 전송을 포함하지 않는 명령의 경우tag즉, 호스트는 CBW가 전송된 직후 CSW 수신을 시도합니다. 프로토콜은 그림 - MSC 프로토콜에 자세히 설명되어 있습니다.
그림 – MSC 프로토콜
종점
장치 측면에서 BOT 사양을 준수하는 MSC는 다음과 같은 엔드포인트로 구성됩니다. 기본 엔드포인트라고 하는 제어 IN 및 OUT 엔드포인트 쌍. 벌크 IN 및 OUT 엔드포인트 쌍.
아래 표는 엔드포인트의 다양한 사용법을 나타냅니다.
표 – MSC 엔드포인트 사용
엔드포인트
컨트롤 IN 컨트롤 OUT 벌크 IN 벌크 OUT
방향
장치 대 호스트 호스트 대 장치 장치 대 호스트 호스트 대 장치
용법
열거 및 MSC 클래스별 요청 열거 및 MSC 클래스별 요청 CSW 및 데이터 전송 CBW 및 데이터 수신
수업 요청
MSC BOT 프로토콜에는 두 가지 정의된 제어 요청이 있습니다. 이러한 요청과 설명은 아래 표에 자세히 나와 있습니다.
표 – 대용량 저장소 클래스 요청
수업 요청
대량 전용 대용량 저장소 재설정
설명
이 요청은 대용량 저장 장치와 관련 인터페이스를 재설정하는 데 사용됩니다. 이 요청은 장치가 다음 명령 블록을 수신할 수 있도록 준비합니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
44/174
위에view
수업 요청
설명
최대값 가져오기 이 요청은 장치에서 지원하는 가장 높은 논리 단위 번호(LUN)를 반환하는 데 사용됩니다. 예를 들어amp르, 에이
룬(LUN)
LUN 0과 LUN 1이 있는 장치는 값 1을 반환합니다. 단일 논리 장치가 있는 장치는 0을 반환하거나 중지합니다.
요청. 반환될 수 있는 최대값은 15입니다.
소형 컴퓨터 시스템 인터페이스 SCSI
프로그래밍 인터페이스 수준에서 MSC 장치는 SCSI 및 SFF-8020i(ATAPI)와 같은 표준 저장 매체 통신 프로토콜 중 하나를 구현합니다. "프로그래밍 인터페이스"는 구현되는 프로토콜을 지정하고, 호스트 운영 체제가 USB 저장 장치와 통신하는 데 적합한 장치 드라이버를 로드하도록 지원합니다. SCSI는 USB MSC 저장 장치에 가장 일반적으로 사용되는 프로토콜입니다. 저희는 GSDK 사용자가 바로 사용할 수 있는 MSC SCSI 하위 클래스 구현을 제공합니다.
SCSI는 컴퓨터와 주변 장치 간의 통신을 처리하는 표준 집합입니다. 이러한 표준에는 명령, 프로토콜, 전기 인터페이스 및 광 인터페이스가 포함됩니다. USB와 같이 다른 하드웨어 인터페이스를 사용하는 저장 장치는 SCSI 명령을 사용하여 장치/호스트 정보를 얻고, 장치의 작동을 제어하며, 저장 매체의 데이터 블록을 전송합니다.
SCSI 명령은 광범위한 장치 유형과 기능을 지원하므로, 장치에는 이러한 명령의 하위 집합이 필요합니다. 일반적으로 기본적인 통신에는 다음 명령이 필요합니다.
문의 읽기 용량(10) 읽기(10) 요청 감지 테스트 장치 준비 쓰기(10)
USB 장치 MSC 클래스 리소스는 코어에서 필요합니다.
sl_usbd_msc_add_to_configuration() 함수를 통해 USB 구성에 MSC 클래스 인스턴스를 추가할 때마다 코어에서 다음 리소스가 할당됩니다.
의지
인터페이스 대체 인터페이스 엔드포인트 인터페이스 그룹
수량
1 1 2 0
해당 숫자는 구성당입니다. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY 및 SL_USBD_DESCRIPTOR_QUANTITY 구성 값을 설정할 때 클래스가 추가될 구성 수를 고려해야 합니다. SL_USBD_OPEN_ENDPOINTS_QUANTITY 구성 값의 경우, 호스트에서 구성을 설정할 때만 엔드포인트가 열리므로 클래스 인스턴스에 필요한 엔드포인트 수만 고려하면 됩니다.
USB 장치 MSC 클래스 구성
MSC 클래스를 구성하는 데는 두 가지 구성 매개변수 그룹이 사용됩니다.
USB 장치 MSC 클래스 애플리케이션별 구성 USB 장치 MSC 클래스 논리 장치 구성
USB 장치 MSC 클래스 애플리케이션별 구성
클래스 컴파일 타임 구성 클래스 인스턴스 생성
저작권 © 2025 Silicon Laboratories. 판권 소유.
45/174
위에view
클래스 컴파일 타임 구성
Silicon Labs USB 장치 MSC 클래스와 SCSI 하위 클래스는 sl_usbd_core_config.h에 있는 #define을 통해 컴파일 시 구성 가능합니다. file.
표 - 일반 구성 상수
구성 이름
설명
SL_USBD_MSC_CLASS_INST 함수 호출을 통해 할당할 클래스 인스턴스 수
ANCE_QUANTITY
sl_usbd_msc_scsi_create_instance() .
SL_USBD_MSC_CONFIGURA 클래스 인스턴스가 호출을 통해 추가될 수 있는 구성 번호
수량
sl_usbd_msc_scsi_add_to_configuration() 함수.
SL_USBD_MSC_LUN_QUANT 호출을 통해 추가할 클래스 인스턴스당 논리 단위 수
아이티
sl_usbd_msc_scsi_lun_add() 함수.
SL_USBD_MSC_SCSI_64_BIT 64비트 논리 블록 주소(LBA)에 대한 지원을 활성화하거나 비활성화합니다.
_LBA_EN
SL_USBD_MSC_DATA_BUFF 클래스 인스턴스당 데이터 버퍼 크기(바이트) ER_SIZE
기본값
2
1
2
0
512
클래스 인스턴스 생성
USB 장치 MSC SCSI 클래스 인스턴스를 생성하려면 sl_usbd_msc_scsi_create_instance() 함수를 호출합니다. 이 함수는 아래에 설명된 구성 인수 하나를 사용합니다.
p_scsi_콜백
p_scsi_callbacks는 sl_usbd_msc_scsi_callbacks_t 유형의 구성 구조체에 대한 포인터입니다. 일반적인 USB 장치 클래스 콜백인 연결/연결 해제 외에도, 논리 장치에서 이벤트가 발생할 때 호출되는 선택적 콜백 함수 집합을 MSC 클래스에 제공합니다. 콜백이 필요하지 않으면 이 인수에 널 포인터(NULL)를 전달할 수 있습니다.
아래 표에서는 이 구성 구조에서 사용할 수 있는 각 구성 필드를 설명합니다.
표 – sl_usbd_msc_scsi_callbacks_t 구성 구조
전지
설명
.할 수 있게 하다
USB 클래스 인스턴스가 성공적으로 활성화되면 호출됩니다.
.disable USB 클래스 인스턴스가 비활성화되면 호출됩니다.
.host_eject 논리 장치가 호스트에서 제거될 때 호출되는 함수입니다.
함수 서명
void app_usbd_msc_scsi_enable(uint8_t class_nbr);
app_usbd_msc_scsi_disable(uint8_t class_nbr); app_usbd_msc_scsi_host_eject(uint8_t class_nbr, uint8_t lu_nbr);를 호출합니다.
USB 장치 MSC 클래스 논리 장치 구성
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에 대한 포인터입니다. 저장 장치 드라이버에 대한 자세한 내용은 USB 장치 MSC 클래스 저장 장치 드라이버를 참조하세요.
.ve nd 또는 r_id _ p tr
.제품_ID_포인트
.pro d uct_ re v isi on_level .is_ read _only
논리 장치의 공급업체 ID를 포함하는 문자열을 가리키는 포인터입니다. 최대 길이는 8자입니다. 논리 장치의 제품 ID를 포함하는 문자열을 가리키는 포인터입니다. 최대 길이는 16자입니다. 제품 개정 수준입니다.
논리 단위가 읽기 전용으로 간주되어야 하는지 여부를 나타내는 플래그입니다. view 호스트의 (참) 또는 (거짓).
USB 장치 MSC 클래스 프로그래밍 가이드
이 섹션에서는 MSC 클래스를 사용하는 방법을 설명합니다.
USB 장치 MSC 클래스 초기화 장치에 USB 장치 MSC SCSI 클래스 인스턴스 추가 USB 장치 MSC 클래스 논리 장치 처리
USB 장치 MSC 클래스 초기화
장치에 MSC SCSI 클래스 기능을 추가하려면 먼저 sl_usbd_msc_init() 및 sl_usbd_msc_scsi_init() 함수를 호출하여 MSC 기본 클래스와 SCSI 하위 클래스를 초기화합니다.
전직amp아래는 sl_usbd_msc_init() 및 sl_usbd_msc_scsi_init()를 호출하는 방법을 보여줍니다.
Example – sl_usbd_msc_init() 및 sl_usbd_msc_scsi_init() 호출
sl_status_t 상태;
status = sl_usbd_msc_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
status = sl_usbd_msc_scsi_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
장치에 USB 장치 MSC SCSI 클래스 인스턴스 추가
장치에 MSC SCSI 클래스 기능을 추가하려면 먼저 인스턴스를 생성한 다음 장치 구성에 추가하세요. 인스턴스에 최소 하나의 논리 장치를 추가해야 합니다.
MSC SCSI 클래스 인스턴스 생성
sl_usbd_msc_scsi_create_instance() 함수를 호출하여 MSC SCSI 클래스 인스턴스를 생성합니다.
전직amp아래 코드는 기본 인수를 사용하여 sl_usbd_msc_scsi_create_instance()를 호출하는 방법을 보여줍니다. sl_usbd_msc_scsi_create_instance()에 전달할 구성 인수에 대한 자세한 내용은 USB 장치 MSC 클래스 애플리케이션별 구성을 참조하세요.
Example – sl_usbd_msc_scsi_create_instance() 호출
저작권 © 2025 Silicon Laboratories. 판권 소유.
47/174
위에view
uint8_t class_nbr; sl_status_t 상태;
sl_usbd_msc_scsi_콜백_t app_usbd_msc_scsi_콜백 = { .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)
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
(1) sl_usbd_msc_scsi_create_instance()에서 반환된 구성에 추가할 클래스 번호입니다. (32) 구성 번호(여기서는 Full-Speed 구성에 추가).
USB 장치 MSC 클래스 논리 장치 처리
논리 장치 추가, 저장 매체 연결/분리
논리 장치 추가
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_객체_ptr = NULL;
sl_usbd_msc_scsi_lun_info_t lu_info;
sl_상태_t
상태;
lu_info.sl_usbd_msc_scsi_lun_api_t = &app_usbd_scsi_스토리지_블록_장치_api;
lu_info.vendor_id_ptr
= “실리콘랩스”;
lu_info.제품_id_ptr
= "블록 장치 examp르”;
lu_info.제품_개정_수준 = 0x1000u;
lu_info.is_read_only
= 거짓;
상태 = sl_usbd_msc_scsi_lun_add(class_nbr, &lu_info, &lu_object_ptr);
if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */ }
저장 매체 연결/분리
논리 유닛을 추가한 후에는 호스트 측에서 사용할 수 있도록 저장 매체를 연결해야 합니다. MSC 클래스는 논리 유닛에 대한 저장 매체 연결을 제어하는 두 가지 함수, sl_usbd_msc_scsi_lun_attach()와 sl_usbd_msc_scsi_lun_detach()를 제공합니다. 이 함수들을 사용하면 필요한 경우 임베디드 애플리케이션에서 다시 액세스하기 위해 저장 장치를 제거하는 과정을 에뮬레이션할 수 있습니다.
전직amp아래는 sl_usbd_msc_scsi_lun_attach() 및 sl_usbd_msc_scsi_lun_detach() 함수를 사용하는 방법을 보여줍니다.
Example – 미디어 연결/분리
sl_status_t 상태;
status = sl_usbd_msc_scsi_lun_attach(lu_object_ptr); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
…
(1)
상태 = sl_usbd_msc_scsi_lun_detach(lu_object_ptr); if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
…
(2)
상태 = sl_usbd_msc_scsi_lun_attach(lu_object_ptr) if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
…
(3)
(1) 이 순간부터 MSC 장치가 호스트에 연결되면 저장 매체에 접근할 수 있습니다.
(2) MSC 장치가 호스트에 연결된 경우 미디어는 사용할 수 없는 것으로 표시됩니다. 이때 내장 애플리케이션에서 미디어에 대한 작업을 수행할 수 있습니다.
(3) 다시 말해서, MSC 장치가 호스트에 연결되어 있으면 저장 매체가 연결된 것으로 나타납니다.
USB 장치 MSC 클래스 스토리지 드라이버
USB 장치 MSC 클래스는 저장 매체와 통신하기 위해 저장 장치 드라이버가 필요합니다. 현재 Silicon Labs는 드라이버를 제공하지 않습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
49/174
위에view
드라이버 AI는 typedef sl_usbd_msc_scsi_lun_api_t로 정의됩니다. sl_usbd_msc_scsi_lun_api_t v ri ble은 sl_usbd_msc_scsi_lun_add()로 논리 l 유닛을 추가할 때 sl_usbd_msc_scsi_lun_info_t v ri ble에 포함되어야 합니다. 구조체에 대한 자세한 내용은 USB 장치 MSC SCSI API 섹션을 참조하십시오. 저장 장치 드라이버 구현은 RAM의 섹터 배열처럼 간단할 수 있습니다. 일반적인 섹터 크기(즉, 블록 크기)는 대용량 저장 장치의 경우 512, CD-ROM의 경우 2048입니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
50/174
위에view
위에view
USB 장치 공급업체 클래스
USB 장치 공급업체 클래스 이상view USB 장치 공급업체 클래스 리소스 요구 사항(Core USB 장치 공급업체 클래스 구성) USB 장치 공급업체 클래스 프로그래밍 가이드 공급업체 클래스를 사용하면 독점 프로토콜을 구현할 수 있는 공급업체별 장치를 빌드할 수 있습니다. 이 클래스는 호스트와 장치 간에 데이터를 전송하기 위해 한 쌍의 대량 엔드포인트에 의존합니다. 대량 전송은 대량의 비정형 데이터를 전송하는 데 편리하며 오류 감지 및 재시도 메커니즘을 사용하여 안정적인 데이터 교환을 제공합니다. 공급업체 클래스는 대량 엔드포인트 외에도 선택적 쌍의 인터럽트 엔드포인트를 사용할 수 있습니다. 모든 운영 체제(OS)는 공급업체 클래스를 처리하는 드라이버가 있는 경우 공급업체 클래스와 함께 작동할 수 있습니다. OS에 따라 드라이버는 네이티브 또는 공급업체별일 수 있습니다. 예를 들어 Microsoft Windows®에서 애플리케이션은 Microsoft에서 제공하는 WinUSB 드라이버와 상호 작용하여 공급업체 장치와 통신합니다.
USB 장치 공급업체 클래스 이상view
그림 - Windows 호스트와 공급업체 클래스 간의 일반 아키텍처는 공급업체 클래스를 사용하는 호스트와 장치 간의 일반 아키텍처를 보여줍니다. 이 예제에서는amp호스트 운영체제는 MS Windows입니다.
그림 – MS Windows 호스트와 공급업체 클래스 간의 일반 아키텍처
MS Windows 측에서 애플리케이션은 USB 라이브러리와 상호 작용하여 공급업체 장치와 통신합니다. libusb와 같은 라이브러리는 장치 및 관련 파이프를 관리하고 제어, 벌크 및 인터럽트 엔드포인트를 통해 장치와 통신하는 API를 제공합니다.
장치 측면에서 Vendor 클래스는 다음과 같은 엔드포인트로 구성됩니다.
기본 엔드포인트라고 하는 제어 IN 및 OUT 엔드포인트 쌍. 벌크 IN 및 OUT 엔드포인트 쌍.
저작권 © 2025 Silicon Laboratories. 판권 소유.
51/174
위에view
인터럽트 IN 및 OUT 엔드포인트 쌍입니다. 이 쌍은 선택 사항입니다. 아래 표는 각 엔드포인트의 사용법을 보여줍니다.
표 – 공급업체 클래스 엔드포인트 사용
종점 방향
컨트롤 인
제어
밖으로
대량 IN
장치-호스트
>호스트-디바이스
장치-호스트
대량 아웃
인터럽트 IN
방해하다
밖으로
호스트-디바이스
장치-호스트
호스트-디바이스
용법
열거형에 대한 표준 요청과 공급업체별 요청.
열거형에 대한 표준 요청과 공급업체별 요청.
원시 데이터 통신. 데이터는 독점 프로토콜에 따라 구성될 수 있습니다.
원시 데이터 통신. 데이터는 독점 프로토콜에 따라 구성될 수 있습니다.
원시 데이터 통신 또는 알림. 데이터는 독점 프로토콜에 따라 구성될 수 있습니다. 원시 데이터 통신 또는 알림. 데이터는 독점 프로토콜에 따라 구성될 수 있습니다.
장치 애플리케이션은 벌크 및 인터럽트 엔드포인트를 사용하여 호스트와 데이터를 주고받을 수 있습니다. 호스트가 전송한 공급업체별 요청을 디코딩하는 데는 기본 엔드포인트만 사용할 수 있습니다. 표준 요청은 Silicon Labs USB 장치의 코어 계층에서 내부적으로 관리됩니다.
USB 장치 공급업체 클래스 리소스 요구 사항(Core)
sl_usbd_vendor_add_to_configuration() 함수를 통해 구성에 공급업체 클래스 인스턴스를 추가할 때마다 코어에서 다음 리소스가 할당됩니다.
의지
인터페이스 대체 인터페이스 엔드포인트 인터페이스 그룹
수량
1 1 2 (인터럽트 엔드포인트를 활성화한 경우 4) 0
해당 숫자는 구성당입니다. SL_USBD_INTERFACE_QUANTITY, SL_USBD_ALT_INTERFACE_QUANTITY, SL_USBD_INTERFACE_GROUP_QUANTITY 및 SL_USBD_DESCRIPTOR_QUANTITY 구성 값을 설정할 때 클래스가 추가될 구성 수를 고려해야 합니다. SL_USBD_OPEN_ENDPOINTS_QUANTITY 구성 값의 경우, 호스트에서 구성을 설정할 때만 엔드포인트가 열리므로 클래스 인스턴스에 필요한 엔드포인트 수만 고려하면 됩니다.
USB 장치 공급업체 클래스 구성
Vendor 클래스를 구성하는 데는 두 가지 구성 매개변수 그룹이 사용됩니다.
USB 장치 공급업체 클래스 애플리케이션별 구성 USB 장치 공급업체 클래스 인스턴스 구성
USB 장치 공급업체 클래스 애플리케이션별 구성
먼저, Silicon Labs USB 장치 Vendor 클래스 모듈을 사용하려면 애플리케이션 요구에 맞게 Vendor 컴파일 타임 구성 정의를 조정해야 합니다. 이 정의들은 sl_usbd_core_config.h 헤더 파일 내에 다시 정리되어 있습니다. file 공급업체 섹션 아래에 있습니다. 수량 구성의 목적은 USB 장치 모듈에 할당할 USB 공급업체 객체의 수를 알리는 것입니다.
아래 표에서는 각 구성 정의를 설명합니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
52/174
위에view
표 - USB 장치 공급업체 구성 정의
구성 이름
설명
기본값
SL_USBD_VENDOR_CLASS_INSTANCE_QUANTITY 2 함수 sl_usbd_vendor_create_instance()를 호출하여 할당할 클래스 인스턴스의 수입니다.
SL_USBD_VENDOR_CONFIGURATION_QUANTITY 구성 개수입니다. 공급업체 클래스 인스턴스는 sl_usbd_vendor_add_to_configuration() 함수를 호출하여 하나 이상의 구성에 추가할 수 있습니다.
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_callbacks
p_vendor_callbacks는 콜백 함수 구조체 변수에 대한 포인터입니다. 클래스별 제어 요청을 처리하도록 지정할 수 있습니다. 클래스별 요청을 사용하지 않거나 알림을 활성화/비활성화해야 하는 경우 이 값을 NULL로 설정할 수 있습니다.
전직amp아래는 클래스별 요청 핸들러의 예상 시그니처를 제공합니다.
Example – 클래스별 요청 함수의 서명
void app_usbd_vendor_req_handle(uint8_t
클래스_번호, (1)
const sl_usbd_setup_req_t *p_setup_req); (2)
sl_usbd_vendor_callbacks_t app_usbd_vendor_callback_functions =
{
.enable = NULL, .disable = NULL, .setup_req = app_usbd_vendor_req_handle,
};
(1) 공급업체 클래스 인스턴스 번호.
저작권 © 2025 Silicon Laboratories. 판권 소유.
53/174
위에view
(2) 호스트로부터 수신된 설정 요청에 대한 포인터.
USB 장치 공급업체 클래스 프로그래밍 가이드
이 섹션에서는 Vendor 클래스를 사용하는 방법을 설명합니다. USB 장치 Vendor 클래스 초기화, 장치에 USB 장치 Vendor 클래스 인스턴스 추가, USB 장치 Vendor 클래스를 사용한 통신
USB 장치 공급업체 클래스 초기화
장치에 공급업체 클래스 기능을 추가하려면 먼저 USBD_Vendor_Init() 함수를 호출하여 클래스를 초기화합니다.amp아래는 sl_usbd_vendor_init()를 호출하는 방법을 보여줍니다.
Example – sl_usbd_vendor_init() 호출
sl_status_t 상태;
status = sl_usbd_vendor_init(); if (status ! SL_STATUS_OK) { /* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */ }
장치에 USB 장치 공급업체 클래스 인스턴스 추가
장치에 공급업체 클래스 기능을 추가하려면 먼저 인스턴스를 만든 다음 장치 구성에 추가해야 합니다.
공급업체 클래스 인스턴스 생성 장치 구성에 공급업체 클래스 인스턴스 추가
공급업체 클래스 인스턴스 생성
sl_usbd_vendor_create_instance() 함수를 호출하여 Vendor 클래스 인스턴스를 생성합니다.amp아래 코드는 기본 인수를 사용하여 sl_usbd_vendor_create_instance()를 호출하는 방법을 보여줍니다. sl_usbd_vendor_create_instance()에 전달할 구성 인수에 대한 자세한 내용은 USB 장치 공급업체 클래스 인스턴스 구성을 참조하세요.
Example – sl_usbd_vendor_create_instance() 호출
uint8_t class_nbr; sl_status_t 상태;
상태 = sl_usbd_vendor_create_instance(false,
(1)
0u,
(2)
app_usbd_vendor_callback_functions, (3)
&class_nbr);
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
(1) 이 클래스 인스턴스에는 인터럽트 엔드포인트가 없습니다. (2) 인터럽트 엔드포인트가 비활성화되어 있으므로 간격이 무시됩니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
54/174
위에view
(3) 애플리케이션의 일부로, 공급업체별 클래스 요청을 처리하는 콜백 함수입니다. 자세한 내용은 USB 장치 공급업체 클래스를 사용한 통신을 참조하십시오. 장치 구성에 공급업체 클래스 인스턴스 추가 공급업체 클래스 인스턴스를 생성한 후 USBD_Vendor_ConfigAdd() 함수를 호출하여 구성에 추가할 수 있습니다.amp아래는 기본 인수를 사용하여 sl_usbd_vendor_add_to_configuration()을 호출하는 방법을 보여줍니다.
Example – sl_usbd_vendor_add_to_configuration() 호출
sl_status_t 상태;
상태 = sl_usbd_vendor_add_to_configuration(class_nbr,
(1)
config_nbr_fs);
(2)
if (상태 ! SL_STATUS_OK) {
/* 오류가 발생했습니다. 여기에 오류 처리를 추가해야 합니다. */
}
(1) sl_usbd_vendor_create_instance()에서 반환된 구성에 추가할 클래스 번호입니다. (2) 구성 번호(여기서는 Full-Speed 구성에 추가).
USB 장치 공급업체 클래스를 사용하여 통신
일반 동기 통신 비동기 통신 공급업체 요청 일반 Vendor 클래스는 호스트와 통신하기 위한 다음 함수를 제공합니다. 함수 매개변수에 대한 자세한 내용은 USB 장치 공급업체 API를 참조하세요.
표 – 공급업체 통신 API 요약
함수 이름
sl_usb d _v e nd o r_read _bulk_sy nc() sl_usb d _v e nd o r_write _bulk_sy nc() sl_usb d _v e nd o r_read _bulk_asy nc() sl_usb d _v e nd o r_write _bulk_asy nc() sl_usb d _v e nd o r_read _inter rrup t_sy nc() sl_usb d _v e nd o r_write _inter rrup t_sy nc() sl_usb d _v e nd o r_read _inter rrup t_asy nc
()
sl_usb d _v e nd o r_write _인터럽트_asy nc
()
작업: 대량 OUT 엔드포인트를 통해 호스트에서 데이터를 수신합니다. 이 함수는 차단 중입니다. 대량 IN 엔드포인트를 통해 호스트로 데이터를 전송합니다. 이 함수는 차단 중입니다. 대량 OUT 엔드포인트를 통해 호스트에서 데이터를 수신합니다. 이 함수는 비차단 중입니다. 대량 IN 엔드포인트를 통해 호스트로 데이터를 전송합니다. 이 함수는 비차단 중입니다. 인터럽트 OUT 엔드포인트를 통해 호스트에서 데이터를 수신합니다. 이 함수는 차단 중입니다. 인터럽트 IN 엔드포인트를 통해 호스트로 데이터를 전송합니다. 이 함수는 차단 중입니다. 인터럽트 OUT 엔드포인트를 통해 호스트에서 데이터를 수신합니다. 이 함수는 비차단 중입니다.
블로킹.
인터럽트 IN 엔드포인트를 통해 호스트로 데이터를 전송합니다. 이 함수는 비차단 함수입니다.
공급업체 요청은 호스트와 통신하는 또 다른 방법입니다. 호스트가 전송한 공급업체 요청을 관리할 때, 애플리케이션은 제어 엔드포인트를 사용하여 호스트와 데이터를 주고받을 수 있습니다. sl_usbd_vendor_create_instance()의 매개변수로 전달되는 애플리케이션 콜백을 제공해야 합니다. 동기 통신
저작권 © 2025 Silicon Laboratories. 판권 소유.
55/174
위에view
동기 통신은 전송이 차단됨을 의미합니다. 함수가 호출되면 애플리케이션은 오류 발생 여부와 관계없이 전송이 완료될 때까지 차단됩니다. 무한 대기를 방지하기 위해 시간 제한을 지정할 수 있습니다. examp아래의 그림은 대량 OUT 엔드포인트를 사용하여 호스트로부터 데이터를 수신하고 대량 IN 엔드포인트를 사용하여 호스트로 데이터를 전송하는 읽기 및 쓰기를 보여줍니다.
Example – 동기식 대량 읽기 및 쓰기
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
단위32_t
xfer_len;
sl_상태_t
상태;
상태 = sl_usbd_vendor_read_bulk_sync(class_nbr,
(1)
(공백 *)&rx_buf[0],
(2)
2u,
0u,
(3)
&xfer_len);
if (상태 ! SL_STATUS_OK) {
/* $$$$ 오류를 처리합니다. */
}
상태 = sl_usbd_vendor_write_bulk_sync( class_nbr,
(1)
(공백 *)&tx_buf[0],
(4)
2u,
0u,
(3)
거짓,
(5)
&xfer_len);
if (상태 ! SL_STATUS_OK) {
/* $$$$ 오류를 처리합니다. */
}
(1) sl_usbd_vendor_create_instance()로 생성된 클래스 인스턴스 번호는 Vendor 클래스에 대한 내부 참조를 제공하여 전송을 적절한 대량 OUT 또는 IN 엔드포인트로 라우팅합니다.
(2) 애플리케이션은 함수에 제공된 버퍼가 모든 데이터를 수용할 수 있을 만큼 충분히 큰지 확인해야 합니다. 그렇지 않으면 동기화 문제가 발생할 수 있습니다.
(3) 무한 차단 상황을 피하기 위해 밀리초 단위로 표현되는 시간 제한을 지정할 수 있습니다. 809 값을 지정하면 애플리케이션 작업이 영원히 대기합니다.
(4) 응용 프로그램은 초기화된 전송 버퍼를 제공합니다.
(5) 이 플래그가 true로 설정되고 전송 길이가 엔드포인트 최대 패킷 크기의 배수인 경우 장치 스택은 전송 종료를 알리기 위해 호스트에 길이가 0인 패킷을 보냅니다.
인터럽트 엔드포인트 통신 함수인 sl_usbd_vendor_read_interrupt_sync() 및 sl_usbd_vendor_write_interrupt_sync()의 사용은 Ex에 제시된 대량 엔드포인트 통신 함수와 유사합니다.ample – 동기식 대량 읽기 및 쓰기.
비동기 통신
비동기 통신은 전송이 비차단(nonblocking) 방식으로 이루어짐을 의미합니다. 함수가 호출되면 애플리케이션은 전송 정보를 장치 스택에 전달하고 차단되지 않습니다. USB 버스를 통해 전송이 진행되는 동안에도 다른 애플리케이션 처리를 수행할 수 있습니다. 전송이 완료되면 장치 스택에서 콜백 함수를 호출하여 애플리케이션에 전송 완료를 알립니다. examp아래 그림은 비동기 읽기와 쓰기를 보여줍니다.
Example – 비동기 대량 읽기 및 쓰기
저작권 © 2025 Silicon Laboratories. 판권 소유.
56/174
위에view
void app_usbd_vendor_comm(uint8_t class_nbr)
{
__ALIGNED(4) uint8_t rx_buf[2];
__ALIGNED(4) uint8_t tx_buf[2];
sl_상태_t
상태;
상태 = sl_usbd_vendor_read_bulk_async(class_nbr,
(공백 *)&rx_buf[0],
(2)
2u,
app_usbd_vendor_rx_completed,
NULL);
(4)
if (상태 ! SL_STATUS_OK) {
/* $$$$ 오류를 처리합니다. */
}
상태 = sl_usbd_vendor_write_bulk_async(class_nbr,
(공백 *)&tx_buf[0],
(5)
2u,
app_usbd_vendor_tx_완료됨,
Null
(4)
거짓);
(6)
if (상태 ! SL_STATUS_OK) {
/* $$$$ 오류를 처리합니다. */
}
}
(1) (3)
(1) (3)
정적 무효 app_usbd_vendor_rx_completed(uint8_t class_nbr,
(3)
무효 *p_buf,
uint32_t 버퍼 길이,
uint32_t xfer_len,
void *p_callback_arg,
sl_status_t 상태)
{
if (상태 ! SL_STATUS_OK) {
/* $$$$ 일부 처리를 수행합니다. */
} 또 다른 {
/* $$$$ 오류를 처리합니다. */
}
}
정적 무효 app_usbd_vendor_tx_completed(uint8_t class_nbr,
(3)
무효 *p_buf,
uint32_t 버퍼 길이,
uint32_t xfer_len,
void *p_callback_arg,
sl_status_t 상태)
{
if (상태 ! SL_STATUS_OK) {
/* $$$$ 일부 처리를 수행합니다. */
} 또 다른 {
/* $$$$ 오류를 처리합니다. */
}
}
(1) 클래스 인스턴스 번호는 Vendor 클래스에 대한 내부 참조를 제공하여 전송을 적절한 대량 OUT 또는 IN 엔드포인트로 라우팅합니다. (2) 애플리케이션은 제공된 버퍼가 모든 데이터를 수용할 만큼 충분히 큰지 확인해야 합니다. 그렇지 않으면 동기화 문제가 발생할 수 있습니다. (3) 애플리케이션은 매개변수로 전달되는 콜백 함수 포인터를 제공합니다. 전송이 완료되면 장치 스택은 이 콜백 함수를 호출하여 애플리케이션이 전송 결과를 분석하여 전송을 완료할 수 있도록 합니다. 예를 들어, 읽기 작업이 완료되면 애플리케이션은 수신된 데이터에 대한 처리를 수행할 수 있습니다. 쓰기 작업이 완료되면 애플리케이션은 쓰기가 성공했는지 여부와 전송된 바이트 수를 표시할 수 있습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
57/174
위에view
(4) 콜백과 관련된 인수도 전달할 수 있습니다. 그러면 콜백 컨텍스트에서 일부 비공개 정보를 검색할 수 있습니다. (5) 애플리케이션은 초기화된 전송 버퍼를 제공합니다. (6) 이 플래그가 true로 설정되고 전송 길이가 엔드포인트 최대 패킷 크기의 배수인 경우, 장치 스택은 전송 종료를 알리기 위해 길이가 0인 패킷을 호스트로 전송합니다. 인터럽트 엔드포인트 통신 함수인 sl_usbd_vendor_read_interrupt_async() 및 sl_usbd_vendor_write_interrupt_async()의 사용은 Ex에서 제시된 대량 엔드포인트 통신 함수와 유사합니다.amp비동기 대량 읽기 및 쓰기.
공급업체 요청
USB 2.0 사양은 표준, 클래스, 벤더의 세 가지 유형의 요청을 정의합니다. 모든 표준 요청은 코어 계층에서 직접 처리되지만, 클래스 요청은 해당 클래스에 의해 관리됩니다. 벤더 요청은 벤더 클래스에서 처리할 수 있습니다. 벤더 요청을 처리하려면 sl_usbd_vendor_create_instance()의 매개변수로 애플리케이션 콜백을 제공해야 합니다. USB 장치가 벤더 요청을 수신하면 해당 요청은 올바르게 디코딩되어야 합니다. examp아래 그림은 공급업체 요청 디코딩을 보여줍니다. 데이터 전송 중에 특정 요청은 호스트로부터 수신하거나 호스트로 전송해야 할 수 있습니다.tag제어 전송의 e. 데이터가 없는 경우tage가 있는 경우 설정 패킷만 디코딩하면 됩니다. 이 예ample는 세 가지 유형의 데이터를 보여줍니다.tage 관리: 데이터 없음, 데이터 출력, 데이터 입력.
Example – 공급업체 요청 디코딩
저작권 © 2025 Silicon Laboratories. 판권 소유.
58/174
위에view
#앱 공급업체 요청 없음 데이터 정의
0x01u
#정의 APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST 0x02u
#app_vendor_req_send_data_to_host 0x03u를 정의합니다.
#APP_VENDOR_REQ_DATA_BUF_SIZE 정의
50유로
정적 uint8_t app_vendor_req_buf[APP_VENDOR_REQ_DATA_BUF_SIZE];
정적 bool app_usbd_vendor_req(uint8_t
클래스_번호,
const sl_usbd_setup_req_t *p_setup_req)
(1)
{
bool 유효;
sl_status_t 상태;
uint16_t 요청_길이;
uint32_t xfer_len;
(공백)클래스_nbr;
switch(p_setup_req->bRequest) { case APP_VENDOR_REQ_NO_DATA: 유효 = true; 중단;
(2) (3)
케이스 APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:
(4)
req_len = p_setup_req->wLength;
if (req_len > APP_VENDOR_REQ_DATA_BUF_SIZE) {
// 데이터를 수신할 공간이 충분하지 않습니다.
반환(false);
}
// Control OUT EP를 통해 데이터를 수신합니다. // 전송 완료를 영원히 기다립니다. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, &xfer_len); if (상태 ! SL_STATUS_OK) { 유효 = false; } else { 유효 = true; } break;
APP_VENDOR_REQ_SEND_DATA_TO_HOST 케이스:
(5)
req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;
// buf를 패턴으로 채웁니다. Mem_Set((void *)&AppVendorReqBuf[0u],
'ㅏ',
req_len);
// Control IN EP를 통해 데이터를 보냅니다. // 전송 완료를 영원히 기다립니다. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len); if (상태 !SL_STATUS_OK) { 유효 = DEF_FAIL; } else { 유효 = DEF_OK; } break;
기본:
(6)
// 요청이 지원되지 않습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
59/174
위에view
유효 =참;중단;
case APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST:(4) req_len = p_setup_req->wLength;if(req_len > APP_VENDOR_REQ_DATA_BUF_SIZE){// 데이터를 수신할 공간이 충분하지 않습니다.return(false);}// Control OUT EP를 통해 데이터를 수신합니다.// 전송 완료를 영원히 기다립니다. status = sl_usbd_core_read_control_sync((void *)&app_vendor_req_buf[0u],
req_len,0u,&xfer_len);if(상태 ! SL_STATUS_OK){ 유효 =false;}else{ 유효 =true;}중단;
case APP_VENDOR_REQ_SEND_DATA_TO_HOST:(5) req_len = APP_VENDOR_REQ_DATA_BUF_SIZE;// 패턴으로 buf를 채웁니다.Mem_Set((void *)&AppVendorReqBuf[0u],'A',
req_len);// Control IN EP를 통해 데이터를 보냅니다.// 전송 완료를 영원히 기다립니다. status = sl_usbd_core_write_control_sync((void *)&app_vendor_req_buf[0u],
req_len, 0u, false, &xfer_len);if(상태 ! SL_STATUS_OK){ 유효 = DEF_FAIL;}else{ 유효 = DEF_OK;}break;
기본값:(6)// 요청이 지원되지 않습니다. valid = DEF_FAIL;break;}return(valid);}
(1) 코어는 설정 패킷 내용을 애플리케이션에 전달합니다. sl_usbd_setup_req_t 구조체는 USB 2.0 사양에 정의된 것과 동일한 필드를 포함합니다(자세한 내용은 해당 사양의 "9.3 USB 장치 요청" 섹션을 참조하십시오).
typedef 구조체 {
uint8_t bmRequestType; /* 요청의 특성.
*/
uint8_t bRequest; /* 특정 요청.
*/
uint16_t wValue; /* 요청에 따라 다릅니다.
*/
uint16_t wIndex; /* 요청에 따라 다름. 일반적으로 인덱스로 사용됨.*/
uint16_t wLength; /* 데이터가 s인 경우 전송 길이tage 현재.
*/
} sl_usbd_설정_요구_t;
(2) 요청을 결정합니다. 다른 요청을 사용하는 경우 switch 문을 사용할 수 있습니다. 이 예제에서는ample, 세 가지 유형의 데이터에 해당하는 세 가지 다른 요청이 있습니다.tag예: APP_VENDOR_REQ_NO_DATA, APP_VENDOR_REQ_RECEIVE_DATA_FROM_HOST, APP_VENDOR_REQ_SEND_DATA_TO_HOST.
(3) 데이터가 없는 경우tage가 존재하면 다른 필드만 디코딩하면 됩니다. 데이터 s가 있는 경우tage 여부는 wLength 필드가 null이 아니거나 null인지로 표시됩니다.
(4) 호스트가 장치로 데이터를 전송하는 경우 sl_usbd_core_read_control_sync() 함수를 호출해야 합니다. 제공된 버퍼는 최대 wLength 바이트를 포함할 수 있어야 합니다. 오류가 발생하면 상태 메시지를 중단할 코어에 false를 반환합니다.tag제어 전송의 e는 호스트에게 요청을 처리할 수 없음을 나타냅니다. 성공하면 true가 반환됩니다.
(5) 호스트가 장치로부터 데이터를 수신하면 sl_usbd_core_write_control_sync() 함수를 호출해야 합니다. 오류가 발생하면 상태 s를 중단할 코어에 false를 반환합니다.tag제어 전송의 e는 호스트에게 요청을 처리할 수 없음을 나타냅니다. 성공하면 true가 반환됩니다.
(6) 이 예에서amp인식되지 않는 모든 요청은 코어에 false를 반환하여 표시됩니다. 이렇게 하면 데이터 또는 상태 s가 중단됩니다.tag호스트에 요청이 지원되지 않는다는 것을 나타내는 제어 전송의 e입니다.
호스트는 호스트 벤더 애플리케이션을 통해 벤더 요청을 전송합니다. libusb와 같은 USB 라이브러리를 사용하면 사용자 지정 호스트 벤더 애플리케이션을 개발하는 데 도움이 될 수 있습니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
60/174
API 문서
API 문서
API 문서
모듈 목록
USB 장치 API USB 장치 ACM API USB 장치 CDC API USB 장치 코어 API USB 장치 HID API USB 장치 MSC API USB 장치 MSC SCSI API USB 장치 공급업체 API
설명
USB 장치 API USB 장치 ACM API USB 장치 CDC API USB 장치 코어 API USB 장치 HID API USB 장치 MSC API USB 장치 MSC SCSI API USB 장치 공급업체 API
저작권 © 2025 Silicon Laboratories. 판권 소유.
61/174
USB 장치 API
USB 장치 API
USB 장치 API
USB 장치 API.
모듈
USB 장치 ACM API USB 장치 CDC API USB 장치 코어 API USB 장치 HID API USB 장치 MSC API USB 장치 MSC SCSI API USB 장치 공급업체 API
저작권 © 2025 Silicon Laboratories. 판권 소유.
62/174
USB 장치 ACM API
USB 장치 ACM API
USB 장치 ACM API
USB 장치 CDC ACM API.
모듈
sl_usbd_cdc_ cm_line_coding_t sl_usbd_cdc_acm_callbacks_t
기능
sl_상태_t sl_상태_t
sl_상태_t sl_상태_t sl_상태_t
sl_상태_t
sl_상태_t
sl_상태_t
sl_상태_t sl_상태_t sl_상태_t sl_상태_t sl_상태_t
sl_usbd_cdc_ cm_init(void)
전역 변수.
ssll__uussbbdd__ccddcc__aaccmm__ccraellabtaec_kins_stta*npc_ea(cumin_tc1a6l_lbtalicnkes_,sutaintte8__int t*eprv_saul,bucinlats1s6__nt bcra)ll_mgmt_capabilities,
CDC ACM 직렬 에뮬레이션 하위 클래스의 새 인스턴스를 추가합니다.
aaaa sl_usbd_cdc_ cm_ dd_to_configur tion(uint8_t subcl ss_nbr, uint8_t config_nbr)
USB 장치 구성에 CDC ACM 하위 클래스 인스턴스를 추가합니다.
aa sl_usbd_cdc_ cm_is_enbled(uint8_t subclass_nbr, bool *p_enabled)
CDC ACM 직렬 에뮬레이션 하위 클래스 활성화 상태를 가져옵니다.
aaa sl_usbd_cdc_ cm_re d(uint8_t 하위 클래스 ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t 시간 초과, uint32_t
*p_xfer_len) CDC ACM 직렬 에뮬레이션 하위 클래스에서 데이터를 수신합니다.
aaaa sl_usbd_cdc_ cm_re d_ 동기화(uint8_t 하위 클래스 ss_nbr, uint8_t *p_buf, uint32_t buf_len, aaaa sl_usbd_cdc_ 동기화_함수_t 동기화_함수, void *p_ 동기화_ rg)
CDC ACM 직렬 에뮬레이션 하위 클래스에서 비동기적으로 데이터를 수신합니다.
aa sl_usbd_cdc_ cm_write(uint8_t 하위 클래스 ss_nbr, uint8_t *p_buf, uint32_t buf_len, uint16_t 시간 초과, uint32_t
*p_xfer_len) CDC ACM 직렬 에뮬레이션 하위 클래스에 대한 데이터를 보냅니다.
aaa sl_usbd_cdc_ cm_write_ 동기화(uint8_t 하위 클래스 ss_nbr, uint8_t *p_buf, uint32_t buf_len, aaaa sl_usbd_cdc_ 동기화_함수_t 동기화_함수, void *p_ 동기화_ rg)
CDC ACM 직렬 에뮬레이션 하위 클래스에서 데이터를 비동기적으로 전송합니다.
aaa sl_usbd_cdc_ cm_get_line_control_st te(uint8_t 하위 클래스 ss_nbr, uint8_t *p_line_ctrl)
제어선의 상태를 반환합니다.
aaa sl_usbd_cdc_ cm_get_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
라인 코딩의 현재 상태를 가져옵니다.
aaa sl_usbd_cdc_ cm_set_line_coding(uint8_t subcl ss_nbr, sl_usbd_cdc_ cm_line_coding_t *p_line_coding)
새로운 라인 코딩을 설정합니다.
aaa sl_usbd_cdc_ cm_set_line_st te_event(uint8_t 하위 클래스 ss_nbr, uint8_t 이벤트)
라인 상태 이벤트를 설정합니다.
aaaa sl_usbd_cdc_ cm_cle r_line_st te_event(uint8_t 하위 클래스 ss_nbr, uint8_t 이벤트)
라인 상태 이벤트를 지웁니다.
저작권 © 2025 Silicon Laboratories. 판권 소유.
63/174
USB 장치 ACM API
매크로
#정의 SL_USBD_CDC_ACM_NBR_없음 255u
기준 치수.
#SL_USBD_CDC_ACM_PARITY_NONE 0u를 정의합니다.
포트 설정 정의.
#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
라인 이벤트 플래그 정의.
#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_호출_관리_장치 0 01u
통화 관리 기능.
#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)
함수 문서
sl_usbd_cdc_acm_init
sl_status_t sl_usbd_cdc_acm_init (void)
전역 변수. 매개변수
저작권 © 2025 Silicon Laboratories. 판권 소유.
64/174
USB 장치 ACM API
유형
무효의
방향 N/A
인수 이름
매크로 전역 상수 함수 프로토타입 CDC ACM 함수
CDC ACM 직렬 에뮬레이션 하위 클래스를 초기화합니다.
보고
성공 시 SL_STATUS_OK를 반환하고 실패 시 다른 SL_STATUS 코드를 반환합니다.
설명
sl_usbd_cdc_acm_인스턴스 생성
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)
CDC ACM 직렬 에뮬레이션 하위 클래스의 새 인스턴스를 추가합니다.
매개변수
유형
단위16_t
단위16_t
방향 인수 이름
설명
없음
line_state_interval 밀리초 단위의 라인 상태 알림 간격(값은 다음과 같아야 함)
2의 거듭제곱이 됩니다.
없음
call_mgmt_capabilities 통화 관리 기능 비트맵. OR 연산
다음 플래그:
SL_USBD_CDC_ACM_CALL_MGMT_DEV 장치가 직접 통화 관리를 처리합니다. SL_USBD_CDC_ACM_CALL_MGMT_DATA_CCI_DCI 장치는 데이터 클래스 인터페이스를 통해 통화 관리 정보를 송수신할 수 있습니다.
sl_usbd_cdc_acm_callbacks_t 해당 없음
*
단위8_t *
없음
p_acm_콜백 p_subclass_nbr
다양한 이벤트에서 호출되는 콜백 함수에 대한 선택적 포인터입니다.
CDC ACM 직렬 에뮬레이션 하위 클래스 인스턴스 번호를 수신하는 변수에 대한 매개변수입니다.
보고
성공 시 SL_STATUS_OK를 반환하고 실패 시 다른 SL_STATUS 코드를 반환합니다.
sl_usbd_cdc_acm_구성에_추가
sl_status_t sl_usbd_cdc_acm_add_to_configuration(uint8_t subclass_nbr, uint8_t config_nbr)
USB 장치 구성에 CDC ACM 하위 클래스 인스턴스를 추가합니다.
매개변수
유형
uint8_t uint8_t
방향 N/AN/A
인수 이름
하위 클래스_nbr 구성_nbr
설명 CDC ACM 직렬 에뮬레이션 하위 클래스 인스턴스 번호입니다. 새 테스트 클래스 인터페이스를 추가할 구성 인덱스입니다.
보고
저작권 © 2025 Silicon Laboratories. 판권 소유.
65/174
USB 장치 ACM API
성공 시 SL_STATUS_OK를 반환하고 실패 시 다른 SL_STATUS 코드를 반환합니다.
sl_usbd_cdc_acm_is_enabled
sl_status_t sl_usbd_cdc_acm_is_enabled(uint8_t subclass_nbr, bool * p_enabled)
CDC ACM 직렬 에뮬레이션 하위 클래스 활성화 상태를 가져옵니다.
매개변수
유형
방향
인수 이름
설명
uint8_t 해당 없음
subclass_nbr CDC ACM 직렬 에뮬레이션 하위 클래스 인스턴스 번호.
부울 * 해당 없음
p_활성화됨
활성화 상태를 수신할 변수에 대한 부울 값입니다. 변수가 true로 설정되면 CDC ACM 직렬 에뮬레이션이 활성화됩니다. 변수
문서 / 리소스
![]() |
SILICON LABS USB 장치 스택 [PDF 파일] 사용설명서 USB 장치 스택, 장치 스택, 스택 |