21ic电子技术开发论坛
标题:
初涉USB,初学者USB入门总结(3) 数据包阐述
[打印本页]
作者:
arthur0561
时间:
2009-2-27 10:33
标题:
初涉USB,初学者USB入门总结(3) 数据包阐述
对于USB传输大体有个概念,下一步就来看看到底USB上传的什么东西,以什么格式传数据,先不涉及端点的概念。<br />各种总线的数据传输都是以固定的层次协议进行的,USB当然也不例外。所谓的层次也只是个抽象的概念罢了,就是表达一种依附关系,上层要依赖与底层,上层以底层为基础,上层只需要关心自己的东西就行了,如果你还不明白,那就继续看,学习一个东西不可能一两句话说的明白一个点,需要全面了解后才能清楚各个点。<br />要实现两个机器(机器的范围比较广,可以是电脑,交换机,单片机)的通信总是要有一个载体才可以,对于机器当然是电平高低为载体,具体的说机器甲要告诉机器乙一件事情(比如说一条指令),那么机器甲可以通过一根线(串行数据总线)连到机器乙的一个IO口上,甲发送一个个的高低电平,乙固定时间检测自己的这个IO口,然后逐个记录下放到自己的缓冲里,这样乙就收到甲送的数据了。上述就是一个简单的数据链路层(计算机网络里这么叫)的描述,这一层要保证的就是甲发的每一位数据,乙都可以正确及时的接受,并且对在传输过程中出错的数据做出反应。其实比数据连路更底层的还有物理层,这就是真正的物理介质,对于机器就是电线了,数据就是电线上传输的电压,USB是用的四线,两个电源,两个数据线。<br />这里也打个比方,比如人与人进行交流,我们当然是通过说话了,物理层就是空气和传输的声波,数据链路层就是我们说的每一个字,物理层就是空气,负责把我们说的话转换成声波传给对方,数据链路层负责让对方能正确的听到每个字,如果听的不清可以告诉对方重新说一遍。<br />经过上述的两个底层,就可以保证每一位数据可以正确的传到对方那里去。下一步的工作当然是解析数据代表了什么,一般来说,数据都是以一串数为单位,一般称为一个包,机器间传输都是以一个包为单位传出,就像人们说话都是以一句话为单位输出一样。每一个包包含有许多位数据,这些数据又分段表示不同的意义,如图一,这是一个USB令牌阶段的包,Sync是同步数据(相当于说话时先打个招呼,告诉对方要跟他说话了),PID是包标示(告诉对方这个包是干什么用的),ADDR是对方的地址(叫对方的名字),ENDP是用端点几通讯(先不介绍这个),CRC5是校验位(判断这个包是否在传输中出错),EOP是包结束。<br />|--------------------------------------------------------|<br />| Sync | PID | ADDR | ENDP | CRC5 | EOP |<br />|________________________________________________________|<br /> <br /> 图一<br />USB的数据包又分为三种,一个是令牌包,一个是数据包,另一个是握手包。每一次的USB通讯事务处理都是以令牌包开头,告诉对方要跟谁说话,这句话是用来干嘛的。如果要求有数据传输,则下一步就是数据包,另外如果要求对方要有反馈,则会发出握手包。令牌包又简单的包括OUT,IN,STEP三种类型,OUT是用于主机告诉设备主机要向USB设备发送数据,IN是用于主机告诉设备要上传数据,而STEUP是用于主机向USB设备发送配置信息,在枚举过程中会用到。另外数据包和握手包的具体格式什么的,可以参照详细的协议。<br />可以看到在所以的通讯过程中,主机都是发起者,不管是主机发送数据到USB设备还是USB设备发送数据到主机,都必须收主机控制。图二为一次事务的过程<br /> <br /> 令牌阶段 ——》 数据阶段 ——》 握手阶段<br /><br /> 图二<br />这个过程可以这样描述,甲和乙对话,甲是老板,乙是职员。第一节已经讲过了,乙面试就是枚举,在这个过程中,甲多段的发送STEP令牌包给乙,乙收到后如果要反馈数据,就发数据包给甲,甲正确接收后,跟甲握握手,表示这次对话成功。<br />乙被正式录取后,甲会分派任务(OUT),这时甲对乙说有任务给你(令牌阶段),然后乙就开始听,甲说你的任务就是记录数据并且上报(这段话就是数据包),乙说好的(握手包)。<br />乙开始正式工作,并且记录数据。过了一段时间,甲开始要求提交数据(IN),乙把数据报告给甲(数据阶段),甲说好(握手成功)。这里乙不能主动的去向老板汇报,只能被动的干活。<br />上面已经讲USB主机和设备间数据传输的过程,都是我个人理解,有不正确和不到位的大家提出,方便初学者理解,谢谢··<br />
作者:
omlarn
时间:
2009-2-27 10:42
标题:
谢谢楼主的讲解。
作者:
clizhi
时间:
2009-3-1 20:39
标题:
谢谢楼主
一路找过来了。谢谢
作者:
and
时间:
2009-3-9 14:35
标题:
谢谢!!
:)
作者:
llllwwww
时间:
2009-3-28 13:12
标题:
学过数据通信的一看协议就了解了,USB就是数据通信
作者:
diylbl
时间:
2009-3-28 21:38
标题:
谢谢!!
作者:
oyggj
时间:
2009-3-30 22:13
标题:
好东西
不错,楼主继续啊。
作者:
fanfeixing
时间:
2009-4-29 14:47
标题:
谢谢楼主了,现在正在学习这个东西
作者:
encijia
时间:
2009-5-4 10:25
标题:
路过,顶一下楼主
资料先保存,慢慢学习
作者:
kvfch
时间:
2009-5-11 17:03
标题:
谢谢LZ,学习了!
作者:
ytmkkk1986
时间:
2009-9-24 11:07
顶好!
作者:
mugenmmx
时间:
2009-9-28 13:21
自己定过通讯协议,又写过通讯程序的话,这种事情太容易理解了哈哈!
作者:
stu20042702
时间:
2009-10-22 11:08
学习了
作者:
stu20042702
时间:
2009-10-22 11:20
学习了:)
作者:
ren35240039
时间:
2009-10-27 16:38
你好,我想问问,STEUP包是主机系统自动发出和处理的还是要自己写的上位机来控制,谢谢
作者:
arthur0561
时间:
2009-10-28 13:36
STEUP包是主机自动发的,与之有点关系的就是PC驱动程序部分。下位机做相应处理即可。
作者:
shanyao
时间:
2009-11-28 11:04
这个网上一大堆的
说的不一样的 才有看头
作者:
canghai21
时间:
2009-11-28 12:14
恩,挺酷!
作者:
Dongfangyuxiao
时间:
2009-11-28 15:29
很形象。
技术就是从生活中来,回到生活中去。
作者:
lijun1986
时间:
2009-12-2 14:35
图在哪里???
作者:
DM_man
时间:
2009-12-3 19:36
学习中
作者:
飞翔的猪
时间:
2010-8-24 14:57
谢谢谢谢了,收藏了
作者:
yalingcat
时间:
2010-8-24 14:59
谢谢分享
作者:
adofu2008
时间:
2010-8-31 15:03
讲的很对,支持一下
作者:
MCUU
时间:
2010-9-9 20:09
能用日常生活的事情解析就是很大的进步~!
作者:
yiwang0901
时间:
2010-9-10 13:48
我学了了好几天,你这一会就讲清楚了,lz 太厉害了
作者:
haiping0823
时间:
2010-10-4 21:44
终于找到适合我的东西了.
作者:
jackoyan
时间:
2010-10-9 12:03
非常不错,学习了!
作者:
liumin3603
时间:
2010-10-9 15:53
问一下 USB HUB最多支持127 个设备 怎么来的 怎么不是255个
作者:
mingboal
时间:
2010-10-16 23:41
楼主写的太好了,把深奥的道理说得浅显易懂
作者:
tominator
时间:
2010-10-29 15:19
楼主讲解的真好,谢谢哈:)
作者:
iloveqinqin
时间:
2010-10-29 15:27
学习了
作者:
xty_seven
时间:
2010-11-3 19:51
不知道怎么看到usb上传的内容,望指教。是不是有专门的软件啊?
作者:
yangtianzhi
时间:
2010-11-8 16:08
通俗易懂!
作者:
aagreen0514
时间:
2010-12-12 12:20
呵呵 学习了
作者:
Messia
时间:
2010-12-12 12:31
收藏下
作者:
生化分析仪
时间:
2011-1-19 10:37
挺通俗的,顶一下
作者:
chengsf12345
时间:
2011-3-9 12:21
不错
作者:
zwy65182899
时间:
2011-8-9 09:10
路过
作者:
hyfw
时间:
2011-8-17 18:31
:handshake顶一下!
作者:
a6482546
时间:
2011-10-31 11:21
楼主说得通俗易懂..感谢楼主.!
让那些说啥都搞专业术语的人出书去吧..
作者:
lilihua0721
时间:
2011-11-9 19:07
好
作者:
回到从前
时间:
2011-11-29 17:16
mark一下,继续学习!
作者:
wy17416
时间:
2011-12-20 20:19
正在学习中
谢谢!
作者:
maomao2126
时间:
2012-1-5 12:35
不错,顶起
作者:
菜鸟-轩
时间:
2012-1-10 19:55
楼主很给了呀!!谢谢哈!!
作者:
fushaoguang999
时间:
2012-9-1 18:40
:victory:
作者:
tan1990
时间:
2012-9-19 16:52
学习了,呵呵。。刚想学习USB方面的东西!
作者:
shanjiong
时间:
2012-11-20 19:09
很好不错
作者:
limei151314
时间:
2013-2-21 14:24
楼主解释的很通俗,看了就明白了,解决了我这一头的雾水,谢谢
作者:
arm菜鸟人
时间:
2013-2-24 19:33
很形象,慢慢学习。
作者:
arm菜鸟人
时间:
2013-2-25 11:41
问一下, USB OUT包 IN包 STEP包都是相对主机来说的吗? USBDev所说的 OUT包还是从主机来数据 所以是读端点。
求解。
作者:
zhangyongdzgcs
时间:
2013-3-2 22:30
写的不错,语言生动具体,例子也说得比巧妙,很易看懂,谢谢你的分享
作者:
sheep0736
时间:
2013-6-18 09:19
.谢谢楼主
一路找过来了。谢谢
作者:
xiaox314
时间:
2013-7-3 11:30
作者:
yaweq
时间:
2013-9-20 16:20
正在学习中,USB好像比较复杂呢
作者:
martin0221
时间:
2013-10-1 23:15
顶一个,谢谢楼主分享!
作者:
woshansi
时间:
2014-1-31 13:22
还不是很明白,我在学习中,下面看lz的下一篇
作者:
lh2008xp
时间:
2014-11-17 16:47
mark学习中
作者:
chansoncc
时间:
2014-11-18 10:07
不错, 学些了。
作者:
weisy5
时间:
2014-11-21 09:06
学习了 感谢楼主的讲解!有点大话USB的感觉!通俗易懂。
作者:
明月夜夜风吹
时间:
2017-6-9 17:17
不错,写得很通俗
作者:
天有多高
时间:
2017-6-14 17:23
顶下
作者:
zhangxq957
时间:
2017-12-17 18:40
通俗易懂,楼主威武
作者:
lgl63167048
时间:
2017-12-26 11:33
谢谢楼主
欢迎光临 21ic电子技术开发论坛 (https://bbs.21ic.com/)
Powered by Discuz! X3.5