关于tinyusb库中TUD_CONFIG/HID_DESCRIPTOR宏参数使用的咨询
解析tinyusb的TUD_CONFIG_DESCRIPTOR和TUD_HID_DESCRIPTOR宏参数
下面分别拆解两个宏的参数含义,并给出实际使用示例:
一、TUD_CONFIG_DESCRIPTOR 参数说明
这个宏用于生成USB配置描述符,参数对应USB规范中配置描述符的字段:
config_num:配置编号,通常从1开始(USB配置ID不允许为0)_itfcount:当前配置包含的接口总数,比如单HID设备填1_stridx:配置对应的字符串描述符索引,0表示无配套字符串,有自定义字符串则填对应索引值_total_len:整个配置描述符集合的总字节数(包含配置、接口、HID、端点等所有属于该配置的描述符),直接用sizeof(配置描述符数组)即可_attribute:配置属性,可选值:0:总线供电TUSB_DESC_CONFIG_ATT_SELF_POWERED:自供电TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP:支持远程唤醒,可与自供电属性按位或(TUSB_DESC_CONFIG_ATT_SELF_POWERED | TUSB_DESC_CONFIG_ATT_REMOTE_WAKEUP)
_power_ma:设备所需总线供电电流(单位mA),宏会自动除以2转换为USB描述符要求的2mA单位
二、TUD_HID_DESCRIPTOR 参数说明
这个宏会一次性生成接口描述符、HID描述符、IN端点描述符三个部分,参数对应三个描述符的字段:
_itfnum:接口编号,从0开始递增(第一个接口填0,多接口依次+1)_stridx:接口对应的字符串描述符索引,0表示无配套字符串_boot_protocol:是否启用HID引导协议:0:使用报告协议(自定义HID设备用这个)1:使用引导协议(标准键盘、鼠标等设备用这个)
_report_desc_len:HID报告描述符的总字节数,用sizeof(报告描述符数组)即可_epin:IN端点地址,格式为0x8N(N为端点号,最高位1表示IN方向),比如端点1填0x81_epsize:IN端点的最大包大小,需符合USB规范:低速设备最大8字节,全速最大64字节,高速最大512字节_ep_interval:IN端点的轮询间隔(单位ms),低速设备最小10ms,全速最小1ms,高速最小1ms
三、完整使用示例
// 自定义HID报告描述符(示例:3字节输入报告) uint8_t const hid_report_desc[] = { 0x06, 0x00, 0xFF, // 自定义使用页 0x09, 0x01, // 自定义使用ID 0xA1, 0x01, // 集合:应用 0x09, 0x02, // 自定义输入报告ID 0x15, 0x00, // 逻辑最小值0 0x26, 0xFF, 0x00, // 逻辑最大值255 0x75, 0x08, // 报告大小:8位 0x95, 0x03, // 报告计数:3个字节 0x81, 0x02, // 输入:数据、变量、绝对 0xC0 // 结束集合 }; // USB配置描述符数组 uint8_t const desc_configuration[] = { // 配置描述符:配置1,1个接口,无字符串,总长度为数组大小,总线供电,需100mA TUD_CONFIG_DESCRIPTOR(1, 1, 0, sizeof(desc_configuration), 0, 100), // HID相关描述符:接口0,无字符串,报告协议,报告描述符长度为数组大小,IN端点0x81,包大小8,轮询间隔1ms TUD_HID_DESCRIPTOR(0, 0, 0, sizeof(hid_report_desc), 0x81, 8, 1) };
内容的提问来源于stack exchange,提问作者mehbstnc
相关产品推荐
相关产品推荐

