USB 应用
之前写过一系列 USB 相关的博客,都是应用角度.没有涉及到 USB 协议
这里面涉及到 host 和 slave
其中 host 有 PC & OK6410A
其中 slave 有 "USB转JTAG小板" 和 "usb camera"
USB 协议
USB 1.1 UHCI/OHCI
USB 2.0 EHCI
USB 3.0 XHCI。
USB4于2019年9月3日发布
Mini 和 Micro 5条线,其他 4条线
4条线 : Vbus D+ D- GND
5条线 : Vbus D+ D- GND ID
----
Vbus 是 5V , D+ D- 是 3.3V
Vbus 和 GND 给设备提供电源 , D+ D- 用来传输数据
D+ D- 是 差分线 , 数据 在线上发送 从低到高
ID 用于 OTG , 接地表示主机, 空置表示设备
USB数据是由二进制数字串构成的,数据会发送到端点(可以认为是一个缓冲区)上
level 1 : 二进制数据 0 1
level 2 : 域
level 3 : 包Packet
level 4 : 事务Transaction
level 5 : 传输Transfer
level 6 : 管道Pipe
USB是轮询总线,USB主机发起所有数据交换。
怎么算是一个发起?
"控制传输"是USB的重心,而这11个命令是控制传输的重心,所以这11个命令是重中之重
标准的USB设备请求命令是用在 控制传输 中的“初始设置步骤”里的数据包阶段(即DATA0,由八个字节构成)
标准USB设备请求命令共有11个,大小都是8个字节,具有相同的结构,由5个字段构成(字段是标准请求命令的数据部分)
结构如下(括号中的数字表示字节数,首字母bm,b,w分别表示位图、字节,双字节):
bmRequestType(1)+bRequest(1)+wvalue(2)+wIndex(2)+wLength(2)
Descriptor即描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,
用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送这些信息的。
它的作用就是通过如问答节中的命令中 来给主机传递信息,
从而让主机知道设备具有什么功能、属于哪一类设备、要占用多少带宽、使用哪类传输方式及数据量的大小,
只有主机确定了这些信息之后,设备才能真正开始工作,所以描述符也是十分重要的部分,要好好掌握。
一个设备只有一个设备描述符,
而一个设备描述符可以包含多个配置描述符,
而一个配置描述符可以包含多个接口描述符,
一个接口使用了几个端点,就有几个端点描述符。
标准的描述符有5种,USB为这些描述符定义了编号:
1——设备描述符,
描述遵循USB版本号、设备类型等信息,一个USB设备只有一个设备描述符。
2——配置描述符,
用于描述一个USB设备的属性和能力等配置信息,
如接口总数、当前配置、供电方式、远程唤醒和须获取电流量等,
一个USB设备可以有几种相对独立的配置。
3——字符描述符,
可选。
4——接口描述符,
描述一个接口的属性,
如接口类型、使用了哪些非0端点等。
一个配置可拥n个接口,每个接口有唯一编号。
5——端点描述符
描述非0端点的属性,包括输入/输出方向、端点号和端点容量。
需注意的是端点描述符是作为配置描述符的一部分来返回给主机的,
而不能直接通过控制传输中的Get_Descriptor或Set_Descriptor来访问。
传输方式的应用场景
控制传输 枚举
批量传输 U盘/打印机/扫描仪
同步传输 摄像头,音频及其他实时应用场景
中断传输 键盘,鼠标
|