您的位置 首页 厂商

USB枚举流程剖析

USB连接拓扑结构对于每个usb系统来说,都有一个称为HOST控制器的设备,该Host控制器和一个根Hub作为一个整体。这个根HUb下可以接多级Hub…

USB衔接拓扑结构
关于每个usb体系来说,都有一个称为HOST操控器的设备,该Host操控器和一个根Hub作为一个全体。这个根HUb下能够接多级Hub,每个Hub又能够接子Hub。每个usb设备作为一个节点接在不同等级的Hub上。每条usb总线上最多能够接127个设备。

图1 USB总线拓扑结构
usb主操控器:
担任处理主机与设备之间的电气和协议层的互联。常见的usb主操控器规范有:
OHCI:只需对错pc体系上的usb芯片
UHCI:usb1.1规范
EHCI: 兼容上面种规范,遵从usb2.0规范

每个usb host操控器都会自带一个usb hub ,被称为根Hub。这个根hub能够接子hub,每个hub上挂载usb设备。经过外接usb hub,能够插更多的usb设备。当usb设备刺进到usb Hub或从上面拔出时,都会宣布电信号告知体系。

usb设备就是插在usb总线上作业的设备,广义的讲usb Hub也算是usb设备。有的usb设备功用单一,直接挂载在usb hub上。而有的usb设备功用杂乱,会将多个usb功用结合在一起,称为一个复合设备。

usb设备逻辑结构

图2 USB总线逻辑结构
在usb设备的逻辑安排中,包含设备,装备,接口,端点4个层次。
设备一般有一个或多个装备,装备一般有一个或多个接口,接口有零或多个端点。
每个usb设备都能够包含一个或多个装备,不同的装备使设备表现出不同的功用组合(在勘探,衔接期间需从其间选定一个),装备由多个接口组成。在usb协议中,接口由多个端点组成,代表一个根本的功用,是usb设备驱动程序操控的目标,一个功用杂乱的usb设备能够具有多个接口,而接口是端点的聚集
比方
一个usb播放器带有音频,视频功用,还有旋钮和按钮
装备1 音频(接口)+旋钮(接口)
装备2 视频(接口)+音频(接口)+按钮(接口)
每个接口对应需求一个驱动程序

usb设备中的仅有可寻址部分是设备的端点。它是坐落usb设备或主机上的一个数据缓冲区,用来寄存和发送usb的各种数据。主机和设备的通讯终究作用于设备上的各个端点,它是主机与设备间通讯流的一个逻辑终端

每个usb设备有一个仅有的地址,这个地址是在设备连上主机时,由主机分配的,而设备中的每个端点在设备内部有仅有的端点号,这个端点号是在规划设备时给定的。每个端点都是一个简略的衔接点,或许支撑数据流进设备,或许支撑其流出设备,两者不行兼得。

依据PnP机制,设备被枚举时,它有必要向主机陈述各个端点的特性,包含端点号,通讯方向,端点支撑的最大包巨细,带宽要求等(其间端点支撑的最大包巨细叫做数据有用负载)。每个设备有必要有端点0,它用于设备枚举和对设备进行一些根本的操控功用。除了端点0,其他的端点在设备装备之前不能与主机通讯,只要向主机陈述这些端点的特性并被承认后才干被激活。

LInux USB枚举进程

USB架构中, hub担任检测设备的衔接和断开,运用其间断IN端点(Interrupt IN Endpoint)来向主机(Host)陈述。在体系启动时,主机轮询它的根hub(Root Hub)的状况看是否有设备(包含子hub和子hub上的设备)衔接。USB总线拓扑结构见上图(最顶端为主机的Root Hub)

一旦得悉有新设备衔接上来,主机就会发送一系列的恳求(Resqusts)给设备所挂载到的hub,再由hub树立起一条衔接主机(Host)和设 备(Device)之间的通讯通道。然后主机以操控传输(ControlTransfer)的方法,经过端点0(Endpoint 0)对设备发送各种恳求,设备收到主机发来的恳求后回复相应的信息,进行枚举(Enumerate)操作。一切的USB设备有必要支撑规范恳求 (StandardRequests),操控传输方法(ControlTransfer)和端点0(Endpoint 0)。

从用户视点来看,枚举进程是主动完结并不行见的。但许多初度运用的设备衔接时,体系会弹出说新硬件检测到,设备装置成功,能够运用之类的音讯提示框,并且有时还需求用户合作挑选装置相关的驱动。

当枚举完结后,这个新增加的设备可在Windows的设备办理器里边看到,当用户删去这个设备/硬件时,体系把这个设备从设备办理器里删去。

关于一般的设备,固件(Firmware)内包含主机所要恳求的信息,而有些设备则是完全由硬件来担任呼应主机的恳求。在主机方面则是由操作体系而非应用程序担任处理相关枚举操作。

枚举进程
USB协议界说了设备的6种状况,仅在枚举进程种,设备就阅历了4个状况的搬迁:上电状况(Powered),默许状况(Default),地址状况(Address)和装备状况(Configured)(其他两种是衔接状况和挂起状况(Suspend))。

