硬件总线学习之路_USB总线体系协议简介

               其实也想过很久,要不要去,犹豫了很久,本来想,其实不用这样对技术痴迷,感觉,现在已经可以了,无所谓的非要这样,去委屈自己,但是最后还是决定过去了,因为,真的就几个月了,自己还没有完全的想好,还有一个原因,是自己想看看Android是个什么样的,趁这个机会好好的了解一下整个系统,毕竟,目前,它是最最流行和成功的系统,自己以后肯定会遇到,在工作中肯定会有交集的,所以,早点接触,比晚接触要好。抱着这样的一种

心态,去好好的学习,虚心的请教。所以,在这几个月了,一定要严格的要求自己,我也会使用这一段时间,将自己的点点滴滴记录下来。使自己在Android整个成长上可以跟Windows一样。关于硬件协议这一块,因为一直在搞驱动相关的,有必要好好的总结一下,当然大部分是借助一些规格书和一些技术文档。前面,一直疏忽了,其实,我应该在Windows的理解的时候,好好的参考下Android底层Linux的代码,毕竟它是开源的,后续一定要注意.


              今天,我们来看下,目前应该是最最流行,使用最多的总线,关于它的设备,已经大大的融入了我们的生活之中,它是什么总线了,USB总线,目前,它已经到了USB3.0的,最高速度为5Gb/s.


             USB是一种支持热插拔的高速串行传输总线,它使用差分信号来传输数据。USB支持总线供电和自供电两种供电模式。在总线供电模式下,设备最多可以得到500mA的电流。USB被设计成为向下兼容的模式,当有低速设备接在高速控制器上时,控制机可以通过分离传输来支持它们。

             我们知道,一个USB HOST最多可以同时支持128个地址,地址0作为默认地址,只在设备枚举期间临时使用,而不能被分配给任何一个设备,因此一个USB HOST最多可以同时支持127个地址,如果一个设备占用一个地址,那么可最多支持127个USB设备。在实际的USB体系中,如果要连接127个USB设备,必须要使用USB HUB,而USB HUB也是需要占用地址的,所以实际可支持的USB功能设备的数量是小于127的。

             USB体系采用分层的星型拓扑来连接所有的USB设备:


            

         
            以HOST-ROOT HUB为起点,最多支持7层(Tier),也就是说任何一个USB系统中最多可以允许5个USB HUB级联。一个复合设备(Compound Device),将同时占据两层或更多的层。

            ROOT HUB是一个特殊的USB HUB,它集成在主机控制器里,不占用地址。ROOT HUB不但实现了普通USB HUB的功能,还包括一些其他的功能。
 
            复合设备可以占用多个地址。所谓复合设备其实就是把多个功能设备通过内置的USB HUB组合而成的设备,比如带录音话筒的USB摄像头等。
 
            USB采用轮询的广播机制传输数据,所有的传输都由主机发起,任何时刻整个USB体系内允许一个数据包的传输,即不同物理传输线上看到的数据包都是同一被广播的数据包。

            USB采用,“令牌包”-“数据包”-“握手包”的传输机制,在令牌包中指定数据包去向或者来源的设备地址和端点,从而保证了只有一个设备对被广播的数据包/令牌包作出响应。握手包表示了传输的成功与否。
       
             数据包:这里的数据包跟上面的数据包不一样,这里指的是USB总线上数据传输的最小单位,包括SYNC,数据及EOP三个部分。其中数据的格式针对不同的包有不同的格式。但都以8位的PID开始,PID指定了数据包的类型(供16种),令牌包即指PID为IN/OUT/SETUP的包。

             端点(Endpoint):是USB设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传输。设备支持端点的数量是由限制的,除默认端点外低速设备最多支持2组端点(2个输入,2个输出),高速和全速设备最多支持15组端点。


             管道式主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB设备一旦上电就存在一个信息管道,即默认的控制管道,USB主机通过该管道来获取设备的描述,配置,状态,并对设备继续配置。

              USB设备连接到HOST时,HOST必须通过默认的控制管道来对其进行枚举,完成获得其设备描述,进行地址分配,获得其配置描述,进行配置等操作方可正常使用。USB设备的即插即用即依赖于此。

              枚举:是USB体系中一个很重要的活动,由一系列标准请求组成(若设备属于某个子类,还包含该子类定义的特殊请求)。通过枚举,HOST可以获得设备\的基本描述信息,如支持的USB版本,PID,VID,设备分类(CLASS),供电方式,最大消耗电流,配置数据,各种类型端点的数量及传输能力(最大包长度)。HOST根据PID和VID加载设备驱动程序,并对设备进行核实的配置。只有经过枚举的设备才能正常使用。对于总线供电设备,在枚举完成前最多可从总线获取100mA的电流。


               USB体系定义了四种类型的传输,它们是:
 
              控制传输:主要用于在设备连接时对设备进行枚举以及其他因设备不同的特定操作。
 
              中断传输:用于对延迟要求严格,小量数据的可靠传输,如键盘,游戏手柄等。
 
              批量传输: 用于对延迟要求宽松,大量数据的可靠传输,如U盘等。
 
              同步传输:用于对可靠性要求不高的实时数据传输,如摄像头,USB音响等。
 
              注意:中断传输并不意味着传输过程中,设备会先中断HOST,继而通知HOST启动传输。中断传输也是HOST发起的传输,采用轮询的方式询问设备是否有数据发送,若有则传输,否则NAK主机。

               不同的传输类型在物理上并没有太大的区别,只是在传输机制,主机安排传输任务,可占用USB带宽的限制以及最大包长度有一定的差异。
        
               1,标准请求:一共有11个标准请求,如得到设备描述,设置地址,得到配置描述等。所有USB设备均应支持这些请求。HOST通过标准请求来识别和配置设备。
        
               2,类(class)请求:USB还定义了若干个子类,如HUB类,大容量存储器类等。不同的类又定义了若干类请求,该类设备应该支持这些类请求。设备所属类在设备描述符中可以得到。

              3,厂商请求:这部分请求并不是USB规范定义的,而是设备生产商为了实现一定的功能而自己定义的请求。
        
              USB HUB提供了一种低成本,低复杂度的USB接口扩展方法。HUB的上行PORT面向HOST,下行PORT面对设备(HUB或功能设备)。在下行PORT上,HUB提供了设备连接检查和设备移除检测的能力,并给各下行PORT供电。HUB可以单独使能各下行PORT,不同PORT可以工作在不同的速度等级(高速/全速/低速)。

              HUB由HUB重发器(HUB Repeater),转发器(Transaction Translator)以及HUB控制器(HUB Controller)三部分组成。HUB Repeater是上行PORT和下行PORT之间的一个协议控制的开关,它负责高速数据包的重生与分发。HUB控制器负责和HOST的通信,HOST通过HUB类请求和HUB控制器通讯,获得关于HUB本身和下行PORT的HUB描述符,进行HUB和下行PORT的监控和管理。转发器提供了从高速和全速/低速通讯的转换能力,通过HUB可以在高速HOST和全速/低速设备之间进行匹配。HUB在硬件上支持Reset,Resume,Suspend.

             重生与分发:指的是HUB Repeater需要识别从上行(下行)PORT上接收到的数据,并分发到下行(上行)PORT.所谓分发主要是指从上行PORT接收到的数据包需要向所有使能的高速下行PORT发送,即广播。

             USB HOST在USB体系中负责设备连接/移除的检测,HOST和设备之间控制流和数据流的管理,传输状态的收集,总线电源的攻击。
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值