uboot之u盘枚举

9 篇文章 0 订阅

              UBOOT U盘枚举

简单的说下U盘的枚举过程,一下是我的U盘的枚举截图

 

 

在接口描述符,09 04 00 00 03 08 06 50 00,其后为三个端点描述符

030端点的数目 两个批量传输 一个interrupt

08 接口所使用的类为mass storage

06 子类为SCSI命令集

50 协议为批量传输

接着与U盘有关的就是从GET MAX LUN开始,返回长度为0001

a1 fe 00 00 00 00 01 00返回的00表示有1块逻辑块

接下来显示的是批量传输协议的数据流模型(封装UFI

需要明白CBWCSW结构,这里就不详细介绍,简单说明

0x43425355 CBWCSW的标志

0x85ca3cd8为主机分配的CBW签名,CSW返回也需要此值

0x00000024为请求的长度,36字节

80 D7表示传输数据方向 1IN 0OUT

00 低四位表示使用LUN

06 低五位表示返回的CBWCB长度 不足16字节补0

后面的16字节根据选择的子类(这里是SCSI命令集,实际上使用UFI

CSW就不分析了,总体而言,就是UFI命令被CBW封装,解析UFI之后,返回对应数据,最后以CSW(最后一个字节00表示传输成功)结束一次批量数据传输。

UFIUSB Floppy Interface)命令集介绍

(1)    INQUIRY 查询U盘信息

发送:

12 00 00 00 24 00 00 00 00 …

12 UFI INQUIRY操作码

00 D7~D5 逻辑单元号,0

24 为返回的数据分配的存储空间长度 36字节(前面请求的最大长度也不能超过36字节)

返回的数据具体看文档

内容包括外设类型,存储介质是否可移除,厂商信息,产品信息,产品版本信息(1.00 信息均为ACSII

(2)    READ FORMAT CAPACITIES 读取可格式化容量

发送: 23 00 00 …00 fc 00…

23 read format capacities 主机读取可能的格式化容量的列表

00fc  分配的缓冲区长度252

返回的数据:

00 00 00 08 00 1e bf fe 02 00 02 00

08 表示容量列表的长度

001ebffe 高字节在前 表示块数

02 描述符代码

000200 高字节在前 每块字节数512字节

容量=块数*每块字节数

(3)    READ CAPACITY 读取可用的最大容量

发送:25 00 …

25 操作码 读取可用容量

返回: 00 1e bf fe 00 00 02 00

001ebffe 最后逻辑块地址

(与可格式化容量一样表示没有其他块用作他用)

00000200 块大小 512字节

(4)    READ(10)

28 00 …01.

28 READ(10)操作码 逻辑块的地址为00000000 01为传输长度

就是读取以逻辑地址为起始地址,长度为1的块的内容

返回: 对应块的内容

(5)    WRITE(10)

命令和(4)类似,略,操作码为0x2A

(6)    REQUEST SENSE 用于探测上一个命令执行失败的原因

(7)    TEST UNIT READY 用来检测设备的某个逻辑单元是否准备好

对于U盘的操作,就是基于这些UFI来进行的。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值