韦东山嵌入式Linux学习——015 Nand Flash内存结构分析

Nand Flash内存结构分析

  • 硬件平台:韦东山嵌入式Linxu开发板(S3C2440.v3)
  • 软件平台:运行于VMware Workstation 12 Player下UbuntuLTS16.04_x64 系统
  • 参考资料:K9F2G08U0C datasheet,http://blog.chinaunix.net/uid-28834618-id-3620422.html
  • 源码仓库:https://gitee.com/d_1254436976/Embedded-Linux-Phase-1


一、芯片图分析

在这里插入图片描述
对于我们所使用的这块K9F2G08U0C芯片,通过电路与原理图可以知道如下信息:
  1、I/O线只有8条,位宽位8位(bit0-bit7)
  2、1 Nand Flash = 2048 Blocks = 2112Mbits = 256MB = 2Gb
  3、1 Block   = 64 Pages = 132KB
  4、1 Page    = 2112 B = 2KB(datafield)+ 64B(OOB)

二、Page分析

  在CPU进行读、写、擦除操作时,只关心数据,不需要看OOB,这里就没有画出OOB区
在这里插入图片描述
1 Page = 2112 B = 2KB(datafield)+ 64B(OOB)
2112B -1 = 1000 0011 1111‬,共12bits,对应上图的A[11:0]
  结论一:1st与2nd Cycle发出的是一个Page中,该列与该Page第一个列的相对地址,即图中对应的0,1,2…2047列

三、Block分析

  在CPU进行读、写、擦除操作时,只关心数据,不需要看OOB,这里就没有画出OOB区
在这里插入图片描述
1 Block = 64 Pages = 132KB
64 = 11 1111‬,共6bits,对应图中的A[12:17]
  结论二:3rd Cycle发出对应的是:一个Block中,该Page与该Block第一个Page的相对地址,即上图所画的0,1,2…63 Page

四、Device分析

在这里插入图片描述
1 Device = 2048 Blocks = 2112Mbits = 256MB = 2Gb
2048 = 111 1111 1111,共11bits,对应图中的A[18:28]
  结论三:3rd Cycle的A[18:19],4th Cycle的A[20:27]与5th的A[28]对应:一个Device中,该Block与该Device第一个Block的相对地址,即上图所画的0,1,2…2047Block。

五、读、写、擦除操作分析

  对于flash的读写都是以一个page开始的,而擦写则是以一个block为单位的。按照这种组织方式形成三类地址
  Column Address:列地址——对应结论一的A[0:7]
  Page Address:   页地址——对应结论二的A[8:17]
  Block Address: 块地址——对应结论三的A[18:28]

1、读写操作

  读写都是以一个page为单位,加上由于自身位反转的特性,所以我们写入的数据操大于2048Bytes时,也是可以成功写入。
下面使用上一篇文章中所编写写操作程序进行分析:

void nand_write(unsigned int addr,unsigned char *buf,int len);
void do_write_nand_flash(void)
{
	unsigned int addr;
	unsigned char str[100];
	/* 获取地址 */
	printf("Enter the address of sector to write: ");
	addr = get_uint();

	/* 获取写入信息 */
	printf("Enter the address to write: ");
	gets(str);

	nand_write(addr,str,strlen(str)+1);
	printf("writing ...\n\r");
}

  unsigned char str[100] 这一个参数,是用来存储我们所写入到Nand Flash的数据,数据类型为:unsigned char,即对于字符数组中,每一位str[n]的数据大小都为1Byte。即是1个Page中一列可以存储的数据大小
通过运行截图可以印证:
在这里插入图片描述

2、擦除操作

  擦写则是以一个block为单位的,这个可通过时序图与具体程序运行进行验证:
时序图中,发送的地址只有Row Address,即结论三中的地址
在这里插入图片描述
具体运行程序截图:
在这里插入图片描述

  可以发现,当我们擦除地址为0x100100中的数据时,会擦除0x100000对应的块的数据。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值