nandflash 的读写操作

本文详细介绍了NAND Flash的存储结构,包括block、page的分配,以及512bytes数据区和16bytes OOB。重点讲解了读取操作,包括Read1和Read2命令,以及如何通过Column Address和Page Address进行寻址。读操作以Page为单位,Read1命令分为4个Cycle,用于读取Data Field和Spare Field。此外,文章还展示了如何从NAND Flash的特定位置开始读取数据的实例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

       正如硬盘的盘片被分为磁道,每个磁道又分为若干扇区,一块nand flash也分为若干block,每个block分为如干page。一般而言,blockpage之间的关系随着芯片的不同而不同,典型的分配是这样的:
1block = 32page
1page = 512bytes(datafield) + 16bytes(oob)


       需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash的擦写,而擦写则是以一个block为单位的。同时必须提醒的是,512bytes理论上被分为1st half 2sd half,每个half各占256个字节。

我们讨论的K9F1208U0B总共有4096 Blocks,故我们可以知道这块flash的容量为4096 *(32 *528)= 69206016 Bytes = 66 MB
       但事实上每个Page上的最后16Bytes是用于存贮检验码和其他信息用的,并不能存放实际的数据,所以实际上我们可以操作的芯片容量为4096 *(32 *512) = 67108864 Bytes = 64 MB由 上图所示,1Page总共由528 Bytes组成,这528个字节按顺序由上而下以列为单位进行排列(1列代表一个Byte。第0行为第0 Byte ,第1行为第Byte,以此类推,每个行又由8个位组成,每个位表示1Byte里面的1bit)。这528Bytes按功能分为两大部分,分别是Data FieldSpare Field,其中Spare Field528Bytes里的16Bytes,16Bytes是用于在读写操作的时候存放校验码用的,一般不用做普通数据的存储区,除去这 16Bytes,剩下的512Bytes便是我们用于存放数据用的Data Field,所以一个Page上虽然有528Bytes,但我们只按512Bytes进行容量的计算。

        读命令有两个,分别是 Read1,Read2其中Read1用于读取Data Field的数据,而Read2则是用于读取Spare Field的数据。对于Nand Flash来说,读操作的最小操作单位为Page,也就是说当我们给定了读取的起始位置后,读操作将从该位置开始,连续读取到本Page的最后一个 Byte为止(可以包括Spare Field

        Nand Flash的寻址
        Nand Flash
的地址寄存器把一个完整的Nand Flash地址分解成Column AddressPage Address.进行寻址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值