嵌入式Linux裸机开发(十一)——Nandflash

嵌入式Linux裸机开发(十一)——Nandflash

一、Nand Flash简介

NandFlash是Flash的一种,具有容量较大,改写速度快等优点,适用于大量数据的存储。NandFlash没有专门的地址线,发送指令、地址和数据都通过8/16位宽的总线(I/O接口)到内部的寄存器。

NandFlash分为SLC和MLC两类。SLC全称为Single-Level Cell,单层单元闪存,MLC全称为Multi-Level Cell,多层单元闪存。SLC每一个单元储存一位数据,而MLC通过使用大量的电压等级,每一个单元储存两位数据,数据密度比较大。SLC晶片生产成本较高,在效能上大幅胜于MLC。SLC晶片可重复写入次数约10万次,而MLC晶片的写入次数至少要达到1万次才算标准。MLC缺点有:读写速度较慢、MLC能耗比SLC高、MLC理论写入次数上限相对较少、MLC的价格比SLC低。

二、NandFlash存储器结构

1、NandFlash存储器结构

NAND Flash存储器由block (块) 构成, block的基本单元是page (页)。每一个block由16, 32或64个page组成。大多数的NAND Flash器件每一个page (页)内包含512个字节的Data area(数据存储区域)和扩展的16字节的 Spare area(备用区域)。每一个page的大小为512+16=528字节,称为small page。

大容量的(1Gbig或更多)的NAND Flash,page的容量较大, 每page内Data area(数据存储区域)的大小为2048字节, Spare area(备用区域)大小为64字节。

NAND Flash的读取和烧录以页为基础, 而NORFlash以字节或字为基础。 NAND Flash的擦除操作是基于block (块)的。在NAND Flash上有三种基本的操作:读取一个页, 烧录一个页和擦除一个块。

在一个页的读取操作中, 该页内528字节的数据首先被传输到数据寄存器中, 然后再输出。在一个页的烧录中, 该页内528字节的数据首先被写进数据寄存器, 然后再存储到存储阵列中。在一个块的擦除操作中, 一组连续的页在单独操作下被擦除。

2、备用单元结构

NAND Flash厂商在生产制程中使用Spare area(备用区域)来标识bad block,  Spare area(备用区域)内所有的字节都可以像Data area(数据存储区域)内的字节一样被用户用来存储数据。

3、Bad block (Invalid block)管理

自从NAND结构被设计用来作为低成本的多媒体存储器, 标准规范中是允许存在bad block的。只要bad block的容量小于总容量的2% 那就是允许的。一个block中如果有坏的存储区域, 那它就会被标识成bad block 。 bad block 列表可以存储在一个芯片中的一个好的block上, 也可以存储在同一系统的另外一颗芯片上。bad block列表是被要求的, 由于NAND Flash只能执行有限的读和擦除次数。由于所有的Flash存储器最终都会被磨损而且不能再使用, bad block列表需要被用来跟踪记录那些在使用中发现的bad block 。允许bad block 的存在有利于提高芯片的产量,同时也降低了成本。每个block是独立的, 而且是被bit lines隔离的, bad block 的存在并不会影响那些其他block的正常工作。

Bad block 的一般分为两种: 生产过程中产生的; 使用过程中产生的。当block被发现是bad block , 一般是在该块的前两个page (页)的第517字节处用非FF来标识。使用过程中产生的bad block 是没有被工厂标识的。

A、Skip Block method(跳过坏块方式)

先读取存储器内的所有备用区域。那些被标识成bad block的地址都被收集起来。接下来, 数据被连续的写入目标FLASH器件。当目标地址与先前收集的bad block 地址一致时, 跳过坏块, 数据被写到下一个好的块中。然后继续保留bad block 中备用区域的标识信息。所以在程序导入执行之前, 使用者的系统通过读取Spare area(备用区域)的信息能建立一个bad block 的地址列表。

B、Reserved Block Area method(保留块区域方式)

bad block 在使用者的系统中能够被好block (块)所替代。

C、Error Checking and Correction(错误检测和纠正)
        使用ECC纠错机制是为了让存储的数据完整无误

三、NandFlash接口

NandFlash芯片内部有存储颗粒和内部管理接口电路,外部SoC根据NandFlash接口时序访问NandFlash芯片。S5PV210内部集成了NandFlash控制器。

NandFlash引脚功能如下:

NandFlash命令码:

NandFlash芯片内部接口电路可以接收外部SoC发送的命令,与SoC交互。外部SoC对NandFlash芯片的操作都必须按照NandFlash规定的时序进行。

三、NandFlash常见操作

1、坏块检查

