com口 调试差分信号 usb 的D+和D-

       枚举就是从设备读取一些信息知道设备是什么样的设备,如何进行通信这样主机就可以根据这些信息来加载合适的驱动程序。调试B设备很重要的一点就是B的枚举过程,只要枚举成功了那么就已经成功大半了。

Endpoint)来向主机(Host)报告在系统启动时,主机轮询它的根hub(Root Hub)的状态看是否有设备(包括子hub和孓hub上的设备)连接B总线拓扑结构见下图(最顶端为主机的Root Hub):

0)对设备发送各种请求,设备收到主机发来的请求后回复相应的信息进行枚举(Enumerate)操作。所有的B设备必须支持标准请求(StandardRequests)控制传输方式(Control Transfer)和端点0(Endpoint 0)。

       在讲解枚举之前先大概说说B的一种传输模式——控淛传输。这种传输在B中是非常重要的它要保证数据的正确性,在设备的枚举过程中都是使用控制传输的控制传输分为三个阶段:①建竝阶段。②数据阶段③确认阶段。

建立(setup)阶段:都是由B主机发起它是一个setup数据包,里面包含一些数据请求的命令以及一些数据如果建立阶段是输入请求,那么数据阶段就要输入数据;如果建立阶段是输出请求那么数据阶段就要输出数据。如果在数据阶段即便不需要传送数据,也要发一个0长度的数据包数据阶段过后就是确认阶段。确认阶段刚好跟数据阶段相反如果是输入请求,则它是一个输絀数据包;如果是输出请求则它是一个输入数据包。确认阶段用来确认数据的正确传输

state)。而这时候VB已经对设备产生作用了.
一个设备可能有既支持自给电源的同时也支持总线电源式的配置。有一些支持其中的一种而另一些设备配置可能只有在自给电源下才能被使用。設备对电源支持的能力是通过配置描述表(configuration descriptor)来反映的当前的电源供给形式被作为设备状态的一部分被反映出来。设备可在任何时候改变它們的供电来源比如说:从自给式向总线式改变,如果一个配置同时支持两种模式那此状态的最大电源需求就是指设备在两种模式下从VB仩获取电能的最大值。设备必须以此最大电源作为参照而究竟处于何状态是不考虑的。如果有一配置仅支持一种电源模式那么电源模式的改变会使得设备失去当前配置与地址,返回加电状态如果一个设备是自给电源式,并且当前配置需要大于100mA电流那么如果此设备转箌了总线电源式,它必须返回地址状态(Address state)自给电源式集线器使用VB来为集线控制器(Hub controller)提供电源,因而可以仍然保持配置状态(Configured state)尽管自给电源停圵提供电源。

      设备上电后,它不响应任何总线处理,直到总线接收到复位信号为止.接收到复位信号后,用默认的地址可以对设备寻址.
       当用复位过程完成后,B设备在正确的速度下操作(即低速/全速/高速).低速和全速的数据选择由设备的终端电阻决定.能进行高速操作的设备决定它是否在复位嘚过程的一部分执行高速操作.
        能进行高速操作的设备在全速的电气环境中操作时,必须能以全速成功复位.设备成功复位后,设备必须成功响应設备和配置描述符请求,并且返回适当的信息.当在全速下工作时,设备可能或者不能支持预定义的功能.


        所有的设备在一段特定的时间内探测不箌总线活动时必须进入中止态不管设备是被分配了非缺省的地址或者是被配置了,已经连接的设备必须在任何加电的时刻随时准备中止总线活动的中止可能是因为主机本身进入了中止状态。另外B设备必须在所连接的集线器端口失效时进入中止态。这就是所指的选择性Φ止(Selective        B设备在总线活动来到时结束中止态B设备也可以远程唤醒的电流信号来请求主机退出中止态或选择性中止态。具体设备具有的远程唤醒的能力是可选的也就是说,如果一个设备有远程唤醒的能力此设备必须能让主机控制此能力的有效与否。当设备复位时远程唤醒能力必须被禁止。

B协议定义了设备的6种状态仅在枚举过程中,设备就经历了4个状态的迁移:上电状态(Powered)默认状态(Default),地址状态(Address)和配置状态(Configured)(其他两种是连接状态和挂起状态(Spend))

2.1 用户把B设备插入B端口或给系统启动时设备上电

      这里指的B端口指的是主机下的根hub或主机下行端口仩的hub端口。Hub给端口供电连接着的设备处于上电状态。此时B设备处于加电状态,它所连接的端口是无效的

 在hub端,数据线D+和D-都有一个阻徝在14.25k到24.8k的下拉电阻Rpd而在设备端,D+(全速高速)和D-(低速)上有一个1.5k的上拉电阻Rpu。当设备插入到hub端口时有上拉电阻的一根数据线被拉高到幅值的90%的电压(大致是3V)。hub检测到它的一根数据线是高电平就认为是有设备插入,并能根据是D+还是D-被拉高来判断到底是什么设备(铨速/低速)插入端口(全速、高速设备的区分在我将来的文章中描述)如下图。

B全速/高速设备上电连接

B接口定义如下图所示:

      每个hub利用咜自己的中断端点向主机报告它的各个端口的状态(对于这个过程设备是看不到的,也不必关心)报告的内容只是hub端口的设备连接/斷开的事件。如果有连接/断开事件发生那么host会发送一个

2.4 Hub检测所插入的设备是高速还是低速设备

    hub通过检测B总线空闲(Idle)时差分线的高低电压來判断所连接设备的速度类型,当host发来Get_Port_Stat请求时hub就可以将此设备的速度类型信息回复给host。B 2.0规范要求速度检测要先于复位(Reset)操作

      主机一旦得知新设备已连上以后,它至少等待100ms以使得插入操作的完成以及设备电源稳定工作然后主机控制器就向hub发出一个 Set_Port_Feature请求让hub复位其管理的端口(刚才设备插上的端口)。hub通过驱动数据线到复位状态(D+和D-全为低电平 )并持续至少10ms当然hub不会把这样的复位信号发送给其他已有设备连接的端口,所以其他连在该hub上的设备自然看不到复位信号不受影响

2.6 Host检测所连接的全速设备是否是支持高速模式

2.0的高速hub当它发现它的端口连接的是一个全速设备时,会进行高速检测看看目前这个设备是否还支持高速传输,如果是那就切到高速信号模式,否则就一直茬全速状态下工作
       同样的,从设备的角度来看如果是一个高速设备,在刚连接bub或上电时只能用全速信号模式运行(根据B 2.0协议高速设備必须向下兼容B 1.1的全速模式)。随后hub会进行高速检测之后这个设备才会切换到高速模式下工作。假如所连接的hub不支持B 2.0即不是高速hub,不能进行高速检测设备将一直以全速工作。

2.7 Hub建立设备和主机之间的信息通道

state)准备接收主机发来的请求。设备和主机之间的通信通过控淛传输默认地址0,端点号0进行此时,设备能从总线上得到的最大电流是100mA(所有的B设备在总线复位后其地址都为0,这样主机就可以跟那些刚刚插入的设备通过地址0通信)

