新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于μC/OS-Ⅱ的嵌入式USB控制软件的实现

基于μC/OS-Ⅱ的嵌入式USB控制软件的实现

作者:时间:2011-08-16来源:网络收藏

Host检测到有Device插入后,进行总线复位。然后Host使用默认地址0读取设备描述符。获取设备描述符的设备请求命令结构体为:
g.jpg
h.jpg
第1次读取设备描述符时,Host首先发送setup包;之后进入主机读取数据阶段,Host发送in包,Device返回一个18 B的设备描述符,可以用一个结构体将其读回。最后Host发送0 B的数据包作为状态相应,设备返回ACK作为应答。用逻辑分析仪抓包,3个包如图3所示。

本文引用地址:http://www.eepw.com.cn/article/150349.htm

m.jpg


第1次读取设备描述符后,Host依次进行地址分配、第2次读取设备描述符、读取配置描述符、读取描述符集、设置配置、读取配置状态和读取接口状态,方法和第1次读取设备描述符的方法一样。
i.jpg
3.2 U盘兼容性
在设备枚举阶段将会碰到很多关于U盘兼容性的问题。
(1)总线复位时间。不同型号的U盘对于总线复位时间的要求是不同的,比如金士顿1 GB的U盘需要的复位时间至少280 ms。在中为保险起见,给予400 ms的复位时间。
(2)有些U盘的端点0是8 B payload的,大多数是64 B。对于8 B payload的U盘,要严格从第1次获取设备描述符时返回的第8字节获取payload,否则尽管枚举过程仍然能通过,但是后面在分析32字节的配置描述符时候会出现问题,没有收到完整的配置描述符是分析不出端点1和端点2的地址以及端点payload的。
(3)在枚举阶段获取字符串描述符的时候,要进行判断。因为有些U盘不支持返回字符串描述符,用if语句判断,如果获取不到字符串描述符就跳过,不要返回失败。

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