nand flash ECC实战

2015-1-31

实战平台:

硬件环境:S3C2440

软件环境:裸机

static u8 ecc_t(const unsigned char *pData)
{

	unsigned int Line,Column;
	unsigned char ecc[8],ecc_tmp,ecc_column,ecc_line[256];

	// _CP_ //_LP_

	ecc_column = 0;
	for(Line = 0 ;  Line < 256; Line ++ ){
		ecc_column ^= pData[Line];
		ecc_line[Line] = 0;
		for(Column = 0 ; Column < 8 ; Column ++ ){
			ecc_line[Line] ^= (pData[Line] & (1<<Column))>>Column;
		}
	}

	//CP0:0,2,4,6
	ecc[0]= ((ecc_column) & (1<<0)>>0) ^
			((ecc_column) & (1<<2)>>2) ^
			((ecc_column) & (1<<4)>>4) ^
			((ecc_column) & (1<<6)>>6);

	//CP1:1,3,5,7
	ecc[1] =((ecc_column) & (1<<1)>>1) ^
			((ecc_column) & (1<<3)>>3) ^
			((ecc_column) & (1<<5)>>5) ^
			((ecc_column) & (1<<7)>>7);	

	//CP2:0,1,4,5
	ecc[2]= ((ecc_column) & (1<<0)>>0) ^
			((ecc_column) & (1<<1)>>1) ^
			((ecc_column) & (1<<4)>>4) ^
			((ecc_column) & (1<<5)>>5);

	//CP3:2,3,6,7
	ecc[3] =((ecc_column) & (1<<2)>>2) ^
			((ecc_column) & (1<<3)>>3) ^
			((ecc_column) & (1<<6)>>6) ^
			((ecc_column) & (1<<7)>>7);	

	//CP4:0,1,2,3
	ecc[4]= ((ecc_column) & (1<<0)>>0) ^
			((ecc_column) & (1<<1)>>1) ^
			((ecc_column) & (1<<2)>>2) ^
			((ecc_column) & (1<<3)>>3);

	//CP5:4,5,6,7
	ecc[5] =((ecc_column) & (1<<4)>>4) ^
			((ecc_column) & (1<<5)>>5) ^
			((ecc_column) & (1<<6)>>6) ^
			((ecc_column) & (1<<7)>>7);
}
时间: 2024-09-20 20:37:28

nand flash ECC实战的相关文章

ECC校验原理以及在Nand Flash中的应用

     本篇文章主要介绍ECC基本原理以及在Nand Flash中的应用,本文记录自己对ECC校验原理的理解和学习. ECC介绍      ECC,全称为Error Correcting Code,错误纠正码,这是一种编码方式,用于在于可以在一定程度上自行发现和纠正传输过程中发生的错误.      香农在1948年发表的<通信的数学理论>中的信道编码定理指出:主要采取适当的纠错码,就可以在多类信道上传输消息,其误码率可以任意小.经过历代人们的持续努力,找出了许多好的信道编码方法,满足许多实用

Nand Flash 控制器中的硬件 ECC 介绍

ECC 产生方法 ECC 是用于对存储器之间传送数据正确进行校验的一种算法,分硬件 ECC 和软件 ECC 算法两种,在 S3C2410 的 Nand Flash 控制器中实现了由硬件电路(ECC 生成器)实现的硬件 ECC. ECC 生成器工作过程 当写入数据到 Nand flash 存储空间时, ECC 生成器会在写入数据完毕后自动生成 ECC 码,将其放入到 ECC0-ECC2.当读出数据时 Nand Flash 同样会在读数据完毕后,自动生成 ECC 码将其放到 ECC0-ECC2 当

Nand Flash原理(二)

K9F2G08U0B的存储阵列 图 2-1 K9F2G08U0B的存储阵列 由图2-1,我们可以知道:K9F2G08U0B的一页为(2K+64)字节(2K 表示的是 main 区容量,64表示的是 spare 区容量),它的一块为 64 页,而整个设备包括了2048个块.这样算下来一共有 2112M 位容量,如果只算 main 区容量则有256M 字节(即 256M×8 位). 要实现用 8 个 IO 口来要访问这么大的容量,如图 2-1 所示:K9F2G08U0A 规定了用 5 个周期来实现.

LCD实验学习笔记(七):NAND FLASH

s3c2440 CPU内置NAND FLASH控制器.相关寄存大器起始地址为0x4e000000. 通过设置NFCONF寄存器,设置NAND FLASH 时序. 通过设置NFCONT寄存器,使能NAND FLASH.初始化ECC等. 代码: #define GSTATUS1 (*(volatile unsigned int *)0x560000B0) //读此寄存器可以知道CPU芯片型号#define BUSY 1 #define NAND_SECTOR_SIZE_LP 2048 //大页每页2

怎么看时序图--nand flash的读操作详解(转载)

出处:http://blog.chinaunix.net/uid-28852942-id-3992727.html这篇文章不是介绍 nand flash的物理结构和关于nand flash的一些基本知识的.你需要至少了解 你手上的 nand flash的物理结构和一些诸如读写命令 操作的大概印象,你至少也需要看过 s3c2440中关于nand flash控制寄存器的说明. 由于本人也没有专门学过这方面的知识,下面的介绍也是经验之谈. 这里 我用的 K9F2G08-SCB0 这款nand flas

nand Flash原理

6.1.3) Block 块 一个 Nand Flash (的 chip,芯片) 由很多个块(Block)组成,块的大小一般是 128KB, 256KB, 512KB,此处是 128KB.其他的小于 128KB 的,比如 64KB,一般都是下面将要介绍到的small block的Nand Flash. 块 Block,是Nand Flash的擦除操作的基本/最小单位. 6.1.4) Page 页 每个块里面又包含了很多页(page) .每个页的大小,对于现在常见的Nand Flash多数是2KB

nand flash 和nor flash 区别

NOR和NAND是现在市场上两种主要的非易失闪存技术.Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面.紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级.但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存. 相"flash存储器"经常可以与相"NOR存储器"互换使用.许多业内人士也搞不清楚NAND闪存技术

镁光256Gb NAND Flash芯片介绍

总体概述 该芯片是一款典型的大容量NAND Flash存储颗粒,支持Open NAND Flash Interface (ONFI) 2.1的接口标准,采用ONFI NANDFlash的操作协议.该芯片采用Multiple-level Cell (MLC)技术,根据不同的容量,一个芯片内部封装了多个DIE(LUN),每个DIE由两个Plane构成,一个Plane可以分成2048个Block,每个Block由256页组成,一个页的大小为8KB+448B的组织结构方式. 在性能方面,一个Page页的

u-boot-2014.10移植第19天----添加nand flash命令支持(一)

今天继续移植nand flash,对于很多情况而言,u-boot从nand flash启动是一个至关重要的功能,毕竟NOR flash成本太高,不是所有开发板都会添加NOR flash. u-boot中的SMDK2410模板是没有支持从nand flash启动的功能的,但是却有支持操作nand_flash的操作命令,2410和2440在nand flash支持上的区别有: 1.2410仅支持小块nandflash,2440则同时支持大块nandflash:2.为支持大块nandflash,244