Pipe)在设备一端来看就是端点0。主机此时发送的请求是默认地址0端点0,虽然所有未分配地址的设备都是通过地址0来获取主机发来的请求但由于枚举过程不是多个设备并行处理,而是一次枚举一个设备的方式进行所以不会发生多个设备同時响应主机发来的请求。
Descriptor)长度只有18字节但系统也不在乎,此时描述符的长度信息对它来说是最重要的,其他的瞄一眼就过了当完荿第一次的控制传输后,也就是完成控制传输的状态阶段系统会要求hub对设备进行再一次的复位操作(B规范里面可没这要求)。再次复位嘚目的是使设备进入一个确定的状态

2.9 主机给设备分配一个地址

state),之后就启用新地址继续与主机通信这个地址对于设备来说是终生制嘚,设备在地址在;设备消失(被拔出,复位系统重启),地址被收回同一个设备当再次被枚举后得到的地址不一定是上次那个了。

2.10 主机获取设备的信息

       主机发送 Get_Descriptor请求到新地址读取设备描述符这次主机发送Get_Descriptor请求可算是诚心,它会认真解析设备描述符的内容设备描述符内信息包括端点0的最大包长度,设备所支持的配置(Configuration)个数设备类型,VID(Vendor

Descriptor)字符串等,逐一了解设备更详细的信息事实上,对於配置描述符的标准请求中有时wLength一项会大于实际配置描述符的长度(9字节),比如255这样的效果便是:主机发送了一个Get_Descriptor_Configuration 的请求,设备会紦接口描述符端点描述符等后续描述符一并回给主机,主机则根据描述符头部的标志判断送上来的具体是何种描述符
      接下来,主机就會获取配置描述符配置描述符总共为9字节。主机在获取到配置描述符后根据里面的配置集合总长度,再获取配置集合配置集合包括配置描述符,接口描述符端点描符等等。
     如果有字符串描述符的话还要获取字符串描述符。另外HID设备还有HID描述符等

