USB

USB--Universal Serial Bus,通用串行总线,是一种接口。

    USB体系包括USB Host“主机”、USB Device“设备” 以及“物理连接”三个部分。
一个USB系统中仅有一个USB主机;设备包括USB功能设备和USB HUB,最多支持127个设备(原因是一个USB Host最多可以同时支持128个地址,地址0作为默认地址(感觉是分配给了Root Hub),只在设备枚举期间临时使用,而不能被分配给任何一个设备,因此一个USB Host最多可以同时支持127个地址,也就是同时支持127个USB设备。实际应用中连接设备较多时,会用到USB Hub,而USB Hub也算是一个USB设备,它也是占用地址的,因此一个USB Host可以最多接127个USB设备的意思是,加上USB Hub的数量的,而实际可接的USB功能设备的数量肯定会小于127个)。至于为什么是128个地址,因为设计时使用7(bit)位寻址字段。
USB
此图为USB体系结构图
    对图的解释为:以Host-Root Hub为起点,最多支持7层,也就是说任何一个USB系统中最多可以允许5个USB Hub(不包括Root Hub,仅是外部的USB Hub)级联。一个复合设备将同时占据两层或更多的层。

    解释中提到Root Hub及USB Hub,两者的区别在于:
一、Root Hub是一个特殊的USB Hub,它集成在Host controller里面,不占USB的地址。不过对于此,我还有个疑问:在我的笔记本(xp系统)上的设备管理器中会显示两个Generic USB Hub,两个USB Root Hub。在公司的小PC机(ubuntu 11.04)上显示的有两个Linux Foundation 1.1 root hub,两个Linux Foundation 2.0 root hub。
    经google发现 Generic USB Hub应该是属于前面说的那种“外部USB Hub”,只不过它是直接级联到了Root Hub上,并集成到了PC里面。至于公司的小PC机,怎么会有4个Root Hub,没查出来,不过据我理解,因为机器可能不太具有“普通性”,它是提供了两个USB1.1标准的Root Hub,及两个USB2.0标准的Root Hub,提供的USB Root Hub比一般的pc机要多。

二、还提到复合设备,举个例子的话,就像是一个带麦克的摄像头,其实它是由两个usb功能设备组成,一个是麦克功能设备,一个是摄像头功能设备,而内部是集成了一个1扩2的usb hub芯片,因此,它的usb hub芯片占一层,它的麦克,摄像头的部分占下面一层,共占两层,而占用的usb地址为3个。

    扩展一下,提到这些,又出来一点疑问:USB Host Controller与Root Hub是一对一的关系,还是一对多的关系?
即,如果一个arm机上有一个USB Host Controller的话,是不是也只能有一个Root Hub,还是说可以有两个甚至更多的Root Hub的问题。
    还是google,找到oracle公司的一个doc-- <USB Host Controller and Root Hub>,里面说:The USB host controller has an embedded hub called the root hub,可以看到它说的是一对一的关系,不过我查看了一下Raspi,里面仅列出一个Linux Foundation 2.0 root hub,而它本身有两个USB接口,感觉与oracle公司的doc矛盾。
    继续google, 《请问usb root hub和 host controller只能有一对还是可以有多对?》里面提到ldd3上说"
All   root hubs are assigned a unique number by the USB core. In our example, the root hub is called usb2, as it is the second root hub that was registered with the USB core. There is no limit on the number of root hubs that can be contained in a single system at any time."提到对于一个usb core(如果可以理解为host controller的话)可以接多个Root Hub,看来oracle也不十分可信,不过问题不算解决,待查更权威或有较多认同的说法。
    对于树莓派,也可能是这种情况:一个USB Host Controller,一个Root Hub,然后这一个Root Hub可以出来两个usb接口。靠,找不到权威资料,卡到这里了。


    USB采用的是轮询的广播机制,有点像局域网(好像是记不清了),所有的传输由主机发起,采用“令牌包”-“数据包”-“握手包”的传输机制,在令牌包中指定数据包去向(设备地址)或者来源的设备地址和端点(Endpoint??),从而保证只有一个设备对广播的数据包/令牌包作出响应。
