精华内容
下载资源
问答
  • 从零开始学USB(一、基础知识1)

    万次阅读 多人点赞 2018-12-08 19:04:26
    1.什么是USB? USB是Universal Serial Bus的缩写,中文译为通用串行总线。 正如USB的第一个单词表述的那样,为了通用。 那么我们看一下,还有哪些总线不是串行的,哪些是不通用的串行总线 下表来自《USB Complete...

    1.什么是USB?

    USB是Universal Serial Bus的缩写,中文译为通用串行总线。

    正如USB的第一个单词表述的那样,为了通用。

    那么我们看一下,还有哪些总线不是串行的,哪些是不通用的串行总线

    下表来自《USB Complete》里面对一些常见总线所总结的一些区别:

    当然上表中关于SPI的2.1M肯定是不对的,之前学习单片机的时候用STM32的SPI接口读写SD卡,现在都可以支持40Mbps的速率了。

     

    2.为什么要有USB?

    上面已经提到了,在USB出现之前,其实计算机领域中,已经存在众多的接口,而且不同的应用领域,已有一些相对来说是广泛使用的各种接口了。

    但是,对于计算机等使用的普通用户来说,由于接口太多,而容易被搞得晕头转向。再加上各个接口从硬件形状和软件配置也都不一样,导致不兼容,为了不同的应用,而要配置多种不同的硬件接口,设置对于有些硬件接口来说,还需要手动去配置一些更细节的参数。

    关于USB出现之前,计算机领域中的接口太多太繁杂,可以用下面这张,关于PC机箱背后的接口的图片来说明:

    PC机箱后面的众多接口

    PC机箱后面的众多接口

    比如老式的台式电脑中,主机箱通常需要包括键盘鼠标用的PS2接口,UART串口,SCSI接口,PCI接口,耳麦接口,话筒接口,网口,并口,调制解调器,显示屏等接口。

     

    有了USB接口之后的PC机箱背后的接口

    总的来说,在USB出现之前,各种接口太多,而且都不太容易使用,互相之间的兼容性也较差,因此,才出现了USB。

    而万能的USB接口出现的话,整个PC机箱背后的接口,就不那么繁杂,显得清静多了:

     

    而在有了USB后的台式机中,鼠标,键盘,调制解调器,复印机,打印机,移动硬盘,以及相对于USB出现更后的设备大多数都选择了USB接口。

    USB出现的最初的目的,根据USB规范中的解释,是为了:

    1. 将PC和电话能连起来

      由于大家都认识到,下一代的应用,肯定是实现计算机设备和通讯设备的完美融合。而且,为了实现移动领域内的人机数据的交互,也需要方便且不贵的连接方案。

      但是,计算机领域和通讯领域却是各自为政的发展,没有考虑互联性。由此,USB的出现,就是为了解决这一类互联问题的

    2. 方便用户使用

      以前的一些设备,多数不支持即插即用,而且很多设备还需要懂行的用户去手动配置,然后才可以正常工作

      而USB的出现,使得用户不用关心设备的细节,不需要去另外再配置什么参数,直接插上就可以用了,而且还支持即插即用,很是方便

    3. 接口扩展性要好

      之前的众多接口,导致不同的应用,需要使用不同的接口,很是繁琐。

      USB的出现,支持众多的应用,都使用统一的USB的接口,方便了用户,不需要再搞懂各种接口的用途和差异。

    总的来说,USB的出现,是希望通过此单个的USB接口,同时支持多种不同的应用,而且用户用起来也很方便,直接插上就能用了,也方便不同的设备的之间的互联。

    说白了,就相当于在之前众多的接口之上,设计出一个USB这么个万能的接口,以后各种外设,都可以用这一种接口即可。

    这估计也是USB的名称中的Universal通用的这一个词的来历吧。

    3.USB的通用标识

     

    说明:USB基础主要是说一些概念性的东西,所以大多信息都是来自网络,如有侵权麻烦留言联系我删除。

    展开全文
  • 从零开始学USB(三、基础知识3)

    千次阅读 多人点赞 2018-12-12 21:32:14
    1. USB 2.0协议内容概览 当前最新的USB协议,已经发展到USB 3.0了。但是主流的USB设备和技术,还是以USB 2.0居多。所以此文,主要是以USB 2.0为基础来学习USB协议的基础知识,当然,会在相关内容涉及到USB 3.0的...

    1. USB 2.0协议内容概览

    当前最新的USB协议,已经发展到USB 3.0了。但是主流的USB设备和技术,还是以USB 2.0居多。所以此文,主要是以USB 2.0为基础来学习USB协议的基础知识,当然,会在相关内容涉及到USB 3.0的时候,也把USB 3.0的相关内容添加进来。

    关于USB 2.0和USB 3.0等USB的协议规范,可以去官网下载:

    http://www.usb.org/developers/docs/

    下图就是USB2.0协议的主要章节。

    借用网友总结的图表,详细信息如下:

     USB 2.0协议的内容组成

    章节名称内容描述页数
    1介绍介绍了为何要有USB以及USB协议内容的涵盖范围。此章节最重要的信息就是,引用了USB Device Class规范。不需要看。2
    2术语和缩写名词解释,一般的协议都会有这一章节的。无需看。8
    3背景说明了USB的来由,以及目的是为了是USB的用户,注意不是为了是USB的开发者,更加容易使用。介绍了Low,Full,High Speed三种不同的速度以及对应的应用领域。所以也不需要看。4
    4系统架构综述可以从这章开始看。此章介绍了USB系统的基本架构,包括拓扑关系,数据速度,数据流类型,基本的电气规范。10
    5USB数据流模型此章开始介绍USB中数据是如何流向的。其先介绍了端点和管道,然后对控制,中断,等时,批量四种传输类型进行了详细阐述。其中,重要的一点是,要搞懂每种传输类型,当然,这对于初学者来说可能会有那么一点难。60
    6机械的此章详细介绍了USB的两种标准的连接头,即接口的类型,其中需要了解的一点是,A类接口旨在用于数据向下流的(downstream),而B类接口旨在用于数据向上流的(upstream)。因此,你应该知道,不应该也不可能去将一个USB线,连到两个都是upstream的端口上。而所有的full或high speed的USB线,都是可拔插的,而低速的USB线,应该是焊死的。如果你不是USB接口的制造商,那么就没必要细看这章,而只需要大概浏览一下其中关于USB的接口类型的相关内容即可。33
    7电子的此章详解了USB总线上的电子信号,包括线阻,上下沿的时间,驱动者和接受者的规范定义,以及比特位编码,比特位填充等。此章中需要知道的,更重要的一点是,关于使用电阻在数据线上的偏压,去实现USB设备的速度类型检测,以及设备是总线供电还是自供电。除非你是在晶元级别上设计USB数据收发模块的相关人士,否则都可以直接跳过此章节。而正常的USB设备的数据手册中,都会有相关的解释,说明关于USB总线阻抗需要匹配电阻的阻值是多少。75
    8协议层此章,从字节的级别,解释了USB数据包的细节,包括了同步,PID,地址,端点,CRC域。多数的开发人员都还没注意到这部分的底层的协议层,因为USB的设备中的硬件IC,会帮你做这些事情的。然而,多学习和了解一些关于报告状态和握手协议方面的知识,还是有必要的。。45
    9USB设备框架工作[1]此章,是整个USB协议中,用到的最多的一章。此章详细阐述了USB总线枚举的过程,以及一些USB Request的详细语法和含义,比如set address,get descriptor等,这些相关内容在一起,就构成了最常用的USB的协议层,也是通常USB编程人员和开发者所看到的这一层。此章节,必须详细阅读和学习。36
    10USB主机的硬件和软件此章介绍了和USB Host相关的知识。包括了数据帧frame和微帧microframe的产生,主机控制器的需求,软件机制和USB的驱动模型等。如果你不是去设计USB Host的话,那么就直接跳过此章即可。23
    11Hub规范此章定义了USB Hub相关的规范,包括了Hub的配置,分离传输,Hub类的标准描述符等。同理,如果你不是去设计USB Hub,那么也可以忽略此章。143

     

    [提示]提示
    1. 关于第九章=chapter 9=ch9,多说明一下,由于其特殊性,特殊在于大部分和USB协议相关的内容,都在此章节内

      所以,你会在其他地方看到有关此ch9的说法。比如Linux源码中关于USB协议实现的部分的代码,会看到有对应的头文件是

      include\linux\usb\ch9.h

      此文件,就是指的是USB规范中的chapter 9,第九章。

      这也意味着,以后其他人如果谈及USB的话,说到第九章,指的就是此USB规范中的chapter 9,因为其包含了USB协议的软件实现所有关的多数的内容。

    所以,由上述总结,我们可以看出:

    对于只是为USB外设开发驱动的开发者的话,那么有关的章节只有:

    • 4 系统架构综述
    • 5 USB数据流模型
    • 9 USB设备框架工作
    • 10 USB主机的硬件和软件

    如果是对于USB外设的电子设计研发人员,有关系的章节有:

    • 4 系统架构综述
    • 5 USB数据流模型
    • 6 机械的
    • 7 电子的

     

    2. USB协议的版本和支持的速度

    USB协议,也像其他协议一样,经历过很多个版本,但是正式发布出来的,主要有4个。

    其中,从开始的USB 1.1,发展到后来的USB 2.0,以及最新的协议版本是USB 3.0.

    不过这三个版本都是针对的是有线的(corded)设备来说的,在USB 2.0和USB 3.0之间,发布过一个是针对无线设备的USB协议,叫做USB Wireless,也被称为USB 2.5。

    其中,USB 1.1中所支持的速度是低速(Low Speed)的1.5Mbits/s,全速(Full Speed)的12Mbits/s,而USB 2.0提高了速度至高速(High Speed)的480Mbits/s,而最新的USB 3.0,支持超高速(Super Speed)的5Gbits/s。

    下面简要总结一下,各个USB协议版本的演化历史:

    下表展示了USB协议的版本的演化

    USB协议针对的设备对应的速度备注
    版本号发布日期 名称速率 
    1.11998年8月有线的

    Low Speed
    Full Speed

    1.5Mbits/s=192KB/s
    12Mbits/s=1.5MB/s

     
    2.02000年4月有线的High Speed480Mbits/s=60MB/s 
    2.52010年9月无线的  Wireless USB 1.1
    3.02008年11月有线的Super Speed5.0Gbits/s=640MB/s 

    3.为何USB的速度,最开始没有设计的更快些?

    有人会问,既然USB技术本身可以设计成速度更快的,为何最开始不把USB的设计成速度更快的呢?比如,最开始为啥没有把USB设计成2.0的那样的速度呢?

    那是因为,任何规范和协议,都离不开当时的背景。关于USB的速度发展,其有其自身的考虑。

    比如最开始的USB 1.1,对于低速的1.5Mbits/s的速度,虽然速度很低,但是由于此速度,主要用于USB鼠标,键盘等低速设备,所以本身就够用了,而且速度低还有个好处,那就是对于电磁辐射EMI的抗干扰能力较强些,而使得设计和制造对应的硬件设备的成本要降低些,比如可以使用相对便宜的陶瓷振荡器(resonator)做晶振(crystal)。

    而后来的USB 2.0,的出现,则是为了满足人民群众日益增长的对于高速速度传输方面的需求,比如你从MP3里面拷贝歌曲出来,如果是USB 1.1,那么实际效果最快也就1MB左右,而如果是USB 2.0,平均效果大概有3MB/s,5MB/s,性能好的可达10MB/s,20MB/s,所以,如果拷贝个1G的东西,相当于USB 1.1要1小时左右,而USB 2.0只要1分钟左右。因为如果没有USB 2.0的出现的话,那么现在的人们,早就放弃了USB了,因为谁也忍受不了这个太慢的速度。所以为了满足大家的需求,才有了USB 2.0的出现。

    而对于最新的USB 3.0,同理,也是为了满足现在的一些及以后的可能的需求,即希望拷贝蓝光光碟的内容到硬盘上,动辄都是几个G的内容,以USB 2.0的速度,那怎么说也得个几分钟,而有了USB 3.0后,就有望实现,几秒或者几十秒,哗的一下,就把多少个G的东西,拷贝传输到别的介质上了。当然,这只是理论上的,实际的USB 3.0的速度,受到USB设备的硬件本身能力,和对应的软件驱动,以及所设计的介质不同,而会有不同的速度。

    4. USB的功能和特点

    USB规范提供了一系列可以实现多种价格/性能的属性集成点,可以启用允许在系统和组件级别进行区分的功能。
    功能分为以下优点:

    方便终端用户使用

    • 电缆和连接器具有唯一的型号
    • 对终端用户隐藏了电气细节(例如,总线终端)
    • 自识别外设,自动完成配置和驱动程序的功能映射
    • 可动态连接和可重新配置的外围设备

    工作负荷和应用范围广

    • 可以同时支持速度几Kb/s至Mb/s的设备
    • 在同一套总线上可以同时支持同步和异步传输类型
    • 支持多连接,支持对多个设备的同时操作
    • 支持多大127个物理设备
    • 在主机和设备上支持对多个数据和消息流的传输
    • 允许使用复合设备,即具有多个功能的外设
    • 具有较小的协议开销,因而总线利用率较高

    等时带宽

    • 适用于电话,音频,视频等的保证带宽和低延迟

    灵活性

    • 支持多种不同大小的分组,允许在一定范围内选择设备的缓冲区
    • 通过适应数据包缓冲区大小和延迟,允许广泛的设备数据速率
    • 协议中内置了缓冲区处理的流量控制

    稳定性

    • 协议中内置了错误处理/故障恢复机制
    • 用户感知的实时识别设备的动态插入和移除(热插拔)
    • 支持识别故障设备

    与PC行业的协同作用

    • 协议易于实施和集成
    • 与PC即插即用架构一致
    • 利用现有的操作系统接口

    低成本实施

    • 低成本子通道,速率为1.5 Mb / s
    • 针对外设和主机硬件的集成进行了优化
    • 适合开发低成本外围设备
    • 所需的电缆和连接器价格低廉
    • 使用商用技术

    升级路径
    USB体系结构可以升级,从而在一个系统中支持多个通用串行总线控制器

     

    展开全文
  • 从零开始学USB(四、USB系统结构)

    千次阅读 多人点赞 2018-12-14 21:35:49
    一个USB系统可以三个定义区域来描述: USB互联 USB设备 USB主机 USB互连是USB设备与USB主机连接和通信的方式。 这包括以下内容: 总线拓扑:USB设备与主机之间的连接模型。 层间关系:USB在系统中的每一层都要...

    一个USB系统可以从三个定义区域来描述:

    • USB互联
    • USB设备
    • USB主机

    USB互连是USB设备与USB主机连接和通信的方式。 这包括以下内容:

    总线拓扑:USB设备与主机之间的连接模型。
    层间关系:USB在系统中的每一层都要完成一定的任务。
    数据流模型:数据在生产者之间通过USB在系统中移动的方式和消费者。
    任务规划:USB提供可以共享的互连机制。通过规划对互连机制的访问,可以支持同步 

    1.总线拓扑结构

    USB设备和USB主机通过USB总线连接。USB的物理连接是一个星型结构,集线器(HUB)位于每个星形结构的中心,每一段都是主机和某个集线器,或某一功能设备之间的一个点到点的连接,也可以是一个集线器或功能模块之间的点到点的连接。

    上图给出了USB的拓扑结构。

    由于时间限制允许集线器和电缆传播时间,最大层数允许为7(包括根层)。

    请注意,在七层中,主机和任何设备之间的通信路径中最多可以支持五个非根集线器。

    Host端有一个Root Hub,可提供一个或多个USB下行端口,每个端口可以连接一个USB Hub或一个USB Device。USB Hub,是用于USB 端口扩展的,即USB Hub可以将一个USB端口扩展为多个端口,图1中的每个Func(Function)就是一个USB Device,如USB键盘,USB鼠标,USB MODEM,USB硬盘等等。

    Compound Device是指带一个Hub和一个或多个不可删除的USB Device的复合设备,一个USB系统可连接多达127个Function。

     

    USB主机(USB Host):任何USB系统中只有一个主机。 主机系统的USB接口称为主机控制器。 主机控制器可以以硬件,固件或的组合来实现软件。 根集线器集成在主机系统内以提供一个或多个端点。PC端的USB都是Host,所以将两台PC的USB口通过A-A USB电缆连接起来,是不能实现通信,如果将两个host连起来通信,这样一来的一个USB的系统有了两个的host,与它的网络协议冲突。此处,OTG引入了一个新的概念,HNP(Host Negotiation Protocol),主机协商协议,允许两个设备之间互相协商谁去当Host。不过,即使在OTG中,也只是同一时刻,只存在单个的Host,而不允许存在多个Host的。

    USB设备:

    • 集线器:提供可以访问USB总线的更多的接入点。
    • 功能部件:向系统提供特定的功能,如鼠标,键盘,音响等。

    当然,一个USB设备要能正常工作,必须满足一下条件:

    1. 支持USB协议
    2. 可以对诸如配置和复位等标准的USB操作做出相应
    3. 具有标准的描述消息

    注意:一个USB系统只能有一个USB主控制器,用8位地址表示下面的USB设备, 一共128个地址。但是USB主控制器下面必须带一个Root Hub, hub也算一个设备,换句话说, 还剩下 127个地址给用户。

     

    展开全文
  • 前面章节学习了USB的包的简要结构组成。本节四种分类上来学习一下他们的使用场景。   一、令牌包 令牌由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字段。 PING特殊令牌包也具有与令牌包相同的...

    前面章节学习了USB的包的简要结构组成。本节从四种分类上来学习一下他们的使用场景。

     

    一、令牌包

    令牌由PID组成,指定IN,OUT或SETUP数据包类型以及ADDR和ENDP字段。 PING特殊令牌包也具有与令牌包相同的字段。对于OUT和SETUP事务,地址和端点字段唯一识别将接收后续数据包的端点。对于IN事务,这些字段唯一地标识哪个端点应该传输数据包。对PING事务,这些字段唯一地标识哪个端点将使用握手数据包进行响应。只有主机才能发出令牌包。

    • 一个IN PID定义从设备到主机的数据事务。
    • OUT和SETUP PID定义从主机到设备的数据事务。
    • PING PID定义从函数到主机的握手事务。
    • 建立(SETUP)令牌包:只用在控制传输中,和输出令牌包作用一样,也是通知设备将要输出一个数据包,两者区别在于:SETUP令牌包后只使用DATA0数据包,且只能发送到设备的控制端点,并且设备必须要接收,而OUT令牌包没有这些限制。

    令牌包具有五位CRC,覆盖地址和端点字段,如上所示。 CRC不包括PID,它有自己的检查字段(高低四位补码)。 在三个字节的分组字段数据之后,令牌和SOF分组由EOP分隔。 如果数据包解码为其他有效令牌或SOF,但在三个字节后不以EOP终止,则必须将其视为无效并由接收方忽略。

    即IN OUT SETUP (PING)这三个令牌包的地址字段都是设备地址+端点地址的形式组成。

    而SOF令牌包是把这 11bit的字段合成了一个frame帧号字段(时间戳)。

     

    拆分事务特殊令牌数据包USB为拆分事务定义了一个特殊令牌:SPLIT。 与其他普通3字节令牌包相比,这是一个4字节令牌包。 拆分事务令牌包提供额外的事务类型以及附加的事务特定信息。 拆分事务令牌用于支持主机控制器与高速运行的集线器之间的分离事务,其中全速/低速设备与其下游的一些端口进行通信。 定义了两个使用SPLIT特殊令牌的拆分事务:启动拆分事务(SSPLIT)和完全拆分事务(CSPLIT)。 SPLIT特殊标记中的字段指示特定的拆分事务。

    1.1分离传输(Split Transactions)

    当集线器连接有全速/低速设备时,仅在主机控制器和集线器之间使用高速拆分事务。此高速拆分事务用于通过集线器和某些全速/低速设备端点启动全速/低速事务。高速拆分事务还允许从集线器检索全速/低速事务的完成状态。这种方法允许主机控制器通过高速事务启动全速/低速事务,然后继续其他高速事务,而不必等待全速/低速事务继续/完成速度较慢。有关拆分事务的状态机和事务定义的更多详细信息,请参见第11章。(主要讲解HUB的组成和作用)

    高速拆分事务有两部分:start-split和complete-split。 拆分事务仅定义为在主机控制器和集线器之间使用。 没有其他高速或全速/低速设备使用拆分事务。图8-6显示了组成通用启动拆分事务的数据包。 令牌阶段有两个数据包:SPLIT特殊令牌和全速/低速令牌。 根据数据传输的方向以及是否为事务类型定义了握手,令牌阶段可选地后跟数据包和握手包。 启动拆分事务可以包含2,3或4个数据包,具体取决于特定的传输类型和数据方向。

    图8-7显示了组成通用完全拆分事务的数据包。 令牌阶段有两个数据包:SPLIT特殊令牌和全速/低速令牌。 根据数据传输方向和特定事务类型,数据或握手包在完全拆分中跟随令牌相位包。 完整的拆分事务可以包含2或3个数据包,具体由传输类型和数据方向决定。

    拆分事务的结果由完全拆分事务返回。 图8-8显示了示例中断IN传输类型的概念“转换”。 主机向集线器发出启动拆分(用1表示),然后可以继续执行其他高速事务。 start-split导致集线器稍后发出全速/低速IN令牌(由2表示)。 设备使用数据包响应IN令牌(在此示例中),并且集线器通过与设备的握手进行响应。 最后,主机稍后发出完整拆分(由3表示)以检索设备提供的数据。请注意,在示例中,集线器在完成拆分之前向设备端点提供全速/低速握手(在此示例中为ACK),并且完全拆分未向集线器提供高速握手。

     

    正常的全速/低速OUT事务同样在概念上“转换”为开始拆分和完全拆分事务。 图8-9显示了示例中断OUT传输类型的“转换”。 主机发出启动拆分事务,包括SSPLIT特殊令牌,OUT令牌和DATA数据包。 该集线器有时会在全速/低速总线上发出OUT令牌和DATA数据包。 设备通过握手进行响应。 稍后,主机发出完全拆分事务,并且集线器响应设备提供的结果(全速/低速数据或握手)。

    接下来的两节描述了构成详细的开始和完整拆分令牌包的字段。 图8-10和图8-12显示了split-transaction令牌包中的字段。 SPLIT特殊标记遵循通用标记格式,并以PID字段(在SYNC之后)开始,以CRC5字段(和EOP)结束。 Start-split和complete-split令牌包都是4个字节长。 SPLIT交易必须仅来自主机。 start-split标记在第8.4.2.2节中定义,完整拆分标记在第8.4.2.3节中定义。

     

    1.2 开始 - 拆分传输令牌(Start-Split Transaction Token)

     

    • Hub addr字段包含支持指定的全速/低速设备的集线器的USB设备地址,用于此全速/低速事务。
    • 将SC(开始/完成)字段设置为零的SPLIT特殊令牌包表示这是一个启动 - 拆分事务(SSPLIT)。
    • “端口”字段包含此全速/低速事务所针对的目标中心的端口号。 如图8-11所示,共有128个端口被指定为PORT <6:0>。 主机必须为单个和多个TT集线器实现正确设置端口字段。 单个TT集线器实现可以忽略端口字段。

    • S(速度)字段指定此中断或控制事务的速度,如下所示:
    1. 0  - 全速
    2. 1  - 低速
    • 对于批量IN / OUT和等时IN开始分割,S字段必须设置为零。 对于批量/控制IN / OUT,中断IN / OUT和同步IN开始分离,E字段必须设置为零。
    • 对于全速等时OUT启动拆分,S1(启动)和E(结束)字段指定高速数据有效负载如何对应于全速数据包的数据,如表8-2所示。

    等时OUT启动 - 拆分事物使用这些编码来允许集线器检测由于缺少具有需要多个启动拆分的数据有效负载的端点的接收启动 - 拆分事务而导致的各种错误情况。 例如,大的全速数据有效载荷可能需要三个开始 - 拆分事务:startsplit / begin,start-split / middle和start-split / end。 如果集线器未收到任何这些事务,它将忽略全速事务(如果未收到start-split / beginning),或者它将强制相应的全速事务发生错误(如果有 其他两笔交易未收到)。 通过在微帧期间不接收开始分割,可以检测其他错误条件。ET(端点类型)字段指定全速/低速事务的端点类型,如表8-3所示。

    此字段告诉集线器将哪个拆分事务状态机用于此全速/低速事务。 全速/低速设备地址和端点号信息包含在SPLIT特殊令牌包之后的普通令牌包中。

    1.3 完成拆分传输令牌(Complete-Split Transaction Token)

     

    • SC字段设置为1的SPLIT特殊令牌包表示这是一个完全拆分事务(CSPLIT)。
    • U位保留/未使用,必须复位为零(0B)。
    • 完全拆分令牌包的其他字段具有与开始拆分令牌包相同的定义。

    1.4 帧起始数据包(Start-of-Frame Packets)

    帧速率(SOF)数据包由主机以全速总线的标称速率每1.00 ms±0.0005 ms发出一次,对于高速总线则为125μs±0.0625μs。 SOF数据包由一个PID指示数据包类型,后跟一个11位帧号字段,如图8-13所示。


    SOF令牌包括仅令牌事务,其以对应于每个帧的开始的精确定时间隔分配SOF标记和伴随帧号。 所有高速和全速功能(包括集线器)都接收SOF数据包。 SOF令牌不会导致任何接收函数生成返回数据包; 因此,无法保证向任何给定功能提供SOF。

    SOF包提供两条定时信息。 当检测到SOF PID时,通知功能SOF已经发生。 帧定时敏感功能,不需要跟踪帧数(例如,全速运行集线器),只需解码SOF PID; 他们可以忽略框架号码及其CRC。 如果函数需要跟踪帧编号,它必须同时理解PID和时间戳。不特别需要总线定时信息的全速设备可以忽略SOF分组。

     

    令牌包总结:

     

    举例

     

     

    举例:

     

     

    二、数据包

    数据包由PID,包含零个或多个字节数据的数据字段和CRC组成,如图8-15所示。 有四种类型的数据包,由不同的PID识别:DATA0,DATA1,DATA2和MDATA。 定义了两个数据包PID(DATA0和DATA1)以支持数据切换同步。 所有四个数据PID都用于高带宽高速等时端点的数据PID排序。 在拆分事务中使用三个数据PID(MDATA,DATA0,DATA1)。

    数据必须始终以整数个字节发送。 数据CRC仅在数据包中的数据字段上计算,并且不包括PID,PID具有其自己的检查字段。低速设备允许的最大数据有效负载大小为8个字节。 全速设备的最大数据有效负载大小为1023.高速设备的最大数据有效负载大小为1024字节。

     

    数据切换同步和重试:USB提供了一种保证数据发送器和数据之间数据序列同步的机制跨多个交易的接收者。这种机制提供了一种保证握手的方法交换阶段由发送器和接收器正确解释。该机制提供了一种保证发送器和接收器正确解释事务的握手阶段的方法。通过使用DATA0和DATA1 PID以及数据发送器和接收器的单独数据切换序列位来实现同步。仅当接收器能够接收数据并接收具有正确数据PID的无差错数据包时,接收器序列位才会切换。仅当数据发送器接收到有效的ACK握手时,发送器序列位才会切换。数据发送器和接收器必须在事务开始时使其序列位同步。使用的同步机制因事务类型而异。 等时传输不支持数据切换同步。有些情况使用状态机以更紧凑的形式描述了数据切换同步。 它不使用显式标识DATA0和DATA1,而是使用值“DATAx”来表示DATA0 / DATA1 PID中的任何一个/两个。 在特定数据PID很重要的某些情况下,使用标记为“x”的另一个变量,其中DATA0的值为0,DATA1的值为1。高速,高带宽等时和中断端点支持类似但不同的数据同步技术,称为数据PID排序。 使用该技术代替数据切换同步。

     

    三、握手包

    握手数据包,如图8-16所示,仅由PID组成。 握手包用于报告数据事务的状态,并且可以返回指示成功接收数据,命令接受或拒绝,流控制和停止条件的值。 只有支持流控制的事务类型才能返回握手。 握手总是在事务的握手阶段返回,并且可以在数据阶段返回而不是数据。 在一个字节的分组字段之后,握手分组由EOP分隔。 如果数据包解码为有效的握手但在一个字节后不以EOP终止,则必须将其视为无效并由接收器忽略。

    握手包有四种类型,一种是特殊的握手包:

    • ACK表示在数据字段上没有比特填充或CRC错误的情况下接收到数据包,并且正确接收了数据PID。 当序列位匹配且接收器可以接受数据或者序列位不匹配且发送器和接收器必须彼此重新同步时,可以发出ACK。 ACK握手仅适用于已发送数据的事务以及预期握手的事务。 主机可以为IN事务返回ACK,也可以通过OUT,SETUP或PING事务的函数返回ACK。
    • NAK表示函数无法接受来自主机(OUT)的数据,或者函数没有数据要传输到主机(IN)。 NAK只能由IN事务的数据阶段或OUT或PING事务的握手阶段中的函数返回。 主持人永远不会发出NAK。 NAK用于流量控制目的,以指示功能暂时无法传输或接收数据,但最终能够在不需要主机干预的情况下执行此操作。
    • STALL由函数返回,以响应IN令牌或在OUT的数据阶段之后或响应PING事务。 STALL表示函数无法传输或接收数据,或者不支持控制管道请求。 返回STALL(对于除默认端点之外的任何端点)后的函数状态是未定义的。 在任何情况下都不允许主机返回STALL。 STALL握手由设备在两种不同的场合之一使用。 第一种情况称为“功能停顿”,即设置与端点关联的暂停功能。功能失速的特殊情况是“命令“当主机明确设置端点的暂停功能时发生命令停顿。一旦功能的端点停止,该功能必须继续返回STALL,直到通过主机干预清除导致暂停的条件。第二种情况称为“协议停顿”,详见第8.5.3节。 协议停顿对于控制管道是唯一的。 协议停顿与意义和持续时间中的功能停顿不同。 在控制传输的数据或状态阶段期间返回协议STALL,并且STALL条件在下一个控制传输(Setup)开始时终止。 本节的其余部分涉及功能失速的一般情况。
    • NYET是一种高速握手,在两种情况下返回。 它由高速端点返回。 当全速/低速交易尚未完成或者集线器无法处理拆分交易时,NYET也可以由集线器返回以响应拆分事务。 
    • ERR是仅返回高速的握手,允许高速集线器报告全速/低速总线上的错误。 它仅作为拆分事务协议的一部分由高速集线器返回。

     

    如下图,数据包后面就跟随有握手包。同时也可以看到数据包没出错,是在正常翻转的。

     

    展开全文
  • USB电缆:标准的USB电缆包括一对用于电源分配的20~28AWG规格的线对和一对28AWG规格的双绞线,并具有屏蔽和完整的保护层。 高速(480 Mb / s)和全速(12 Mb / s)要求使用带有两根电源导线和双绞线信号导线的屏蔽...
  • USB是串行总线,所以数据是一位一位地在数据线上传送的。既然是一位一位传送的,就存在着一个数据位的先后问题。 USB采用的是LSB在前的方式,即现出来的是最低位的数据,接下来是次低位....最后是最高位(MSB)。一...
  • 端点(endpoint):端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。它是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。每个USB逻辑设备由一组独立的端点组成。每个逻辑...
  • 我们分析的这个usb鼠标是一个输入类型的中断传输。 既然是输入类型,必然要做好接收。 而一个端点中,一次事务中,传输的的最大字节数即量是在端点描述符中定义的。 /* USB_DT_ENDPOINT: Endpoint descriptor */...
  • USB设备中有一大类就是HID设备,即Human Interface Devices,人机接口设备。这类设备包括鼠标、键盘等,主要用于人与计算机进行交互。它是USB协议最早支持的一种设备类。HID设备可以作为低速、 全速、高速设备用。...
  • 从零开始学USB(二、基础知识2)

    千次阅读 多人点赞 2018-12-08 21:40:55
    USB设备,物理上的逻辑结构来说,包含了主机Host端和设备Device端。 其中,主机Host端,有对应的硬件的USB的主机控制器Host Controller,而设备端,连接的是对应的USB设备。 1.1. USB控制器类型:OHCI,UHCI,...
  • 当然,现在只是简单的开始usb设备驱动开始,后面再慢慢的分析usb总线,usb的hub之类。 先给出代码,后面再一句一句分析。 #include &lt;linux/kernel.h&gt; #include &lt;linux/slab.h&gt; #...
  • 端点(endpoint):端点是USB设备的唯一可识别部分,其是主机和设备之间的通信流的终点。它是一个USB设备或主机上的一个数据缓冲区,用来存放和发送USB的各种数据。每个USB逻辑设备由一组独立的端点组成。每个逻辑...
  • 从零开始学USB(转)

    2019-06-30 14:31:30
    从零开始学USB(一、基础知识1) 从零开始学USB(二、基础知识2) 从零开始学USB(三、基础知识3) 从零开始学USB(四、USB系统结构) 从零开始学USB(五、USB的电器特性) 从零开始学USB(六、USB通讯的数据格式) ...
  • 关于USB的Class,对于学习USB协议的人,估计早就听到过此名词了。 而对于USB的Class的分类,此处先列出那个最基本的分类表: Base Class D...
  • USB设备使用描述符报告其属性。描述符是具有定义格式的数据结构。每个描述符都以字节宽度字段开头,该字段包含描述符中的总字节数,后跟一个标识描述符类型的字节宽度字段。 使用描述符允许简单地存储各...
  • 所有USB设备都响应设备默认控制管道上主机的请求。 这些请求是使用控制传输进行的。 请求和请求的参数将在Setup数据包中发送到设备。 主机负责建立表9-2中列出的字段中传递的值。 每个Set...
  • USB中用NRZI来编码数据 前面章节已经学习过了USB的引脚定义了,但是对于其中的USB 2.0的两根数据线D+和D-所对应的数据传输,却没有详细介绍。此处就是介绍,在此串行数据线中,数据是...
  • 一、什么是枚举? USB枚举,USB Emulation,字面意思看,就是去列举USB,而列举啥呢,其实就是USB的初始化。 简单来说,USB的枚举,对应的就是USB的Host和Device...
  • 设备可以连接到HUB上或者HUB上拔出.USB设备总线上拨出后的状态在规范没定义,只说明一旦USB连到总线要求的操作以及属性。 上电(Powered)  USB设备的电源可来自外部电源,也可从USB接口的集线器而来。电源来自...
  • 一、实施者观点 USB在主机和连接的USB设备之间提供通信服务。 但是,简单查看最终用户看到将一个或多个USB设备连接到主机,如图5-1所示,实际上是一点点实施起来比图中所示更复杂。 需要系统...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,816
精华内容 1,926
关键字:

从零开始学usb