Flash硬盘与普通的磁头、柱面式介质不一样。在开发U盘的过程中,使用Flash作为存储介质。它有其特定的结构特点。以32M的三星K9F5608U0A-YCB0 Flash为例,它有2048个Block,每个Block 有32个Page,每个Page有512+16=528个字节。
图3.15 Flash 的结构Flash的读写有其自身特点:
1. 必须以Page为单位进行读写;
2. 写之前必须先擦除原有内容;
3. 擦除操作必须对Block进行,即一次至少擦除一个Block的内容。
针对这种情况,将Flash的一个Page定为1个扇区,将其2个Block,64个扇区定为一个簇,这样,簇的容量刚好为512*64=32K,满足FAT16对簇大小的要求。FAT分配空间的时候,是按簇来分配的,但是其给出的地址却是LBA(Logical BlockAddress),即它只给出一个扇区号,比如对此Flash而言,若给出LBA为0x40,实代表簇1的扇区1。因此需要将Logical Block Address转换为物理地址,这样,才可以对数据进行存取操作。根据上面定义的结构,转换公式为:
Flash 的Block = Logical Block Address/0x20 (1)
Flash 的Page = Logical Block Address %0x20 (2)
实际上,如果定义每个簇为32 个扇区是最好的,因为这样物理结构和逻辑结构刚好一致。但是这也无防,因为不管Logical Block Address给出什么值,只要按上述公式,总可以得到物理上正确的Block 和Page,再使用Flash的读写命令读取对应的Block和Page就可以了,因此簇和扇区的概念只是在BPB中给出存储介质信息的时候告之系统就可以了,这里只要做好LBA与物理地址间的转换就可以了。由于做为U盘的Flash不要求启动,因此可以没有MBR 区,只包含DBR、FAT、DIR和DATA四个区。因此,Flash的前两个Block的内容如下:
表3.6 Flash的前两个Block
LBA Block/Page 长度 内容说明
0H 0/0 512字节 MBR=BPB+Excutable Code+55AA
1-2H 0/1-0/2 1024字节 FAT区(第一份FAT)
3-4H 0/3-0/4 1024字节 FAT区备份(第二份FAT)
5-39H 目录区
40H 数据区
当主机发出READ命令后,Flash读写操作即告开始,主机首先读取MBR,得到有关存储介质的有关信息,诸如扇区长度、每簇扇区数以及总扇区数等内容,以便知道此盘有多大。如果读取正确,会接着读取文件分配表,借以在PC 机上的可移动盘符中显示文件目录,并可以复制、删除或是创建文件。系统自动将这些命令都转换成READ或WRITE两种命令,通过USB的READ或WRITE命令块描述符来从Flash中相应扇区读取数据,或是将特定长度的数据写入Flash相应地址中。
第四章 程序实现与调试
4.1 固件程序的实现
4.1.1 主循环——MAINLOOP.C
论文网http://www.youerw.com/
主循环检查事件标志并进入子程序进行进一步的处理。MCU一但上电就需要初始化其所有端口、存储区、定时器和中断服务程序。之后MCU将重新连接USB,包括将Soft_Connect寄存器设置为ON,因为这些过程确保了在MCU准备好服务D12之前D12不会进行操作,所以是很重要的。下图为主循环流程: 图4.1 主循环流程图本文来自优.文~论^文·网原文请找腾讯324,9114
4.1.2 中断服务程序——D12ISR.C
中断服务程序代码处理由D12产生的中断,它将数据从D12的内FIFO取回到CPU存储器,并建立正确的事件标志,以通知相应的子程序进行处理。下图为中断服务程序流程图: 图4.2 中断服务程序流程图
4.1.2.1 控制端点处理
控制传输总是在SETUP阶段开始,之后为可选的DATA阶段,然后在STATUS阶段结束。固件使用这3个状态来正确处理控制传输。下图为控制端点处理程序流程图:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9]
USB通信程序开发+程序实现与调试 第9页下载如图片无法显示或论文不完整,请联系qq752018766