11188|11

60

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

USB是怎么传输数据的,怎么识别设备的 [复制链接]

  USB协议是比较复杂的协议,初学者必定会遇到不少问题,由于本人学习过程中走了不少弯路,所以写了这篇文章,希望对初学者有所帮助。下面是《USB是怎么传输数据的,怎么识别设备的》(附件内有word版的),先看看这个文章,知道USB是怎么传输数据了,然后在仔细的研究协议,这样会少走很多弯路。先看看它的全貌,知道它是什么了,然后再去研究它的内部(协议),这样才会很快掌握。我的文章里有什么不清楚的地方请随时找我讨论。文章里有我得QQ。
      后面附件是一个软件USBAnalyser107,和一个U盘的列举过程《标准U盘 》,先把软件安装了,用这个软件把文件《标准U盘》打开,对照我的文档的内容看会更容易明白。

USB是怎么传输数据的,怎么识别设备的

Jude(原名Dodo) 原创于2008.6.15

        读这篇文章之前要对USB有一定的了解,知道什么是主机,设备,USB是一个主从结构的接口。
        先说说USB主机是怎么识别一个U盘的吧,当你把一个U盘插到电脑上的时候,电脑的USB接口上会发生一些变化,这里先得说说USB数据线是怎样的,它里面一般有用的有四根线,ground,VCC,DM(D-),DP(D ),而DM,DP是用来传输数据的,当U盘(以后简称U)插到电脑上的时候,U会把DP(D )拉高,使DP,DM保持一个J状态(DP为高DM为低,有关总线的状态又有很多,想了解的自己去研究),电脑主板的USB主机芯片检测到这个J状态(DP(D )拉高),(大概是这样,愿意详细了解的要仔细看协议),知道有设备连接上了(这里提到的主机和设备是指连接在USB线两端的USB接口芯片),电脑的驱动会对连接上的这个设备进行识别,我们把它叫做列举,这个过程是为了让电脑知道连接上的这个设备是什么东西(是U盘,还是USB鼠标,还是USB键盘,或是其他的什么)。
        以下是一个U盘的全部列举过程,用图来说明,(后面有两个附件,一个USB分析仪软件,一个是U盘的的全部列举过程,用USB分析仪软件打开)

       在这之前先说说USB数据是怎么在DM,DP上传输的吧,当主机检测到有设备连接上,驱动先会对这个设备作些必备的事情,识别他的速度(这个过程又有很多协议,不多说了,要了解的仔细研究协议),然后就是复位等等,之后就开始在总线(DM,DP)上发送1ms间隔的SOF包(全速)或125us间隔的SOF包(高速),低速(我也不太清楚,呵呵),什么是SOF包呢,SOF 就是start of frame (帧开始),其实就是帧开始的一个标记,其中有帧号,什么是帧呢,帧就是1ms的间隔(全速)或125us的间隔(高速),所有的数据都是在帧内传输的。
USB数据都是以包的形式发出的,包都有固定的格式,它以一个sync(同步)开始,以一个eop(end of packet,包结束)结束,sof 包也是一样的,高速的sync,eop和全速的sync,eop不同。 下面是包的结构图,



        从左到右依次是sync场,pid场,…… 当然PID后面是什么,还有没有数据要看具体发什么包了。后面的令牌包,帧开始包,数据包,握手包决定了PID 后面是什么,握手包的PID后面什么都没有,直接是EOP。
不得不说的是pid(packet  ID 包的ID),就是说明这个包是什么包,包的类型有四种:令牌包,数据包,握手包,特殊包。不同类型的包又有不同的格式,每种类型又有不同的PID:



附一份中文的(不全)。
下面是各个包的格式:

[ 本帖最后由 征服 于 2010-3-15 14:34 编辑 ]

USB是怎么传输数据的,怎么识别设备的(较详细).rar

155.53 KB, 下载次数: 600

标准U盘.rar

101.76 KB, 下载次数: 320

周立功USBAnalyser1[1].1.part1.rar

1.91 MB, 下载次数: 383

周立功USBAnalyser1[1].1.part2.rar

1.91 MB, 下载次数: 341

周立功USBAnalyser1[1].1.part3.rar

832.44 KB, 下载次数: 307

此帖出自FPGA/CPLD论坛

最新回复

感谢老铁的无私分享  详情 回复 发表于 2022-10-19 18:34
点赞(1) 关注(1)
 

回复
举报