下面进程是Windows体系下典型的枚举进程,可是固件不能依此就以为一切的枚举操作都是依照这样一个流程跋涉。设备有必要在任何时分都能正确处理一切的主机恳求。

1、用户把USB设备刺进USB端口或给体系启动时设备上电
这儿指的USB端口指的是主机下的根hub或主机下行端口上的hub端口。Hub给端口供电,衔接着的设备处于上电状况。

2、Hub监测它各个端口数据线上(D+/D-)的电压
在hub端,数据线D+和D-都有一个阻值在14.25k到24.8k的下拉电阻Rpd,而在设备端,D+(全速,高速)和D-(低速)上有一个1.5k 的上拉电阻Rpu。当设备刺进到hub端口时,有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V)。hub检测到它的一根数据线是高电平, 就以为是有设备刺进,并能依据是D+仍是D-被拉高来判别究竟是什么设备(全速/低速)刺进端口。 检测到设备后,hub持续给设备供电,但并不急于与设备进行USB传输。

全速和低速辨认
 依据规范,全速(Full Speed)和低速(Low Speed)很好区别,由于在设备端有一个1.5k的上拉电阻,当设备刺进hub或上电(固定线缆的USB设备)时,有上拉电阻的那根数据线就会被拉高,hub依据D+/D-上的电平判别所挂载的是全速设备仍是低速设备。如下两图:

(Full-speed Device Cable and Resistor Connections)

(Low-speed Device Cable and Resistor Connections)

高速辨认
  USB全速/低速辨认适当简略,但USB2.0,USB1.x就一对数据线,不能像全速/低速那样仅依托数据线上拉电阻方位就能辨认USB第三种速度:高速。因而关于高速设备的辨认就显得略微杂乱些。
  高速设备初始是以一个全速设备的身份呈现的,即和全速设备相同,D+线上有一个1.5k的上拉电阻。USB2.0的hub把它当作一个全速设备,之后,hub和设备经过一系列握手信号承认两边的身份。在这儿对速度的检测是双向的,比方高速的hub需求检测所挂上来的设备是高速、全速仍是低速,高速的设备需求检测所连上的hub是USB2.0的仍是1.x的,假如是前者,就进行一系列动作切到高速形式作业,假如是后者,就以全速形式作业。
下图展现了一个高速设备连到USB2.0 hub上的景象:

hub检测到有设备刺进/上电时,向主机通报,主机发送Set_Port_Feature恳求让hub复位新刺进的设备。设备复位操作是hub经过驱动数据线到复位状况SE0(Single-ended 0,即D+和D-全为低电平),并持续至少10ms。当然,hub不会把这样的复位信号发送给其他已有设备衔接的端口,所以其他连在该hub上的设备天然看不到复位信号,不受影响。

3、Host了解衔接的设备
每个hub运用它自己的中止端点向主机陈述它的各个端口的状况(关于这个进程,设备是看不到的,也不用关怀),陈述的内容仅仅hub端口的设备衔接/断开 的作业。假如有衔接/断开作业产生,那么host会发送一个 Get_Port_Status恳求(request)以了解更多hub上的信息。Get_Port_Status等恳求归于一切hub都要求支撑的 hub类规范恳求(standard hub-classrequests)。

4、Hub检测所刺进的设备是高速仍是低速设备
hub经过检测USB总线闲暇(Idle)时差分线的凹凸电压来判别所衔接设备的速度类型,当host发来Get_Port_Status恳求时,hub 就能够将此设备的速度类型信息回复给host。(USB 2.0规范要求速度检测要先于复位(Reset)操作)。

5、hub复位设备
当主机得悉一个新的设备后,主机操控器就向hub宣布一个 Set_Port_Feature恳求让hub复位其办理的端口。hub经过驱动数据线到复位状况(D+和D-全为低电平 ),并持续至少10ms。当然,hub不会把这样的复位信号发送给其他已有设备衔接的端口,所以其他连在该hub上的设备天然看不到复位信号,不受影响。

6、Host检测所衔接的全速设备是否是支撑高速形式
由于依据USB 2.0协议,高速(High Speed)设备在初始时是默许全速(Full Speed )状况运转,所以关于一个支撑USB 2.0的高速hub,当它发现它的端口衔接的是一个全速设备时,会进行高速检测,看看现在这个设备是否还支撑高速传输,假如是,那就切到高速信号形式,否 则就一向在全速状况下作业。

相同的,从设备的视点来看,假如是一个高速设备,在刚衔接bub或上电时只能用全速信号形式运转(依据USB 2.0协议,高速设备有必要向下兼容USB 1.1的全速形式)。随后hub会进行高速检测,之后这个设备才会切换到告知形式下作业。假设所衔接的hub不支撑USB 2.0,即不是高速hub,不能进行高速检测,设备将一向以全速作业。

