USB开发中需要弄清的一些概念
USB接口芯片
USB接口芯片一般是一块专用MCU,集成USB电气层协议。而USB协议就是USB固件做的事了,也有一部分USB协议MCU会集成
USB固件
一般地,USB设备需要一个固件程序来处理USB协议,以及设备相关的内容。比如一个USB的数据采集卡,固件就是除了处理USB协议,就是负责采数据到端点。而读取数据就是设备驱动做的事了。再比如,USB设备配置时,使用控制传输,里面有一些错误处理也是固件需要做的,当然某些错误处理就是简单的不响应。
USB设备驱动
USB设备驱动提供应用层一些USB设备通讯的接口,一个重要的细节就是Windows提供了总线驱动,所以USB设备驱动只应当和总线驱动做接口对接。我们不需要关心总线驱动和主控制器驱动间的关系,当然了解了也不是件坏事。
设备枚举
设备枚举从电气层开始讲十分复杂,一般驱动开发者可以不了解。在驱动层,USB总线驱动程序会识别到USB设备,并且最终得到一些ID,系统就去查注册表加载对应驱动。如果没有查到对应驱动,那么系统就会提示发现新硬件。这些工作都是总线驱动程序在使用控制管道和固件通讯,得到设备描述符,进而得到一些ID。更详细一点的细节是:
USB控制器或者HUB发现硬件,控制器驱动和总线驱动发现硬件,总线驱动向PNP管理器报告,PNP管理器进一步要求总线驱动报告什么设备(ID),PNP得到ID后查询注册表,然后AddDevice。
USB描述符
USB描述符用于描述USB设备的各种特性,其实是硬件的配置信息,其中重要的是需要和软件配合的信息。比如某个端点的方向、类型等
端点
端点由USB抽象出来,端点号,缓冲区用于实际USB固件和驱动数据交换。端点号是一个数,这个数由芯片厂家决定,USB描述符里需要正确使用
管道
一条端点到端点数据传输的通道,由USB协议抽象出来,没有实际硬件对应。比如控制管道和接口芯片通讯,固件配合处理各总USB控制传输
USB通讯
USB本身是一种通讯,所谓USB设备是一种按USB协议通讯的方式驱动的设备。像其它外设一样,只不过USB通讯较为复杂,复杂到时序控制无法满足要求的程度。