60

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
令牌包

        图8-5显示了标记包的字段格式。标记由PID,ADDR和ENDP构成,其中PID指定了包是输入,输出还是建立类型。对于输出和建立事务,地址和端口字段唯一地确定了接下来将收到数据包的端口。对于输入事务的,这些字段唯一地确定了哪个端口应该传送数据包。只有主机能发出标记包。输入PID定义了从功能部件到主机的数据事务。输出和建立PID定义了从主机到功能部件的数据事务。


图8-5 标记包格式


        如上图所示,标记包包括了覆盖地址和端口字段的5位CRC。CRC并不覆盖PID,因为它有自己的校验字段。标记和帧开始(SOF)包是由3个字节的包字段数据后面的包结束(EOP,End of Packet)界定的。如果包被译码为合法标记或SOF,但却没有在3个字节之后以EOP终止,则它被认为是无效的,并被接收器忽略。
   
帧开始(SOF,Start-of-Frame)包


        主机以每1.00 ms ±0.0005 ms一次的额定速率发出帧开始(SOF)包。如图8-6中所示,SOF包是由指示包类型的PID和其后的11位的帧号字段构成。

           
图8-6 帧开始包


        SOF标记组成了仅有标记的(token-only)事务,它以相对于每帧的开始精确计算的时间间隔发送SOF记号(Marker)和伴随的帧数。包括集线器的所有全速功能部件都可收到SOF包。SOF标记不会使得接收功能部件产生返回包;因此,不能保证向任何给定的功能部件发送的SOF都能被收到。SOF包发送2个时间调配(Timing)信息。当功能部件探测到SOF的PID的时候,它被告知发生SOF。对帧时间敏感而不需要追踪帧数(例如集线器)的功能部件,仅需对SOF的PID译码;可忽略帧数和其CRC。如果功能部件需要追踪帧数,它必须对PID和时间戳都进行译码。对总线时间调配信息的没有特别需要的全速设备可以忽略SOF包。

数据包

        如图8-7所示,数据包由PID,包括至少0个字节数据的数据区和CRC构成。有2种类型的数据包,根据不同的PID:DATA0和DATA1来识别。2种数据包PID是为了支持数据切换同步(Data Toggle Synchronization)(在第8.6节提到)而定义的。


图8-7 数据包格式


        数据必须以整数的字节数发出。数据CRC仅通过对包中的数据字段计算而得到,而不包括PID,它有自己的校验字段。


握手包


        如图8-8所示,握手包仅由PID构成。握手包用来报告数据事务的状态,能还在表示数据成功接收,命令的接收或拒绝,流控制(Flow Control)和停止(Halt)条件。只有支持流控制的事务类型才能返回握手信号。握手总是在事务的握手时相(Phase)中被返回,也可在数据时相代替数据被返回。握手包由1个字节的包字段后的EOP确定界限。如果包被解读为合法的的握手信号,但没有以1个字节后面的EOP终止,则它被认为是无效的,且被接收机忽略。



图8-8 握手包

        eop是在发完包后只表现在DM,DP上的一个标记,一个完整的包就是这样的,这只是以数据的形式表现出来的包,但是怎么把它发到DP,DM线上呢,有一种编码方式叫做NRZI编码,就是如果发的数据是1,DP,DM取反(相对于前一个数据),就是如果发的数据是0,DP,DM保持原有的值不变(保持前一个数据的值),取反和保持多久呢,是一个位时间,位时间?比如说全速 12Mb/s ,算一下它发一个位的时间是83.33ns,这就是全速位的位时间。DP,DM在发送数据之前是J状态(DP为高DM为低),还要注意,数据是按场发出去的,先发sync,然后pid,依次,每个场的数据都是先发低位然后次低位,最后最高位。(数据场值得注意,按字节顺序发,每个字节先发低位)数据就是这样发到DP,DM上的。其中还有位填充==,很多其他的东西,这里不讲了,要了解的自己研究协议。

  下面是NRZI 编码的图解:数据的编码与解码
          在包传送时,USB使用一种NRII(None Return Zero Invert,即无回零反向码)编码方案。在该编码方案中,“1”表示电平不变,“0”表示电平改变。图8列出了一个数据流及其
它的NRII编码,在该图的第二个波形图中,一开始的高电平表示数据线上的J态,后面就是NRII编码。
  

