USB入门总结——数据包阐述
把最近的学习usb的笔记结合一些资料来总结一下,本文仅代表个人观点,尽可能保证内容准确性。
数据包阐述:
步骤一:了解USB上传的什么东西,以什么格式传数据;
1.各种总线(USB也是一种总线)的数据传输都是以固定的层次协议进行的;
2.所谓的层次是表达一种依附关系,上层要依赖于底层,上层以底层为基础,上层只需要关心自己的东西就行了;
3.要实现两个机器(机器的范围比较广,可以是电脑,交换机,单片机)的通信总是要有一个载体才可以,对于机器当然是电平高低为载体;
具体的说:机器甲要告诉机器乙一件事情(比如说一条指令),那么机器甲可以通过一根线(串行数据总线)连到机器乙的一个IO口上,甲发送一个个的高低电平,乙固定时间 检测自己的这个IO口,然后逐个记录下放到自己的缓冲里,这样乙就收到甲送的数据了。
这里也打个比方:比如人与人进行交流,我们当然是通过说话了,物理层就是空气和传输的声波,数据链路层就是我们说的每一个字,物理层就是空气,负责把我们说的话转换成声波传给对方,数据链路层负责让对方能正确的听到每个字,如果听的不清可以告诉对方重新说一遍。经过上述的两个底层,就可以保证每一位数据可以正确的传到对方那里去。
步骤二:解析数据代表了什么,一般来说,数据都是以一串数为单位,一般称为一个包,机器间传输都是以一个以包为单位传出的,就像人们说话都是以一句话为单位输出一样。每一个包包含有许多位数据,这些数据又分段表示不同的意义。
这是一个USB令牌阶段的包:(数据包 ->数据位 ->每段数据位的意义)
1. Sync是同步数据(相当于说话时先打个招呼,告诉对方要跟他说话了);
2. PID是包标示(告诉对方这个包是干什么用的);
3. ADDR是对方的地址(叫对方的名字);
4. ENDP是用端点几通讯(----------);
5. CRC5是校验位(判断这个包是否在传输中出错),EOP是包结束。
Sync | PID | ADDR | ENDP | CRC5 | EOP
USB 的数据包又分为三种,一个是令牌包,一个是数据包,另一个是握手包。
一、每一次的USB通讯事务处理都是以令牌包开头,告诉对方要跟谁说话,这句话是干嘛的。
二、如果要求有数据传输,则下一步就是数据包,
三、另外如果要求对方要有反馈,则会发出握手包。
四、令牌包又简单的包括OUT,IN,STEP三种类型;
(1).OUT是用于主机告诉设备主机要向USB设备发送数据,
(2).IN是用于主机告诉设备要上传数据,
(3).而STEUP是用于主机向USB设备发送配置信息,在枚举过程中会用到。
▲另外数据包和握手包的具体格式什么的,可以参照详细的协议。
▲可以看到在所以的通讯过程中,主机都是发起者,不管是主机发送数据到USB设备还是USB设备发送数据到主机,都必须受主机控制。
一次事务的过程:
令牌阶段—> 数据阶段—> 握手阶段
这个过程可以这样描述,甲和乙对话,甲是老板,乙是职员。第一节已经讲过了,乙面试就是枚举,在这个过程中,甲多段的发送STEP令牌包给乙,乙收到后如果要反馈数据,就发数据包给甲,甲正确接收后,跟甲握握手,表示这次对话成功。乙被录取后,甲会分派任务(OUT),这时甲对乙说有任务给你(令牌阶段),然后乙就开始听,甲说你的任务就是记录数据并且上报(这段话就是数据包),乙说好的(握手包)。乙开始正式工作,并且记录数据。过了一段时间,甲开始要求提交数据(IN),乙把数据报告给甲(数据阶段),甲说好(握手成功)。这里乙不能主动的去向老板汇报,只能被动的干活。
小浩笔记