找回密码
 立即注册
查看: 167|回复: 12

USB原理课程学习记录贴

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-21 09:28:42 | 显示全部楼层 |阅读模式
三天不学习,赶不上刘少奇~
回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-21 09:33:00 | 显示全部楼层
本贴记录了学习何宾教授《USB原理及实战》课程的详细过程。该课程共16课时,系统讲解了USB协议的基本原理、硬件设计及软件开发,并重点探讨了USB-CDC虚拟串口、USB转双串口及HID复合设备的实现方法。课程内容深入浅出,理论与实践相结合,适合有一定基础的开发者深入学习。<br><br>通过学习,本人对USB通信协议有了更深刻的理解,尤其是在USB设备枚举、数据传输及端点配置等方面。课程配套的书籍《USB原理及实战》也提供了丰富的案例和代码,帮助巩固理论知识并应用于实际项目。<br><br>此外,课程中提到的“一箭双雕”USB转双串口方案,为多串口应用场景提供了高效解决方案,极具实用价值。HID复合设备的实现方法也为开发复杂USB设备提供了新思路。<br><br>总体而言,本课程内容详实,理论与实践并重,是学习USB技术的优质资源。建议学员在学习过程中结合动手实践,以加深理解并提升应用能力。<br><br>[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-21 09:33:33 | 显示全部楼层
第一集了解基本概念
昨天看了第一课补充点截图


截图202503210929314705.jpg
D+绿色 D-白色
截图202503210930071610.jpg
NRZI编码
截图202503210930457745.jpg

截图202503210931194970.jpg

截图202503210931395564.jpg

截图202503210932237694.jpg


截图202503210932356789.jpg

截图202503210932577930.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-21 14:49:33 | 显示全部楼层

第二课 USB通讯报文解析
截图202503211441093969.jpg


截图202503211441533059.jpg
截图202503211442451031.jpg

截图202503211443227641.jpg

截图202503211443351489.jpg

截图202503211443479552.jpg
截图202503211444103064.jpg
截图202503211444301090.jpg


截图202503211444421546.jpg

截图202503211444517179.jpg
特殊数据包:不常用
截图202503211445043727.jpg
截图202503211445213229.jpg


截图202503211445355450.jpg
截图202503211445433279.jpg
截图202503211445512169.jpg
低速 SYNC KJKJKJKK 0000 0001

截图202503211446009773.jpg

截图202503211446242470.jpg

PID A5  SOF+帧号+CRC5bit
截图202503211446466563.jpg
截图202503211446539801.jpg

USB中文网关键字@USB2.0 SOF令牌包
截图202503211447249417.jpg
PID 0x96 IN 令牌
USB中文网关键字@USB2.0 IN令牌包

截图202503211447424820.jpg

截图202503211447507188.jpg

SYNC+PID+地址7bit+EP4bit+CRC5bit+EOP

截图202503211448114788.jpg

NACK 包

截图202503211448294080.jpg

截图202503211448391432.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-25 13:13:43 | 显示全部楼层
第三课

截图202503251311203681.jpg
截图202503251311283514.jpg
截图202503251311383963.jpg
截图202503251311477148.jpg
截图202503251311565862.jpg
截图202503251312053827.jpg
截图202503251312197565.jpg
截图202503251312279685.jpg
截图202503251312368676.jpg
截图202503251312434659.jpg

截图202503251312533672.jpg
截图202503251313022540.jpg
截图202503251313109414.jpg
截图202503251313181188.jpg
截图202503251313288064.jpg
截图202503251313352036.jpg

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-26 10:14:41 | 显示全部楼层
截图202503261007019769.jpg
  1. struct usb_configuration_descriptor {
  2.     uint8_t  bLength;             // 描述符长度
  3.     uint8_t  bDescriptorType;     // 描述符类型(固定为0x02,表示配置描述符)
  4.     uint16_t wTotalLength;        // 该配置下所有描述符的总长度
  5.     uint8_t  bNumInterfaces;      // 该配置包含的接口数量
  6.     uint8_t  bConfigurationValue; // 配置编号
  7.     uint8_t  iConfiguration;      // 配置的字符串描述索引
  8.     uint8_t  bmAttributes;        // 配置属性(如是否支持远程唤醒等)
  9.     uint8_t  MaxPower;            // 设备在该配置下的最大功耗
  10. };
复制代码
  1. struct usb_device_descriptor {
  2.     uint8_t  bLength;             // 描述符长度
  3.     uint8_t  bDescriptorType;     // 描述符类型(固定为0x01,表示设备描述符)
  4.     uint16_t bcdUSB;              // USB协议版本
  5.     uint8_t  bDeviceClass;        // 设备类
  6.     uint8_t  bDeviceSubClass;     // 设备子类
  7.     uint8_t  bDeviceProtocol;     // 设备协议
  8.     uint8_t  bMaxPacketSize0;     // 端点0的最大包大小
  9.     uint16_t idVendor;            // 厂商ID
  10.     uint16_t idProduct;           // 产品ID
  11.     uint16_t bcdDevice;           // 设备版本号
  12.     uint8_t  iManufacturer;       // 厂商字符串描述索引
  13.     uint8_t  iProduct;            // 产品字符串描述索引
  14.     uint8_t  iSerialNumber;       // 设备序列号字符串描述索引
  15.     uint8_t  bNumConfigurations;  // 设备支持的配置数量
  16. };
复制代码
一个设备,只包含一个设备描述符,可以关联多个配置描述符,一个配置描述符包含多个接口描述符,一个接口描述符包含多个端点描述符,并且接口描述符可以包含多个ReportID用于区分端点上传输不同数据


  1. 设备描述符(Device Descriptor)
  2. |
  3. |-- 配置描述符 1(Configuration Descriptor 1,bConfigurationValue = 1)
  4. |   |
  5. |   |-- 接口描述符 1(Interface Descriptor 1)
  6. |   |   |
  7. |   |   |-- 端点描述符 1(Endpoint Descriptor 1,bEndpointAddress = 0x81,批量 IN 端点)
  8. |   |   |-- 端点描述符 2(Endpoint Descriptor 2,bEndpointAddress = 0x01,批量 OUT 端点)
  9. |   |   |-- 报告描述符(Report Descriptor)
  10. |   |       |
  11. |   |       |-- ReportID 1(对应鼠标功能)
  12. |   |       |   |-- 输入报告字段(如鼠标 X 轴移动、Y 轴移动)
  13. |   |       |-- ReportID 2(对应键盘功能)
  14. |   |       |   |-- 输入报告字段(如按键状态)
  15. |   |
  16. |   |-- 接口描述符 2(Interface Descriptor 2)
  17. |   |   |
  18. |   |   |-- 端点描述符 3(Endpoint Descriptor 3,bEndpointAddress = 0x82,中断 IN 端点)
  19. |   |   |-- 端点描述符 4(Endpoint Descriptor 4,bEndpointAddress = 0x02,中断 OUT 端点)
  20. |   |   |-- 报告描述符(Report Descriptor)
  21. |   |       |
  22. |   |       |-- ReportID 3(对应游戏手柄功能)
  23. |   |       |   |-- 输入报告字段(如摇杆位置、按键状态)
  24. |
  25. |-- 配置描述符 2(Configuration Descriptor 2,bConfigurationValue = 2)
  26. |   |
  27. |   |-- 接口描述符 3(Interface Descriptor 3)
  28. |   |   |
  29. |   |   |-- 端点描述符 5(Endpoint Descriptor 5,bEndpointAddress = 0x83,批量 IN 端点)
  30. |   |   |-- 端点描述符 6(Endpoint Descriptor 6,bEndpointAddress = 0x03,批量 OUT 端点)
  31. |   |   |-- 报告描述符(Report Descriptor)
  32. |   |       |
  33. |   |       |-- ReportID 4(对应传感器数据功能)
  34. |   |       |   |-- 输入报告字段(如温度、湿度)
  35. |
  36. |-- 配置描述符 3(Configuration Descriptor 3,bConfigurationValue = 3)
  37. |   |
  38. |   |-- 接口描述符 4(Interface Descriptor 4)
  39. |   |   |
  40. |   |   |-- 端点描述符 7(Endpoint Descriptor 7,bEndpointAddress = 0x84,等时 IN 端点)
  41. |   |   |-- 端点描述符 8(Endpoint Descriptor 8,bEndpointAddress = 0x04,等时 OUT 端点)
  42. |   |   |-- 报告描述符(Report Descriptor)
  43. |   |       |
  44. |   |       |-- ReportID 5(对应音频输入功能)
  45. |   |       |   |-- 输入报告字段(如音频采样数据)
  46. |   |       |-- ReportID 6(对应音频输出功能)
  47. |   |       |   |-- 输出报告字段(如音频播放数据)
复制代码


三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-26 10:53:30 | 显示全部楼层
配置中关键字描述,参阅文档:
HID Usage Tables.pdf (4.25 MB, 下载次数: 1)
Universal Serial Bus (USB).pdf (1007.31 KB, 下载次数: 1)
usb_20.pdf (5.71 MB, 下载次数: 2)

来源:
www.usb.org/document-library/hid-usage-tables-16
www.usb.org/document-library/device-class-definition-hid-111

www.usb.org/document-library/usb-20-specification
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-30 23:06:05 | 显示全部楼层

第四课

image.png

usb_req_std.c

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-30 23:13:09 | 显示全部楼层
鼠标描述符解析:

第一字节:bit0 鼠标左键 bit1鼠标右键,bit2鼠标中键,bit3~bit7占位
第二字节:鼠标x轴移动,>0:right; <0:left
第三字节:鼠标y轴移动,>0:down; <0:up

截图202503302310092194.jpg

截图202503302312208858.jpg
截图202503302312395849.jpg
截图202503302312567664.jpg
  1. /*
  2. Input Report:
  3. 0   Buttons (D0:LButton D1:RButton D2:MButton [D3:D7]:Pad)
  4. 1        X displacement (>0:right; <0:left)
  5. 2        Y displacement (>0:down; <0:up)
  6. */
  7. char code MOUSEREPORTDESC[50] =
  8. {
  9.     0x05,0x01,              //USAGE_PAGE(Generic Desktop);
  10.     0x09,0x02,              //USAGE(Mouse);
  11.     0xa1,0x01,              //COLLECTION(Application);
  12.     0x09,0x01,              //  USAGE(Pointer);
  13.     0xa1,0x00,              //  COLLECTION(Physical);
  14.     0x05,0x09,              //    USAGE_PAGE(Buttons);
  15.     0x19,0x01,              //    USAGE_MINIMUM(1);
  16.     0x29,0x03,              //    USAGE_MAXIMUM(3);
  17.     0x15,0x00,              //    LOGICAL_MINIMUM(0);
  18.     0x25,0x01,              //    LOGICAL_MAXIMUM(1);
  19.     0x75,0x01,              //    REPORT_SIZE(1);
  20.     0x95,0x03,              //    REPORT_COUNT(3);
  21.     0x81,0x02,              //    INPUT(Data,Variable,Absolute);
  22.     0x75,0x05,              //    REPORT_SIZE(5);
  23.     0x95,0x01,              //    REPORT_COUNT(1);
  24.     0x81,0x01,              //    INPUT(Constant);
  25.     0x05,0x01,              //    USAGE_PAGE(Generic Desktop);
  26.     0x09,0x30,              //    USAGE(X);
  27.     0x09,0x31,              //    USAGE(Y);
  28.     0x15,0x81,              //    LOGICAL_MINIMUM(-127);
  29.     0x25,0x7f,              //    LOGICAL_MAXIMUM(127);
  30.     0x75,0x08,              //    REPORT_SIZE(8);
  31.     0x95,0x02,              //    REPORT_COUNT(2);
  32.     0x81,0x06,              //    INPUT(Data, Variable, Relative);
  33.     0xc0,                   //  END_COLLECTION;
  34.     0xc0,                   //END_COLLECTION;
  35. };
复制代码


三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:163
  • 最近打卡:2025-05-02 13:26:59
已绑定手机

56

主题

1319

回帖

2942

积分

荣誉版主

无情的代码机器

积分
2942
发表于 2025-3-30 23:18:03 | 显示全部楼层
上个是鼠标相对位移,来个鼠标绝对坐标描述符示例:
截图202503302315466765.jpg


  1. const uint8_t ABSOLUTE_MOUSE_REPORT_DESC[] = {
  2.     0x05, 0x01,        // USAGE_PAGE (Generic Desktop)
  3.     0x09, 0x02,        // USAGE (Mouse)
  4.     0xA1, 0x01,        // COLLECTION (Application)
  5.     0x09, 0x01,        //   USAGE (Pointer)
  6.     0xA1, 0x00,        //   COLLECTION (Physical)
  7.     0x05, 0x09,        //     USAGE_PAGE (Buttons)
  8.     0x19, 0x01,        //     USAGE_MINIMUM (Button 1)
  9.     0x29, 0x03,        //     USAGE_MAXIMUM (Button 3)
  10.     0x15, 0x00,        //     LOGICAL_MINIMUM (0)
  11.     0x25, 0x01,        //     LOGICAL_MAXIMUM (1)
  12.     0x75, 0x01,        //     REPORT_SIZE (1)
  13.     0x95, 0x03,        //     REPORT_COUNT (3)
  14.     0x81, 0x02,        //     INPUT (Data,Var,Abs)
  15.     0x75, 0x05,        //     REPORT_SIZE (5)
  16.     0x95, 0x01,        //     REPORT_COUNT (1)
  17.     0x81, 0x03,        //     INPUT (Cnst,Var,Abs)
  18.     0x05, 0x01,        //     USAGE_PAGE (Generic Desktop)
  19.     0x09, 0x30,        //     USAGE (X)
  20.     0x09, 0x31,        //     USAGE (Y)
  21.     0x15, 0x00,        //     LOGICAL_MINIMUM (0)
  22.     0x26, 0xFF, 0x7F,  //     LOGICAL_MAXIMUM (32767)
  23.     0x75, 0x10,        //     REPORT_SIZE (16)
  24.     0x95, 0x02,        //     REPORT_COUNT (2)
  25.     0x81, 0x02,        //     INPUT (Data,Var,Abs)
  26.     0xC0,              //   END_COLLECTION
  27.     0xC0               // END_COLLECTION
  28. };
复制代码



三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 17:30 , Processed in 0.135006 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表