【OK6410裸机程序】NAND Flash
来源:互联网 发布:淘宝店铺怎么设置分类 编辑:程序博客网 时间:2024/05/08 11:49
这里先转载一篇很详细的博文:
OK6410裸机简单的NANDFLASH读写及擦除
NAND FLASH(K9GAG08U0D)主的存储器主要有2部分组成:页(Page)、块(Block)。
● 每页大小为:(4K+218)字节,4K用来存储数据,218字节主要用于存储控制信息。如图1.2,每页末尾都有218字节的额外空间,主要是为了便于管理每一页。Eg,使用这218位中的某一位表示该页是否已经写满数据的标志位。如果该位为1,则表示该页写满。反之,表示该页为空。只需要查询该位即可知道该页是否存满数据。
● 每块大小为:128个页
整个NAND FLASH(K9GAG08U0D)由4K(4096)个块组成。
NAND FLASH容量=块的数目*每块的容量
=块的数目*(每块包含页的数目*每页的容量)
=4KBlocks*(128Pages*(4k+218b))
=4KBlocks*128Pages*4k+4KBlocks*128Pages*218b
=2048MBytes+109Mbytes
当系统以Nand方式启动时,硬件将Nand Flash的前8KB拷贝到Steppingstone,然后从0地址开始运行程序,在这8KB以内代码中,我们需要完成必要的硬件初始化,如果代码超过8K,我们还需要将剩余代码的搬移到链接地址处,一般在SDRAM/DDR中。其中,硬件部分需要初始化系统时钟、DDR和NAND Flash三部分。
S3C6410启动时拷贝的8K代码不是存储在Nand flash的第一页上,而是存储在Nand flash的前4页上,每页2K,总共8K,这是S3C6410芯片的硬件结构决定的!也就是说,虽然我们的Nand flash的页大小是8K,但是S3C6410为了适应各种型号的Nand flash并保证硬件能正确的拷贝Nand flash中的前8K到SRAM中,硬性的加上这一规定。
从NAND Flash读一页数据到DDR,参数buf为指向DDR的指针,addr是NAND Flash的页号,large_block用来指定页大小。
static int nandll_read_page (unsigned char *buf, unsigned long addr, int large_block){int i;int page_size = 512;if (large_block==2) page_size = 4096;NAND_ENABLE_CE(); // Ñ¡ÖÐnandNFCMMD = NAND_CMD_READ0;/* Write Address */NFADDR = 0;if (large_block) NFADDR = 0;NFADDR = (addr) & 0xff;NFADDR = (addr >> 8) & 0xff;NFADDR = (addr >> 16) & 0xff;if (large_block) NFCMMD = NAND_CMD_READSTART;NF_TRANSRnB();for(i=0; i < page_size; i++) { *buf++ = NFDATA;}NAND_DISABLE_CE();return 0;}
前8k拷贝到DDR的数据来自NAND Flash的前4页,每页2K。后面的每页4K拷贝。
int copy2ddr(unsigned int nand_start, unsigned int ddr_start, unsigned int len){unsigned char *dest = (unsigned char *)ddr_start;unsigned int free_page = 0;int i;if(len > 8192){free_page = ((len - 8192)+4096) >> 12;}/* ³õʼ»¯nand flash controller */nand_init();/* ¶Ánand flash *//* Read pages */for (i = 0; i < 4; i++, dest+=2048){nandll_read_page(dest, i, 2);}/* Read pages */for (i = 4; i < (free_page+4); i++, dest+=8192) {nandll_read_page(dest, i, 2);}return 0;}
0 0
- 【OK6410裸机程序】NAND Flash
- OK6410 烧写裸机程序到 nand flash
- nand flash裸机程序
- OK6410裸机简单的NAND FLASH驱动
- TX2440裸机程序-nand flash
- s3c2440的Nand flash裸机程序
- OK6410裸机程序
- OK6410裸机程序---leds
- OK6410裸机程序
- OK6410裸机程序---leds
- OK6410裸机程序 ----led
- 在micro2440中写NAND FLASH 裸机程序的理解
- 根据韦东山修改的mini2440 nand flash裸机程序
- Nand Flash裸机驱动设计
- OK6410裸机程序---hello world
- OK6410裸机程序---hello world
- OK6410裸机程序---hello world
- 【OK6410裸机程序】点亮LED
- 如何在tomcat服务器中读取xml文件(路径问题)
- vmware虚拟化恢复软件
- mysql分表和表分区详解
- Qt学习之路(53): 拖放技术之二
- iOS常用方法总结
- 【OK6410裸机程序】NAND Flash
- nessus安装及使用
- Android Studio 编译、同步慢的解决方法
- Ios fmdb的使用
- 获取一个字符串在另一个字符串中出现的次数
- Xamarin.Forms中的Animation动画
- How to use ValidationSummary control in asp.net
- 【OpenCV】视觉SLAM漫谈 (合集)
- 正确调用Paint的measureText()方法取得字符串显示的宽度值