数据包:USB总线上数据传输的最小单位,由三个部分组成,SYNC、数据及EOP。其中数据部分的格式会按情况采用不同的格式,但都以8位的PID(??)开始。PID指定数据包的类型(共16种)。令牌包即指PID为IN/OUT/SETUP的包。
端点(Endpoint):是USB设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。设备支持端点的数量是有限的,除默认端点外低速设备最多支持2组端点(2个输入,2个输出),高速和全速设备最多支持15组端点。(资料上是这么介绍的,但没看懂!!)
    哇!处处是管道(Pipe)啊,这里也用到管道了,管道是主机与设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB设备一旦上电就存在一个信息管道,即默认的控制管道,USB主机通过该管道来获取设备的描述、配置、状态,并对设备进行配置。USB设备连接到Host时,Host必须
通过默认的控制管道对其进行 枚举(好NB),获得设备描述、进行地址分配、获得配置描述、进行配置。这是为什么USB设备支持即插即用。(枚举:)



USB版本对比:
USB版本 速率称号        最大传输距离(m) 带宽(bps) 速度(Bps)   一般用途       
USB3.0 SuperSpeed      约2.7             5G       约500M      大容量存储,视频传输
USB2.0 Hi-Speed        约4.8             480M     约60M       摄像头等
USB 1.1 FullSpeed                          12M      约1.5M                                
USB 1.0 LowSpeed                           1.5M     约187.5K    人机接口设备,如:键盘、鼠标、游戏杆等                  

对于USB,是向下兼容的,如USB2.0会兼容USB1.1及USB1.0的版本。

usb通信过程
host controller <--> root hub <--> function/device
host controller <--> root hub <--> hub <--> function/device
device controller 也叫做 function controller.
一般嵌入式设备既可以作为host,也可以作为device.
嵌入式设备可以作为host,要有host controller, root hub和外设通信。
嵌入式设备要作为usb设备,和pc机连接时,通过device controller和pc机通信。



USB OTG和USB HOST的区别
USB OTG 设备既能做主机,又能做设备。
USB HOST是指主机。
当OTG 插到 HOST 上,OTG 的角色 就是 device.
当device 插到 OTG 上,OTG 的角色就是 HOST.

一个基于计算机的usb系统可以在系统层次上被分为三个部分:即USB Host、USB device和USB的连接。
所谓USB连接实际上是一种usb device和usb host进行通信的方法。包括:
1、总线的拓扑(由一点分出多点的网络形式):即外设和主机连接的模式。
2、各层之间的关系:即组成 usb 系统的各个部分在完成一个特定的usb任务时,各自之间的分工合作。
3、数据流动的模式:即usb总线的数据传输方式。
4、usb的“分时复用”:因为usb提供的是一种共享连接方式,


HCI from wiki
EHCI from wiki
"The EHCI utilizes OHCI or UHCI controllers as “companion controllers”, where USB 2 devices are managed through the EHCI stack, and the port logic of the EHCI allows a USB 1 or 2 device to be routed to a port of a “companion” UHCI or OHCI controller, where the USB 1 and 2 devices are managed through the respective UHCI or OHCI stack. For example, a USB 2 PCIe host controller card that presents 4 USB “Standard A” connectors typically presents one 4-port EHCI and two 2-port OHCI controllers to system software. When a USB 2 device is attached to any of the 4 connectors, the device is managed through one of the 4 root hub ports of the EHCI controller. If a USB 1 device is attached to connectors 1 or 2 they will be routed to the root hub ports of one of the OHCI controllers for management, and USB 1 devices attached to connectors 3 or 4 will be routed to the root hub ports of the other OHCI controller. The EHCI dependence on separate host controllers for USB 1 and 2 devices results in complex interactions and dependencies between the EHCI and OHCI/UHCI drivers."

你可能感兴趣的:(B)