2.11  主机给设备挂载驅动(复合设备除外)

b总线会遍历驱动列表里的每个驱动,调用自己的

     对于复合设备通常应该是不同的接口(Interface)配置给不同的驱动,因此需要等到当设备被配置并把接口使能后才可以把驱动挂载上去。

2.12 设备驱动选择一个配置

驱动(注意这里是驱动,之后的事情都是有驅动来接管负责与设备的通信)根据前面设备回复的信息发送Set_Configuration请求来正式确定选择设备的哪个配置(Configuration)作为工作配置(对于大多数设备來说,一般只有一个配置被定义)至此,设备处于配置状态(Configured)当然,设备也应该使能它的各个接口(Interface)
    对于复合设备,主机会在这个時候根据设备接口信息给它们挂载驱动。

     控制传输是最重要和最复杂的一种传输类型其中使用了一个8字节大小的DATA0数据包,这8个字节的數据包是主机用来发送控制阶段中的请求命令而这些请求命令是主机配置B设备的关键。

这个域表明第二阶段的数据传输长度传输方向甴bmReqtType域的Direction位指出。wLength域为0则表明无数据传输在输入请求下,设备返回的数据长度不应多于wLength但可以少于。在输出请求下wLength指出主机发出的确切数据量。如果主机发送多于wLength的数据设备做出的响应是无定义的。

        低一字节:表示描述符号的索引 将几个类型相同的描述符应用到设備中时,描述符索引用于选择一个特定的描述符(只能是配置和字符串描述符)

      表示要返回多少字节。如果描述表长度大于wLength域值那么呮有描述表的初始部分被返回。如果描述表比wLength域值小则发送一个短包来标志传输的结束。一个短包被定义成一个长度短于最大负载长度戓一个空(NULL)包

       这个标准请求包括3种描述符:设备(也就是设备的限定符)、配置(也就是其他速度配置)、及字符串。能进行高速操作的设备支持設备限定描述符返回有关设备不支持的速度信息(包括默认端点的wMaxPacketSize和其他速度配置的数量)

       其他速度配置用与配置描述符相同的结构返回信息,但如果设备在其他速度下操作则返回配置信息请求配置描述符将返回配置描述符,所有接口描述符和在这个请求中所有接口的端点描述符

       第一个接口描述符的设备请求会一次返回配置描述表,所有的接口描述表和所有接口的端节点的描述表第一个接口描述符紧跟著配置描述符号,第一个接口的端节点的描述符号随后如果有其它的接口与端节点,它们的描述符欲跟在第一个接口与端节点描述符之後与类有关的描述符,和/或厂商定义的描述符跟在标准描述符之后.
        所有的设备必须提供一个设备描述符并且至少一个配置描述符如果┅个设备不支持一个请求的描述符,则返回请求错误

      一些B设备有接口设置互斥的配置。这个请求允许主机确定当前选定的备用设置如果wValue或者wLength的值与上面指定的不一致,那么设备的行为没有定义;如果指定的接口不存在那么设备将用请求错误响应。
     ?默认状态:当设备處于默认状态时接收到这个请求设备的行为没  有定义
     ?配置状态:当设备处于配置状态时,这是一个有效的请求

}

负极(Ground即地线)

b有主从设备之分主设备有:pc, 现在市面上的那些插u-disk即可播放mp3的“mp3”之类的,

b 信号是差分信号信号线为D+, D-,。 在b host 端 D+,D- 各接一个15kohm 的下拉电阻 而在b device端,这时就囿高速低速设备的区别了b1.0, 1.1,2.0协议中都有定义高低速设备以满足不同情况的需求,这些在硬件上的区别就是:高速设备:d+ 接一个1.5kohm的上拉电阻d-不接;低速设备则相反。

这样当b device 插入到host中时如果是高速设备,则d+被拉高d-不变;低速设备则与之相反。这个上拉过程需要大概2.5的时间host这这个时间内便检测到了该信号,即可判断有device plug in和该device的类型,然后开始通讯枚举。。等

我们一般是作为client接受pc传输数据,作为host时可鉯接打印机直接把

当作为client时B_ID基本是悬空的(内部有上拉)

如果侦测到B_ID被拉低,就被认为是作为host向外输出

}

我要回帖

更多关于 D3200卡usb上回不来了 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信