导航

USB_U盘

设计格式:

  IDE硬盘或者单片机模拟FAT16的文件系统-------USB接口-------计算机。

  MIDI键盘基础修改

 

描述符配置:

  1、设备描述符,产品PID修改成9.

  2、字符串描述符,产品序列号:至少12位的十六进制数据位,而且必须与其他u盘的序列号不一样。

  3、配置描述符,只需要一个接口。

  4、接口使用两个端点,类为大容量存储设备8,子类为SCSI透明命令集6,子类协议为仅批量传输协议0x50.

  5、端点描述符不用修改。

 

类特殊请求:

  1、get max lun:获取最大逻辑量,比如设置0,pc识别出1个U盘,设置1,pc识别出2个U盘,最大设置15.

  2、MASS_STORAGE_RESET:请求返回命令块封装包。

 

仅批量传输协议的数据流模型:

  1、数据传输过程:命令阶段、数据阶段、状态阶段。

  2、命令阶段:主机发送一个CBW(包含操作的命令,传输数据的方向和数量),数据阶段和状态阶段并未详细描述。

  3、处理过程:接收CBW,对CBW进行解码,返回数据之后进入状态阶段,然后再次进入命令阶段。

 

SCSI命令集和UFI命令集:

  1、SCSI是什么?小型计算机系统接口的缩写,有一套完整的协议。

  2、UFI是什么?USB软盘接口的缩写,也有一套协议,在SCSI协议里有一样的命令。

  3、UFI在CBW的空间有16个字节,若不足16个字节补0,第一个字节是操作码(起始于CBW的15),程序根据这个操作码进行相关处理。

  4、搞笑的是什么?接口子类定义的是SCSI,但实际使用的确实UFI的。

 

FAT文件系统:

  1、FAT是什么?文件分配表的缩写。在FAT系统中最小单位称为簇,将簇号以链表的形式存储在一个表格里,就是FAT。

  2、目录被分成目录项,目录项包含文件名、文件长度等信息,每个磁盘只有一个根目录,子目录和文件在其下层。根目录位于整个磁盘的开始处。

  3、一个磁盘:MBR,EBR,DBR+FAT+根目录+文件数据。

  4、U盘:DBR+FAT(两个,有一个备用)+文件(包含目录)。

  5、FAT32的根目录是变化的,FAT16是固定的,后者需要把根目录单拿出来。

  6、FAT是一个使用当前簇号就能找到下一个簇号的表格,通常表格是分项的,例如FAT16以两个字节为一区,FAT32则是四个字节。文件的每一项都保存了下一簇的簇号,FAT32的最大容量比FAT16的大,就因为它的每一项能储存更多的簇号。

  7、FAT的项号和数据区的簇号有什么关系呢,是一一对应的关系。目录项包含了起始簇号,起始簇号能找到数据区的第一个簇号的数据,还能找到下一个簇号,直至寻找到最后一簇的数据(簇号是指定的结束簇号)。

 

模拟一个FAT16文件系统:

  1、

 

实验结果:

  1、

 

IDE转USB:

  1、

 

 

posted on 2017-09-27 16:55  刘梢  阅读(285)  评论(0编辑  收藏  举报