Flash是最常用的存储设备之一,每个人或多或少都对Flash有所了解。
在上一篇文章中,编辑器介绍了闪存的类型。
为了继续增强大家对Flash的理解,本文将介绍Flash磁盘,Flash磁盘的结构以及Flash的读写操作。
如果您对本文的内容感兴趣,则不妨继续阅读。
1.闪存盘的FAT结构。
闪存硬盘不同于普通的磁头和圆柱形介质。
在开发U盘的过程中,Flash被用作存储介质。
它具有其特定的结构特征。
以16M三星K9F2808U0A-YCB0闪存为例。
它有1024个块,每个块有32页,并且每页有512 + 16 = 528字节。
2. Flash的结构Flash的读写有其自身的特点:1)读写必须以Page为单位; 2)写入前必须擦除原始内容; 3)擦除操作必须在该块上执行,即至少一次擦除一个块的内容。
针对这种情况,将一个Flash页面设置为1个扇区,并将其2个块和64个扇区设置为一个集群。
这样,群集的容量仅为512 * 64 = 32K,可以满足FAT16群集的大小。
要求。
当FAT分配空间时,它是根据群集分配的,但是它给出的地址是LBA(逻辑块地址),即,它仅给出一个扇区号。
例如,对于此Flash,如果LBA设为0x40,则Real表示群集1的扇区1。
因此,有必要将逻辑块地址转换为物理地址,以便可以访问数据。
根据我们定义的结构,转换公式为:Flash块=逻辑块地址/ 0x20 Flash页面=逻辑块地址%0x20实际上,最好将每个群集定义为32个扇区,因为物理结构和逻辑结构碰巧是一样的。
但这并不是预防性的,因为无论逻辑块地址给出什么值,只要遵循上面的公式,您始终可以获得物理上正确的块和页,然后使用Flash读写命令读取相应的块和页面。
阅读问题更加复杂,将在以后介绍。
因此,仅当BBP中给出了存储介质信息时,才需要集群和扇区的概念来通知系统。
我们只需要在LBA和物理地址之间进行转换。
由于Flash作为U盘不需要引导,因此它不能有MBR区域,而只能包括DBR,FAT,DIR和DATA区域。
因此,Flash的前两个块的内容如下:LBA块/页面长度内容描述0 0,0 512字节MBR = BPB +可执行代码+ 55AA(查看内容)1〜2 0,1〜0,2 1024字FAT区域(第一个FAT)部分3〜4 0,3〜0,4 1024字节FAT区域备份(第二个FAT)5〜39H目录区域(调整BPB中的目录条目数以使其刚被占用此集群) 40H〜数据区(由于目录区占用一个集群,该数据区从新集群的第一个风扇开始)当主机发送READ命令时,Flash读写操作开始,并且主机首先将MBR读取到获取相关的存储介质的相关信息,例如扇区的长度,每个集群的扇区数以及扇区的总数等,以便了解磁盘有多大。
如果读取正确,则将读取文件分配表,然后在PC上的可移动驱动器号中显示文件目录,并且可以复制,删除或创建文件。
系统自动将这些命令转换为Read或Write命令,并通过USB READ或WRITE命令块描述符从Flash中相应的扇区读取数据,或将特定长度的数据写入Flash中的相应群集。
3. Flash读写是基于Flash读写的特性,特别是可以随机读取而不能随机写入的问题。
需要通过设置缓冲区来解决。
在与USB主机进行数据交换的过程中,最小单位是扇区:512字节。
由于必须在写入之前先擦除闪存,并且一次必须擦除一个块,因此在擦除一个块之前,必须保存同一块中的相关扇区数据。
因此,如果每次接收到扇区的内容时都执行擦除,保存和写入操作,则系统任务将非常繁重,并且将无法及时响应USB主机的请求。
因此,在系统中设置一个32K的缓冲区(ARM7系统具有2M SDRAM,因此内存就足够了,如果您在8051平台上,则需要找到另一种方法),在每次数据传输完成后,记下开始风扇要写这个时间面积和总数