02_USB系统硬件框架和软件框架#

参考资料:

  • 《圈圈教你玩USB》

  • 官网:https://www.usb.org/documents image-20220721151007143

  • 从官网下载后解压,可以得到如下文件(放在GIT仓库里了) image-20220721152136238

1. 实验现象#

现象:把USB设备比如Android手机接到PC

  • 右下角弹出”发现android phone”

  • 跳出一个对话框,提示你安装驱动程序

问1:USB设备插到电脑上去,接触到的对方设备是什么?

答1:是USB控制器,是USB控制器内嵌的root hub

问2. 既然还没有”驱动程序”,为何能知道是”android phone” 答2. windows里已经有了USB的总线驱动程序,接入USB设备后,是”总线驱动程序”知道你是”android phone” 提示你安装的是”设备驱动程序”。 USB总线驱动程序负责:识别USB设备, 给USB设备找到对应的驱动程序

问3. 为什么一接入USB设备,PC机就能发现它? 答3. PC的USB口内部,D-和D+接有15K的下拉电阻,未接USB设备时为低电平 USB设备的USB口内部,D-或D+接有1.5K的上拉电阻;它一接入PC,就会把PC USB口的D-或D+拉高,从硬件的角度通知PC有新设备接入。

问4. USB设备种类非常多,为什么一接入电脑,就能识别出来它的种类? 答4. PC和USB设备都得遵守一些规范。比如:USB设备接入电脑后,PC机会发出”你是什么”?USB设备就必须回答”我是xxx”, 并且回答的格式是固定的。USB总线驱动程序会发出某些命令想获取设备信息(描述符),USB设备必须返回”描述符”给PC。

问5. PC机上接有非常多的USB设备,怎么分辨它们? 答5. 每一个USB设备接入PC时,USB总线驱动程序都会给它分配一个编号。PC机想访问某个USB设备时,发出的命令都含有对应的编号(地址)。

问6. USB设备刚接入PC时,还没有编号;那么PC怎么把”分配的编号”告诉它? 答6. 新接入的USB设备的默认编号是0,在未分配新编号前,PC使用0编号和它通信。

2. 硬件框架#

在USB系统中,有2个硬件概念:

  • USB Host:它跟处理器相连,处理器通过USB Host跟各类USB设备通信。USB Host中集成有一个root hub

  • USB Device:这分为两类设备

    • Hub:用来扩展USB接口

    • Function:就是普通的USB设备,比如U盘、声卡等

image-20220721151432064

3. 软件框架#

image-20220721170642876

APP可以通过USB设备驱动程序访问USB设备, 也可以绕过USB设备驱动,直接通过USB控制器驱动访问USB设备。