一、结构分析
S3C2410处理器集成了8位NandFlash控制器。目前市场上常见的8位NandFlash有三星公司的k9f1208、k9f1g08、k9f2g08等。k9f1208、k9f1g08、k9f2g08的数据页大小分别为512Byte、2kByte、2kByte。它们在寻址方式上有一定差异,所以程序代码并不通用。本文以S3C2410处理器和k9f1208系统为例,讲述NandFlash的读写方法。
NandFlash的数据是以bit 的方式保存在memory cell里的,一般来说,一个cell 中只能存储一个bit,这些cell 以8 个或者16 个为单位,连成bit line,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。这些Line 组成Page, page 再组织形成一个Block。k9f1208的相关数据如下:
1block=32page;1page=528byte=512byte(Main Area)+16byte(Spare Area)。
总容量为=4096(block数量)*32(page/block)*512(byte/page)=64Mbyte
NandFlash以页为单位读写数据,而以块为单位擦除数据。按照k9f1208的组织方式可以分四类地址: Column Address、halfpage pointer、Page Address 、Block Address。A[0:25]表示数据在64M空间中的地址。
Column Address表示数据在半页中的地址,大小范围0~255,用A[0:7]表示;
halfpage pointer表示半页在整页中的位置,即在0~255空间还是在256~511空间,用A[8]表示;
Page Address表示页在块中的地址,大小范围0~31,用A[13:9]表示;
Block Address表示块在flash中的位置,大小范围0~4095,A[25:14] 表示;
二、读操作过程
K9f1208的寻址分为4个cycle。分别是:A[0:7]、A[9:16]、A[17:24]、A[25]。
读操作的过程为: 1、发送读取指令;2、发送第1个cycle地址;3、发送第2个cycle地址;4、发送第3个cycle地址;5、发送第4个cycle地址;6、读取数据至页末。
K9f1208提供了两个读指令,‘0x00’、‘0x01’。这两个指令区别在于‘0x00’可以将A[8]置为0,选中上半页;而‘0x01’可以将A[8]置为1,选中下半页。
虽然读写过程可以不从页边界开始,但在正式场合下还是建议从页边界开始读写至页结束。下面通过分析读取页的代码,阐述读过程。
static void ReadPage(U32 addr, U8 *buf) //addr表示flash中的第几页,即‘flash地址>>9’
{
U16 i;
NFChipEn(); //使能NandFlash
WrNFCmd(READCMD0); //发送读指令‘0x00’,由于是整页读取,所以选用指令‘0x00’
WrNFAddr(0); //写地址的第1个cycle,即Column Address,由于是整页读取所以取0
WrNFAddr(addr); //写地址的第2个cycle,即A[9:16]
WrNFAddr(addr>>8); //写地址的第3个cycle,即A[17:24]
WrNFAddr(addr>>16); //写地址的第4个cycle,即A[25]。
WaitNFBusy(); //等待系统不忙
for(i=0; i<512; i++)
buf[i] = RdNFDat(); //循环读出1页数据
NFChipDs(); //释放NandFlash
}
三、写操作过程
写操作的过程为: 1、发送写开始指令;2、发送第1个cycle地址;3、发送第2个cycle地址;4、发送第3个cycle地址;5、发送第4个cycle地址;6、写入数据至页末;7、发送写结束指令
下面通过分析写入页的代码,阐述读写过程。
static void WritePage(U32 addr, U8 *buf) //addr表示flash中的第几页,即‘flash地址>>9’
{
U32 i;
NFChipEn(); //使能NandFlash
WrNFCmd(PROGCMD0); //发送写开始指令’0x80’
WrNFAddr(0); //写地址的第1个cycle
WrNFAddr(addr); //写地址的第2个cycle
WrNFAddr(addr>>8); //写地址的第3个cycle
WrNFAddr(addr>>16); 写地址的第4个cycle
WaitNFBusy(); //等待系统不忙
for(i=0; i<512; i++)
WrNFDat(buf[i]); //循环写入1页数据
WrNFCmd(PROGCMD1); //发送写结束指令’0x10’
NFChipDs(); //释放NandFlash
}
四、总结
本文以S3C2410处理器和k9f1208系统为例讲述了nand flash的读写过程。在读写过程中没有考虑到坏块问题,有关ecc及坏块处理问题将在下个专题中讲述。 (作者:刘洪涛,华清远见嵌入式培训中心金牌讲师。)
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/hongtao_liu/archive/2009/05/22/4208886.aspx
分享到:
相关推荐
S3C2410A通过内置的NAND Flash控制器,不仅能够高效地管理NAND Flash存储器,还提供了一系列高级特性,如硬件ECC(Error Correction Code,错误校正码)、自动导入模式等,显著提升了系统的可靠性和性能。...
本话题主要探讨的是针对S3C2410处理器的NAND Flash和NOR Flash驱动程序的相关知识。S3C2410是一款由Samsung公司推出的ARM920T内核的微处理器,广泛应用于嵌入式设备,如平板电脑、数字媒体播放器等。 **NAND Flash...
在本文中,我们将深入探讨与"S3C2410的NAND Flash调试程序"相关的技术知识点,这个主题主要涉及到嵌入式系统、微处理器S3C2410以及NAND Flash存储器的使用。S3C2410是由三星公司(Samsung)开发的一款基于ARM920T...
《S3C2410处理器平台下Nandflash的读写详解》 在嵌入式系统设计中,数据的存储至关重要,而Nandflash作为一种常见的非易失性存储芯片,因其可擦可写、断电后数据不丢失、体积小、价格适中等优点,被广泛应用。本文...
NAND闪存驱动是嵌入式系统中一个关键的组件,尤其在基于Samsung S3C2410处理器的平台上。S3C2410是一款广泛应用的ARM9微处理器,设计用于移动设备和嵌入式系统,它内置了对NAND闪存的支持。NAND闪存因其高密度和低...
《S3C2410技术精解:深入解析Timer、Cache、MMU与NandFlash》 在嵌入式系统领域,S3C2410是一款广泛应用的微处理器,由三星公司设计,适用于各种嵌入式设备,如移动电话、PDA以及嵌入式系统开发板等。本文将深入...
在本文中,我们将专注于NandFlash的结构、读写操作,以及如何在S3C2410处理器上处理不同型号的NandFlash,特别是三星的k9f1208。 S3C2410处理器集成了一个8位的NandFlash控制器,使得与NandFlash的交互变得更加便捷...
通过深入理解和使用S3C2410_NandFlash驱动代码,开发者可以更好地理解Nand Flash的工作原理,以及如何在实际项目中与硬件交互,从而优化存储系统的性能和稳定性。同时,这份代码也可作为其他类似平台开发Nand Flash...
4. **NAND FLASH控制器**:NAND FLASH是常见的非易失性存储器,S3C2410内置的控制器支持NAND Flash的读写操作。手册会详细描述控制器的工作原理、错误校验机制以及如何与NAND Flash设备进行交互。 5. **DMA(直接...
本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来...
三星S3C2410是一款基于ARM920T内核的微处理器,广泛应用于嵌入式系统设计,如消费电子、工业控制和移动设备等。这份使用手册中文版为那些想要理解和开发基于S3C2410平台的系统提供了宝贵的资源。 **第一章 + S3C...
NAND Flash是嵌入式系统常用的非易失性存储,S3C2410的NAND控制器提供了与这类存储器交互的硬件支持,实验讲解了如何进行初始化、读写数据以及错误处理。 实验七:“UART”(Universal Asynchronous Receiver/...
再者,`s3c2410a_6nandflash.pdf`关注的是NAND闪存接口。NAND闪存是一种常见的非易失性存储器,广泛应用于移动设备和嵌入式系统。S3C2410A支持NAND闪存,手册会详细说明如何与NAND闪存进行通信,包括初始化、读写...
《S3C2410A/2440启动代码详解:从NAND Flash启动的奥秘》 在嵌入式系统开发中,处理器的启动代码是整个系统的基石,它负责初始化硬件、设置内存映射、加载操作系统内核等关键任务。本文将深入解析S3C2410A和S3C2440...
- **4.2.1 s3c2410 专有数据结构** - **4.2.2 Linux 通用数据结构说明** Linux 针对NAND Flash 设备提供了专用的数据结构以及通用的数据结构,以便更好地管理和操作设备。 ##### 4.3 Linux 下 NAND Flash 驱动说明...
本文将围绕S3C2410处理器上的NAND Flash驱动程序进行深入探讨,基于开发环境ADS1.2,以“nandflash_k9f1208.c”为核心代码,解析其设计原理和实现细节。 S3C2410是一款由Samsung公司推出的高性能、低功耗的ARM920T...
在本文中,我们将深入探讨如何将s3c2410处理器与Linux 2.6.22.1内核进行移植,同时配置uboot.bin引导加载器以支持nandflash启动,并集成cs8900网络接口控制器的驱动。这些文件在移植过程中扮演着关键角色,下面将...
本教程将详细解释如何将u-boot移植到基于S3C2410处理器的sbc2410开发板上,并支持从NAND Flash启动。 一、移植前准备 1. **工作环境**: - 操作系统:RedHat 9 - 内核版本:2.4.20 - 交叉编译器:Arm-linux-gcc...
6. **NAND Flash驱动**:S3C2410集成的NAND Flash控制器用于与非易失性存储器交互。驱动程序会处理ECC(错误校验码)计算,擦除和编程操作。 7. **LCD控制器驱动**:对于有LCD显示功能的设备,这个驱动程序会配置和...