一个包就是这样发出去的。
下面接着前面的列举说。列举的整个过程是这样的:
        建立阶段:主机发一个SETUP 令牌包,后面紧跟一个(data)包(主机发的),这个data包是一个请求(请求是主机发给设备的,请求的作用是告诉设备主机下一步要干什么或者告诉设备该干什么,协议里规定了每个请求的格式和标准请求代码)比如说第一个请求是告诉设备要设备返回一个它的(设备的)设备描述符。设备收到这个包无错误后会返回一个ACK握手包告诉主机已收到数据
数据阶段:然后主机会发一个in令牌包,设备收到IN令牌包后,设备用数据(data)包(设备发的)返回他自己的设备描述符(协议里规定了各个设备的标准的描述符),描述符里会有一些设备的描述,(描述他是什么东西,是U盘,还是USB鼠标,还是USB键盘,或是其他的什么)。主机收到数据无错误后会返回一个ACK握手包,这个阶段主机也可能发out令牌包+数据包(主机发的),数据阶段可以没有。

        状态阶段:主机会发一个与数据阶段相反的令牌包,数据阶段如果是IN,现在发OUT+一个空的数据包(数据场没有数据的包),设备会用ACK握手包相应。数据阶段如果是OUT,现在发IN不+数据包,设备会返回空的数据包, 当主机收到包且无错误时,主机会发一个握手包ACK。
以上是一个无任何错误请求的全过程,在列举过程中会有很多这样的请求,主机不是只问一次就可以知道这个设备是什么,通过多次的请求。直到知道这个设备是什么为止。之后通过请求会对这个设备配置地址==。电脑就是通过这个地址来区分插在电脑上的两的U盘的。
以上的传输方式属于控制传输。控制传输至少有两个阶段:建立和状态。其他传输不是按这个(建立阶段,数据阶段,状态阶段)传输的,可以直接传输一个OUT包。只有控制传输是这样的。至于其他的传输类型只是区分一下每次传输的最大数据量,每帧传输的次数==。自己看协议吧!下面是控制传输的图


        以上的过程当中还有可能出错,返回NAK而不是ACK ,数据触发机制(和发data0还是data1有关的),设备无相应,重试三次==一些问题没有讲,讲出来太多了。要研究的自己看协议吧。
这篇文章主要是讲一下整个USB是怎么传输数据的,怎么认识一个设备的。其中有很多没有讲,讲起来就要把协议全搬出来了,太多了。要研究的看看这两本书,1、《USB2.0与OTG规范及开发指南》。北航出的,周立功编著,包括了所有USB的协议,高速,全速,OTG,HUB==,这本书把英文版的USB 协议整个翻译了一遍,里面又很多错误的,他是按字面意思直接翻译的,没有联系到协议本身的意思。2、《USB2.0原理与工程开发》国防工业大学出版的,已经有第二版了。主要是电气规范,数据传输协议,设备开发和一些驱动开发。
        以后的便携式设备越来越多,USB 的设备也越来越多,什么SD,MMC ,CF 这些卡,鼠标,键盘,==全用USB来连接到电脑。以后USB的应用会更多,INTEL正在研发USB3.0,很期待啊。
希望对刚开始学习USB的网友们有帮助。由于时间有限所以有别字,希望大家谅解。有什么问题可以和我一起讨论,QQ:279062488 加我时告诉我是有关USB的,谢谢。
此帖出自FPGA/CPLD论坛
 
 

回复

5979

帖子

8

TA的资源

版主

板凳
 
不错!
此帖出自FPGA/CPLD论坛
 
 
 

回复

278

帖子

0

TA的资源

一粒金砂(中级)

4
 
很不错!麻烦楼主喽!嘿嘿。。。。。。
此帖出自FPGA/CPLD论坛
 
 
 

回复

13

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢搂主分享,不错。
此帖出自FPGA/CPLD论坛
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(初级)

6
 
非常的好啊
支持
谢谢!
此帖出自FPGA/CPLD论坛
 
 
 

回复

3138

帖子

0

TA的资源

裸片初长成(初级)

7
 
当漏得下来看看,三克油!
此帖出自FPGA/CPLD论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
支持楼主分享,谢谢!!!
此帖出自FPGA/CPLD论坛
 
 
 

回复

5015

帖子

12

TA的资源

裸片初长成(初级)

9
 
支持LZ ,稍后我发一个USB的协议标准的附件吧!
此帖出自FPGA/CPLD论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
感谢楼主!!!
此帖出自FPGA/CPLD论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 

学习了,感谢楼主

此帖出自FPGA/CPLD论坛
 
 
 

回复

3

帖子

1

TA的资源

一粒金砂(初级)

12
 
感谢老铁的无私分享
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表