NandFlash使用前需要统一擦除(按块擦除),擦除后填充1。擦除块,将块中的每个字节与0xFF比较,如果不是0xFF,是坏块。

2、页烧录(页写操作)

页烧录前需要擦除,如果页烧录之前没有擦除,烧录的数据将是错误的。烧时,SoC通过命令线、IO线依次发送烧录命令、烧录地址、烧录数据等进入NandFlash。NandFlash芯片接口电路接收页数据到缓冲区,再集中烧录到NandFlash的存储颗粒。烧录过程需要一定时间,SoC的NandFlash控制器需要等待NandFlash烧录完,等待过程中SoC的NandFlash控制器将会不断读取页烧录状态。SoC的NandFlash控制器收到正确的状态响应时,确认页烧录已经成功,如果一直未收到正确的状态,则认为烧录页所在的块是坏块。

页烧录编程流程如下:

A、发出片选信号

B、发送页烧录命令第一个周期命令0x80

C、随机写页内某个地址的值

D、发送页写命令0x85

E、写入页内偏移地址

F、写入数据

G、发送页烧录命令第二个周期命令0x10

H、等待状态

I、读取状态,页烧录成功取消片选信号,失败取消片选信号

3、块擦除

擦除操作必须指定块对齐的地址。块擦除编程流程如下:

A、获取擦除块的地址(块对齐)

B、发出片选信号

C、发送擦除命令,第一个周期发命令0x60,第二个周期发块地址,第三个周期发命令0xd0 。

D、清除状态,等待状态。

E、读取状态,擦除成功则取消片选,擦除失败取消片选。

4、页读取

页读取编程流程:

A、发出片选信号

B、发送页读取命令,第一个周期发命令0x00,第二个周期发送页地址,第三个周期发送命令0x30

C、等待状态

D、发送页读取第一个周期命令0x05

E、写入页内偏移地址

F、发送页读取第二个周期命令0xE0

G、读取数据

H、检查状态,如果读取成功,取消片选信号,读取失败取消片选信号。

五、S5PV210 NandFlash控制器

NandFlash控制器的主要特性:

支持512B,2KB,4KB,8KB页的NandFlash

软件模式:能直接访问NandFlash芯片,支持读/烧录/擦除NandFlash芯片

支持8bit的NandFlash芯片接口总线

产生、检测、指示硬件ECC

支持SLC/MLC类型NandFlash芯片

支持1/4/8/12/16位的ECC

SFR接口:支持字节、半字、字访问数据和ECC数据寄存器,字访问其他寄存器。

SoC通过控制SFR(NandFlash控制器)

NFCONF:NandFlash配置寄存器

NFCONT:NandFlash控制寄存器

NFCMMD:NandFlash命令寄存器

NFADDR:NandFlash地址寄存器

NFDATA:NandFlash数据寄存器

NFSBLK:烧录块起始地址

NFEBLK:烧录块结束地址

NFSTAT:状态寄存器

六、NandFlash编程实践

Smart210的NandFlash为512MB的SLC类型。

    电路原理图查阅

查阅核心板电路原理图有关NandFlash部分,

NandFlash片选信号引脚为Xm0CSn2,在核心板电路原理图搜Xm0CSn2可知,NandFlash接在Memory Port0,对应GPIO为MP01-MP03

GPIO配置如下:

MP0_1CON = 0x22333322;

MP0_2CON = 0x00002222;

MP0_3CON = 0x22222222;

工程源代码见附件,编译后在Smart210烧录可以正常运行,可以正常的对NnandFlash进行擦除、烧录、读取等测试操作。

参考博文:

