图解USB协议
述。如(图七)所示:
(图七)
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
1)Index[52 - 54]:表示主机向地址 01 发送 GET_DESCRIPTOR 指令包,详细信 息见(图八)
(图十) 2)Index[143 - 145]:表示设备完成 SET_CONFIGURATION 指令后,给主机发 送一个空应答
以上的 USB 枚举过程是根据现有特定设备捕获得到,并不完整涉及到 USB 协议的所有指令包,如 GET_STATUS 指令包、CLEAR_FEATURE 指令包、 SET_FEATURE 指令包、SET_DESCRIPTOR 指令包、GET_CONFIGURATION 指令包、GET_INTERFACE 指令包、SET_INTERFACE 指令包、SYNCH_FRAME 指令包等。
Avatar 的邮箱:avatar_1210@tom.com
图解 USB 协议之三 USB 标准描述符
最近忙于公司的项目和本人的驾驶证考试,拖延了这个系列第三篇的完成, 先向各位支持我的 DX 表示一下歉意。不过好在驾驶证的蝴蝶桩考试顺利通过,
自己先庆贺一下 ,嘿嘿。
源自文库
最近做一个手持机的项目,第一次真正感受到了手头这个小设备的功力。事
(图 14) (图 15) 5)SETUP 包组分类,详见图 16(直接从 HD-USB12 的数据包过滤功能截取)
(图 16) 6)SETUP 包组分析(通过 HD-USB12 监控软件仅过滤出 SETUP 包组数据),详见图 17
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
(图 13) a、Index[16 - 18]:表示主机向设备地址 0(DEV = 00)端点 0(EP = 00, 最高位表示传输方
向)发送 Out 指令后,发送数据 Index[17](主机发出空回应所以 Index[17]没有数据),设备 收到数据后回应 ACK; b、Index[16]的内容,详见图 14 c、Index[17]的内容,详见图 15
情是这样的:要将 n 年前写的基于 51 的固件代码移植到 AVR,问题出现了….,
枚举不成功!立刻想到用协议分析仪看看……(此处省略 168 字),结果当然是
一目了然,几分钟轻松搞定!关于这次的经历,回头专门写一个帖子吧,先卖个
关子,哈。
闲话少说,本篇图解 USB 标准描述符。
数据采集设备:HD-USB12 USB 协议分析仪。
(图 9)
(图 10)
(图 11) 3)OUT 包组分类,详见图 12(直接从 HD-USB12 的数据包过滤功能截取)
(图 12) 4)OUT 包组分析(通过 HD-USB12 监控软件仅过滤出 OUT 包组数据),详见图 13
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
(图 17) a、Index[23 - 25]:表示主机向设备地址 0(DEV = 00)端点 0(EP = 00, 最高位表示传输方向)
发送 SETUP 指令后,发送数据 Index[24],设备收到数据后回应 ACK; b、Index[23]的内容,详见图 18 c、Index[24]的内容,详见图 19
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
图解 USB 协议之一 枚举过程
关键字:HD-USB12 协议分析仪 枚举 前不久花了 2300 大银败了个 HD-USB12 协议分析仪(肉痛…)。不过还蛮好
用,以后做 USB 固件开发就方便多了。 看到 21ic坛子里arthur0561大虾发了一系列USB协议入门总结的文章,向他
(OR她?)表示一下敬意。我也准备用手头这台协议分析仪以实例和图解的方 式重复叙述一下,希望对初学USB的童鞋有些帮助。 废话少说,首先图解一下 USB 枚举过程。 一、 总线复位及向默认地址 0 发送 GET_DESCRIPTOR 指令包,请求设备描
(图八) 2)Index[57 - 59]:表示设备向主机发送配置描述数据 Index[58] 3)Index[60 - 62]:表示主机完成 GET_DESCRIPTOR 指令后,给设备发送一个 空应答
五、 重复向第二步设定的设备地址发送 GET_DESCRIPTOR 指令包,取完所 有设备描述及配置描述;
d、Index[701]的内容,详见图 9 e、Index[702]的内容,详见图 10 f、Index[702]的数据发送时序,详见图 11(只截取了部分,时序做的很漂亮,看着也很清晰),
注意时序图的 Offset[0003]其传输的数据为 FF,根据 USB 采用的传输编码(NRZI)前 6 位 为 1 后插入 1 位 0,因些第 7 位的传输要传输 2 位(01),其时间也占用两位的时间。(啊啊!有 时序功能就是清楚,时序还有其它用途以后分解)
2)PID 分类,详见图 2
(图 1)
(图 2)
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
3)Token 包格式(不包括 SOF),详见图 3
(图 3) 注:
a、 ADDR 表示设备地址 b、 ENDP 表示端点号 c、 CRC5 表示设备地址及端点号的校验和 4)SOF 包格式,详见图 4
(图三) 1)Index[22 - 23]:表示再次总线复位,该复位自动完成,不是手工插拔 USB 完 成
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
2)Index[25 - 27]:表示主机向默认地址发送 SET_ADDRESS 指令包,详细信息 如(图四)所示:
(图二) 3)Index[15 - 17]:表示设备向主机发送设备描述数据 Index[16] 4)Index[18 - 19]:表示主机完成 GET_DESCRIPTOR 指令后,给设备发送一个 空应答 二、 再次复位总线及向设备发送 SET_ADDRESS 指令包,设置设备地址。如
(图三)所示:
本篇分析数据包,仍然使用“HD-USB12”USB 协议分析仪采集分析数据。分两部分内容:首先和 童鞋们一起简单复习一下 USB 协议中的相关知识,然后用“HD-USB12”USB 协议分析仪采集几个实例 进行分析。
一、协议知识 1)PID 格式,详见图 1
注: a、 上图是从低位到高位 b、 高四位是低四位取反 c、 PID 自校验
方向)发送 IN 指令取数据,设备回应端点停止(STALL); c、Index[701 - 703]:表示主机向设备地址 0(DEV = 00)端点 0(EP = 80,
最高位表示传输方向)发送 IN 指令取数据,设备收到指令后向主机发送数据 Index[702],主机正确收到数据后回应 ACK
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
(图四) 3)Index[29 - 31]:表示设备完成 SET_ADDRESS 指令后,给主机发送一个空应 答 三、 向第二步设定的设备地址发送 GET_DESCRIPTOR 指令包,请求设备描
述。如(图五)所示:
(图五)
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
1)Index[33 - 35]:表示主机向地址 01 发送 GET_DESCRIPTOR 指令包,详细信 息见(图六)
(图六) 2)Index[41 - 43]:表示设备向主机发送设备描述数据 Index[42] 3)Index[45 - 47]:表示设备向主机发送设备描述数据 Index[46] 4)Index[48 - 50]:表示主机完成 GET_DESCRIPTOR 指令后,给设备发送一个 空应答 四、 向第二步设定的设备地址发送 GET_DESCRIPTOR 指令包,请求配置描
(图 7) 2)IN 包组分析(通过 HD-USB12 监控软件仅过滤出 IN 包组数据),详见图 8
(图 8) a、Index[691]:表示主机向设备发送 IN 指令取数据,设备回应没数据; b、Index[692 - 693]:表示主机向设备地址 0(DEV = 00)端点 0(EP = 80, 最高位表示传输
(图 18)
(图 19) 以上数据包分析是根据现有特定设备捕获得到,并不完整涉及到所有事务包组,如 IN+DATA+NAK、 OUT+DATA+NAK、SETUP+DATA+NAK 等等。
欢迎访问avatar的电子博客:EET站点:http://forum.eet-cn.com/BLOG_zhou36_301.HTM EDN站点:http://blog.ednchina.com/avatar/
还是先复习一下 USB 协议的相关内容。USB 通迅配置是通过描述符完成的,
下面对 USB 标准描述符进行说明。
一、USB 标准描述符
1、标准设备描述符
偏移量
域
0 bLength
大小 1
值 数字
描述 描述符的大小=12H
1 bDecriptorType 2 bcdUSB
4 bDeviceClass
(图 4) 注:
a、 FrameNumber 表示帧号,1 毫秒发送一帧 b、 CRC5 表示 FrameNumber 的校验和 5)Data 包格式,详见图 5
(图 5) 注:
a、 DATA 表示要传输的数据,全速 USB 的最大长度为 1023Bytes,高速 USB 的最大长度为 1024Bytes
六、 向第二步设定的设备地址发送 SET_CONFIGURATION 指令包,设置配 置描述。如(图九)所示:
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
(图九) 1)Index[139 - 141]:表示主机向地址 01 发送 SET_CONFIGURATION 指令包, 详细信息见(图十)
述。如(图一)所示:
(图一) 1)Index[4 - 5]:表示 USB 插入总线复位
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
2)Index[7 - 8]:表示主机向默认地址发送 GET_DESCRIPTOR 指令包,详细信 息也抓出来了,如(图二)所示:
b、 CRC16 表示 DATA 的校验和
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
6)Handshake 包格式,详见图 6
(图 6) 二、USB 传输包组(事务)实例分析
1)IN 包组分类(懒得自己总结,直接从 HD-USB12 的数据包过滤功能截取),详见图 7
欢迎访问avatar的电子博客:http://blog.ednchina.com/avatar/ Avatar 的邮箱:avatar_1210@tom.com
图解 USB 协议之二 数据包分析
感谢朋友们对我发的上一个帖子《图解 USB 协议之一 枚举过程》的支持,虽然手头的项目比较忙, 周末还是抽时间写了这个专题的第二篇,不能让大家失望啊,哈!