韦东山嵌入式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
*/


一、芯片图分析

在这里插入图片描述
对于我们所使用的这块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对应的块的数据。

发布了40 篇原创文章 · 获赞 29 · 访问量 3613

猜你喜欢

转载自blog.csdn.net/weixin_42813232/article/details/105168698