7、Hub树立设备和主机之间的信息通道
主机不停得向hub发送 Get_Port_Status恳求,以查询设备是否复位成功。Hub回来的陈述信息中有专门的一位用来标志设备的复位状况。
当hub撤销了复位信号,设备就处于默许/闲暇状况(Default state),预备着主机发来的恳求。设备和主机之间的通讯经过操控传输,默许地址0,端点号0进行。在此刻,设备能从总线上得到的最大电流是100mA。(一切的USB设备在总线复位后其地址都为0,这样主机就能够跟那些刚刚刺进的设备经过地址0通讯。)

8、主机发送Get_Descriptor恳求获取默许管道的最大包长度
默许管道(Default Pipe)在设备一端来看就是端点0。主机此刻发送的恳求是默许地址0,端点0,尽管一切位分配地址的设备都是经过地址0来获取主机发来的信息,但由于枚 举进程不是多个设备并行处理,而是一次枚举一个设备的方法进行,所以不会产生多个设备一起呼应主机发来的恳求。
设备描述符的第8字节代表设备端点0的最大包巨细。关于Windows体系来说,Get_Descriptor恳求中的wLength一项都会设为64, 尽管说设备所回来的设备描述符(DeviceDescriptor)长度只要18字节,但体系也不在乎,此刻,描述符的长度信息对它来说是最重要的,其他 的瞄一眼就过了。Windows体系还有个古怪,当完结第一次的操控传输后,也就是完结操控传输的状况阶段,体系会要求hub对设备进行再一次的复位操作 (USB规范里边可没这要求)。再次复位的意图是使设备进入一个确认的状况。

9、主机给设备分配一个地址
主机操控器经过Set_Address恳求向设备分配一个仅有的地址。在完结这次传输之后,设备进入地址状况(Address state),之后就启用新地址持续与主机通讯。这个地址关于设备来说是毕生制的,设备在,地址在;设备消失(被拔出,复位,体系重启),地址被回收。同 一个设备当再次被枚举后得到的地址纷歧定是前次那个了。

10、主机获取设备的信息
主机发送 Get_Descriptor恳求到新地址读取设备描述符,这次主机发送Get_Descriptor恳求可算是诚意,它会仔细解析设备描述符的内容。设 备描述符内信息包含端点0的最大包长度,设备所支撑的装备(Configuration)个数,设备类型,VID(Vendor ID,由USB-IF分配), PID(Product ID,由厂商自己定制)等信息。Get_Descriptor恳求(Device type)和设备描述符(已抹去VID,PID等信息)见下图:

规范Get_Descriptor恳求(Get_DescriptorRequest)
设备描述符(DeviceDescriptor)

之后主机发送Get_Descriptor恳求,读取装备描述符(ConfigurationDescriptor),字符串等,逐个了解设备更详细的信 息。事实上,关于装备描述符的规范恳求中,有时wLength一项会大于实践装备描述符的长度(9字节),比方255。这样的作用就是:主机发送了一个 Get_Descriptor_Configuration的恳求,设备会把接口描述符,端点描述符等后续描述符一并回给主机,主机则依据描述符头部的标 志判别送上来的详细是何种描述符。

接下来,主机就会获取装备描述符。装备描述符总共为9字节。主机在获取到装备描述符后,依据里边的装备调集总长度,再获取装备调集。装备调集包含装备描述符,接口描述符,端点描符等等。
假如有字符串描述符的话,还要获取字符串描述符。别的HID设备还有HID描述符等。

11、主机给设备挂载驱动(复合设备在外)
主机经过解析描述符后对设备有了满足的了解,会挑选一个最合适的驱动给设备。在驱动的挑选进程中,Windows体系会和体系inf文件里的厂商 ID,产品ID,有时乃至用到设备回来来的产品版本号进行匹配。假如没有匹配的选项,Windows会依据设备回来来的类,子类,协议值信息挑选。假如该 设备曾经在体系上成功枚举过,操作体系会依据曾经记载的挂号信息而非inf文件挂载驱动。当操作体系给设备指定了驱动之后,就由驱动来担任对设备的拜访。
关于复合设备,一般应该是不同的接口(Interface)装备给不同的驱动,因而,需求比及当设备被装备并把接口使能后才干够把驱动挂载上去。
设备-装备-接口-端点联系见下图:

USB 设备-装备-接口-端点联系

实践情况没有上述联系杂乱。一般来说,一个设备就一个装备,一个接口,假如设备是多功用契合设备,则有多个接口。端点一般都有好几个,比方Mass Storage设备一般就有两个端点(操控端点0在外)。

12. 设备驱动挑选一个装备
驱动(留意,这儿是驱动,之后的作业都是有驱动来接收担任与设备的通讯)依据前面设备回复的信息,发送Set_Configuration恳求来正式确认 挑选设备的哪个装备(Configuration)作为作业装备(关于大多数设备来说,一般只要一个装备被界说)。至此,设备处于装备状况,当然,设备也 应该使能它的各个接口(Interface)。
关于复合设备,主机会在这个时分依据设备接口信息,给它们挂载驱动。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/238804.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部