NandFlash简介(CSDN 喝醉的毛毛虫

时间: 2024-08-26 14:29:07

嵌入式Linux裸机开发(十一)——Nandflash的相关文章

嵌入式Linux裸机开发(十)——SD卡启动

嵌入式Linux裸机开发(十)--SD卡启动 存储设备分类: 磁存储设备:软盘.硬盘.光盘.CD.磁带 Flash:NandFlash.NorFlash 缺点:时序复杂,无坏块处理机制,接口不统一 NandFlash:MLC(可靠性差,容量大).SLC(可靠性高.容量小) 扩展卡式Flash:SD卡.MMC卡.MicroSD(TF卡) 内部为NnadFlash存储颗粒,外部封装了接口,接口标准统一.通用. 缺点:频繁使用导致卡槽接触不可靠 iNand.MoviNand.eSSD: 内部为Nand

嵌入式Linux裸机开发(十二)——iNand简介

嵌入式Linux裸机开发(十二)--iNand简介 一.iNand简介 iNand是SanDisk公司研发的存储芯片,可以看成SD卡或MMC卡芯片化. iNand是SanDisk公司符合eMMC协议的芯片系列名称,内部采用MLC存储颗粒.iNand接口电路设计复杂,功能完善,提供eMMC接口协议,与SoC的eMMC控制器配对通信. 相对MLC NandFlash,iNAND有以下优点: 1.提高性能 A.减少SOC的工作量,节约SOC资源. 如果使用MLC做存储,SOC要参与FLASH的坏块管理

嵌入式Linux裸机开发(十三)——I2C通信

嵌入式Linux裸机开发(十三)--I2C通信 一.IIC协议 1.IIC总线简介 I2C(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C总线是一种串行数据总线,只有二根信号线,一根是双向的数据线SDA,另一根是时钟线SCL.在 I2C总线上传送的一个数据字节由八位组成.总线对每次传送的字节数没有限制,但每个字节后必须跟一位应答位. IIC总线是一种串行总线,用于连接微控制器及其外围设备,具有以下特点:

嵌入式Linux裸机开发(七)——UART串口通信

嵌入式Linux裸机开发(七)--UART串口通信 一.UART串口通信简介 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER, 它用来传输串行数据.发送数据时, CPU 将并行数据写入UART,UAR按照一定的格式在一根电线上串 行发出:接收数据时, UART检测另一根电线的信号,将串行收集在缓冲区中, CPU 即可读取 UART 获得这些数据. 在 S5PV210中, UART提供了 4 对独立的异步串口I/O端口,

嵌入式Linux裸机开发(十五)——LCD

嵌入式Linux裸机开发(十五)--LCD 一.LCD简介 LCD(Liquid Crystal Display)是液晶显示器简称.LCD的构造是在两片平行的玻璃基板当中放置液晶盒,下基板玻璃上设置TFT(薄膜晶体管),上基板玻璃上设置彩色滤光片,通过TFT上的信号与电压改变来控制液晶分子的转动方向,从而达到控制每个像素点偏振光出射与否而达到显示目的. 1.LCD类型 按照背光源的不同,LCD可以分为CCFL和LED两种. A.CCFL 指用CCFL(冷阴极荧光灯管)作为背光光源的液晶显示器(L

嵌入式Linux裸机开发(一)——点亮Led

嵌入式Linux裸机开发(一)--点亮Led 开发板:友善之臂smart210 一.电路图查阅 1.底板电路图 查阅开发板底板电路图,查阅LED相关部分 LED电路工作原理: LED的正极接3.3V,负极接地时导通,LED发光. 开发板共有四颗LED,正极接3.3V,负极接开发板的LED1_LED4引脚,如果LED要点亮则需要输入低电平. 2.核心板电路图 查阅核心板电路图可知,LED1-LED4接在SoC的GPJ2_0-GPJ2_3,通过控制GPJ2_0-GPJ2_3的寄存器使对应GPIO引脚

嵌入式Linux裸机开发(五)——SDRAM初始化

嵌入式Linux裸机开发(五)--SDRAM初始化 一.SDRAM初始化流程 S5PV210有两个独立的DRAM控制器,一个最大支持512MB,一个最大支持1024MB,但两个控制器必须支持相同类型的内存. 根据三星S5PV210文档可知,DDR2类型内存的初始化流程如下: 1.提供稳压电源给内存控制器和内存芯片,内存控制器必须保持CLE在低电平,此时就会提供稳压电源.注:当CKE引脚为低电平时,XDDR2SEL应该处于高电平 2.根据时钟频率正确配置PhyControl0.ctrl_start

嵌入式Linux裸机开发(九)——S5PV210定时器

嵌入式Linux裸机开发(九)--S5PV210定时器 S5PV210内部一共有四类定时器. 一.PWM定时器 1.PWM定时简介 S5PV210内部共有5个32bit的PWM定时器.PWM定时器可以生成内部中断.PWM定时器0.1.2.3具有PWM功能,可以驱动外部I/O信号.PWM定时器4是一个无外部引脚的内部定时器.PWM 定时器使用 PCLK_PSYS 作为时钟源. 每个定时器有一个由定时器时钟驱动的32位递减计数器.递减计数器的初始值是由TCNTBn自动装载而获得的.如果递减计数器减到

嵌入式Linux裸机开发(八)——S5PV210中断处理流程

嵌入式Linux裸机开发(八)--S5PV210中断处理流程 中断是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程.因硬件原因引起的中断过程的出现是不可预测的,即随机的,而软中断是事先安排的.引起中断的信号源称之为中断源.根据中断源的来源将中断分为外部中断和内部中断.中断源来自SoC内部(内部外设)的中断称为内部中断.中断源来自SoC外部,通过中断对应的GPIO引脚产生的中断称为外部中断.中断有四种状态: Inactive(不激活):没有被激活或挂起的中断