设计格式:
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、