`
cjc
  • 浏览: 681000 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

NandFlash系列之二:S3C2410读写Nand Flash分析

阅读更多
<script>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</script>

作者:刘洪涛,华清远见嵌入式培训中心高级讲师。

一、结构分析

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及坏块处理问题将在下个专题中讲述。

分享到:
评论

相关推荐

    S3C2410中文资料6第六章 Nand Flash控制器.pdf

    S3C2410A通过内置的NAND Flash控制器,不仅能够高效地管理NAND Flash存储器,还提供了一系列高级特性,如硬件ECC(Error Correction Code,错误校正码)、自动导入模式等,显著提升了系统的可靠性和性能。...

    nand_Flash_norflash_driver.rar_nand flash_norflash_s3c2410 nand

    本话题主要探讨的是针对S3C2410处理器的NAND Flash和NOR Flash驱动程序的相关知识。S3C2410是一款由Samsung公司推出的ARM920T内核的微处理器,广泛应用于嵌入式设备,如平板电脑、数字媒体播放器等。 **NAND Flash...

    nand_flash_test.rar_s3c2410 nandflash

    在本文中,我们将深入探讨与"S3C2410的NAND Flash调试程序"相关的技术知识点,这个主题主要涉及到嵌入式系统、微处理器S3C2410以及NAND Flash存储器的使用。S3C2410是由三星公司(Samsung)开发的一款基于ARM920T...

    s3c2410处理器平台下Nandflash的读写.pdf

    《S3C2410处理器平台下Nandflash的读写详解》 在嵌入式系统设计中,数据的存储至关重要,而Nandflash作为一种常见的非易失性存储芯片,因其可擦可写、断电后数据不丢失、体积小、价格适中等优点,被广泛应用。本文...

    nand.rar_NAND 驱动_nand flash 驱动_s3c2410 nand

    NAND闪存驱动是嵌入式系统中一个关键的组件,尤其在基于Samsung S3C2410处理器的平台上。S3C2410是一款广泛应用的ARM9微处理器,设计用于移动设备和嵌入式系统,它内置了对NAND闪存的支持。NAND闪存因其高密度和低...

    s3c2410技术精解(timer,cache,mmu,nandflash,etc[1].)

    《S3C2410技术精解:深入解析Timer、Cache、MMU与NandFlash》 在嵌入式系统领域,S3C2410是一款广泛应用的微处理器,由三星公司设计,适用于各种嵌入式设备,如移动电话、PDA以及嵌入式系统开发板等。本文将深入...

    NandFlash系列之二

    在本文中,我们将专注于NandFlash的结构、读写操作,以及如何在S3C2410处理器上处理不同型号的NandFlash,特别是三星的k9f1208。 S3C2410处理器集成了一个8位的NandFlash控制器,使得与NandFlash的交互变得更加便捷...

    NandFlash驱动程序

    通过深入理解和使用S3C2410_NandFlash驱动代码,开发者可以更好地理解Nand Flash的工作原理,以及如何在实际项目中与硬件交互,从而优化存储系统的性能和稳定性。同时,这份代码也可作为其他类似平台开发Nand Flash...

    S3C2410中文手册

    4. **NAND FLASH控制器**:NAND FLASH是常见的非易失性存储器,S3C2410内置的控制器支持NAND Flash的读写操作。手册会详细描述控制器的工作原理、错误校验机制以及如何与NAND Flash设备进行交互。 5. **DMA(直接...

    使用JLink间接烧写S3C2410、S3C2440开发板Nor、Nand Flash的方法

    本文使用一个间接的方法来实现对S3C2410、S3C2440开发板的Nor、Nand Flash的烧写。原理为:JLink可以很方便地读写内存、启动程序,那么可以把一个特制的程序下载到开发板上的SDRAM去,并运行它,然后使用这个程序来...

    三星S3C2410使用手册中文版

    三星S3C2410是一款基于ARM920T内核的微处理器,广泛应用于嵌入式系统设计,如消费电子、工业控制和移动设备等。这份使用手册中文版为那些想要理解和开发基于S3C2410平台的系统提供了宝贵的资源。 **第一章 + S3C...

    S3C2410基础实验 S3C2410基础实验

    NAND Flash是嵌入式系统常用的非易失性存储,S3C2410的NAND控制器提供了与这类存储器交互的硬件支持,实验讲解了如何进行初始化、读写数据以及错误处理。 实验七:“UART”(Universal Asynchronous Receiver/...

    S3C2410A中文数据手册

    再者,`s3c2410a_6nandflash.pdf`关注的是NAND闪存接口。NAND闪存是一种常见的非易失性存储器,广泛应用于移动设备和嵌入式系统。S3C2410A支持NAND闪存,手册会详细说明如何与NAND闪存进行通信,包括初始化、读写...

    S3C2410A启动代码

    《S3C2410A/2440启动代码详解:从NAND Flash启动的奥秘》 在嵌入式系统开发中,处理器的启动代码是整个系统的基石,它负责初始化硬件、设置内存映射、加载操作系统内核等关键任务。本文将深入解析S3C2410A和S3C2440...

    ARM9 2410移植之Nand flash 驱动的编写与移植.pdf

    - **4.2.1 s3c2410 专有数据结构** - **4.2.2 Linux 通用数据结构说明** Linux 针对NAND Flash 设备提供了专用的数据结构以及通用的数据结构,以便更好地管理和操作设备。 ##### 4.3 Linux 下 NAND Flash 驱动说明...

    nandflash_k9f1208.rar_ADS1.2_S3C2410 k9F12_arm k_k9f1208 24_s3c2

    本文将围绕S3C2410处理器上的NAND Flash驱动程序进行深入探讨,基于开发环境ADS1.2,以“nandflash_k9f1208.c”为核心代码,解析其设计原理和实现细节。 S3C2410是一款由Samsung公司推出的高性能、低功耗的ARM920T...

    s3c2410 2.6.22.1内核移植config文件 cs8900移植文件 uboot.bin 支持nandflash启动

    在本文中,我们将深入探讨如何将s3c2410处理器与Linux 2.6.22.1内核进行移植,同时配置uboot.bin引导加载器以支持nandflash启动,并集成cs8900网络接口控制器的驱动。这些文件在移植过程中扮演着关键角色,下面将...

    2410+uboot+nandflash移植

    本教程将详细解释如何将u-boot移植到基于S3C2410处理器的sbc2410开发板上,并支持从NAND Flash启动。 一、移植前准备 1. **工作环境**: - 操作系统:RedHat 9 - 内核版本:2.4.20 - 交叉编译器:Arm-linux-gcc...

    s3c2410driver

    6. **NAND Flash驱动**:S3C2410集成的NAND Flash控制器用于与非易失性存储器交互。驱动程序会处理ECC(错误校验码)计算,擦除和编程操作。 7. **LCD控制器驱动**:对于有LCD显示功能的设备,这个驱动程序会配置和...

Global site tag (gtag.js) - Google Analytics