很长一段时间,nand flash都是嵌入式的标配产品。nand flash价格便宜,存储量大,适用于很多的场景。现在很普及的ssd,上面的存储模块其实也是由一块一块nand flash构成的。...对于linux嵌入式来说,开始uboot的加载是硬件完成的,中期的kernel加载是由uboot中的nand flash驱动完成的,而后期的rootfs加载,这就要靠kernel自己来完成了。...tests/ 2、nand在mtd下面,是作为一个单独目录保存的,这时应该查看nand下的Kconfig config MTD_NAND_S3C2410 tristate "NAND Flash...config MTD_NAND_S3C2410_DEBUG bool "Samsung S3C NAND driver debug" depends on MTD_NAND_S3C2410...module_platform_driver(s3c24xx_nand_driver); 5、继续分析s3c24xx_nand_probe函数 s3c2410_nand_init_chip(info,
(和linux的nand驱动有很多相似的地方): 1)uboot重定位后进入第二阶段board_init_r(): void board_init_r(gd_t *id, ulong dest_addr...return; nand_register(i); //注册nand,使uboot支持对nand的读写操作 } 这个nand_chip结构体和我们之前学的linux下的nand驱动章节里的...= s3c2440_nand_calculate_ecc; nand->ecc.correct = s3c2440_nand_correct_data; nand->ecc.mode = NAND_ECC_HW...; nand->ecc.size = CONFIG_SYS_NAND_ECCSIZE; nand->ecc.bytes = CONFIG_SYS_NAND_ECCBYTES; #else nand->ecc.mode...= NAND_ECC_SOFT; #endif 改为: nand->ecc.mode = NAND_ECC_SOFT; //使用软件ECC 2.6 修改s3c2440_hwcontrol
nand_ecclayout *ecclayout; /* ECC布局 */ /* ECC校验结构体,若不设置, ecc.mode默认为NAND_ECC_NONE(无ECC校验) */ /...*可以为硬件ECC和软件ECC校验,比如:设置ecc.mode=NAND_ECC_SOFT(软件ECC校验)*/ struct nand_ecc_ctrl ecc; struct...)释放nand_chip 驱动代码如下: #include #include #include #include... #include #include #include <linux/mtd/partitions.h...= NAND_ECC_SOFT; //设置软件ECC /*5.设置硬件相关*/ /*5.1使能nand flash 时钟*/
本节来学习裸机下的Nand Flash驱动,本节学完后,再来学习Linux下如何使用Nand Flash驱动 Linux中的Nand Flash驱动,链接如下: (分析MTD层以及制作Nand Flash... 1个设备=2048块Block 1块Block=64页Pages 1页=(2K+64)B (因为每个地址里都存放了一个字节,所以用B表示) 其中64B是存放ECC...的OOB地址,(ECC:存放判断位反转的校验码) ?...Nand Flash 缺点: 读数据容易位反转 可以通过ECC编码器值来判断读数据是否位反转,若位反转则重新读数据 过程: 写:写页数据,生成ECC,ECC写入到OBB页地址里 读:读出页数据,然后判断...OOB页地址里的ECC来比较是否出现位反转,是否重新读数据 读OOB方法: 读整个Nand Flash时,是读不出页里面的OBB地址,比如读2049这个地址数据时,是读的第二页上的第2个地址: ?
可靠性: 由于其纠正能力,ECC内存在服务器环境中非常可靠,可以减少因内存故障而导致的服务器停机时间。 成本: 由于其高级功能,ECC内存通常比非ECC内存更昂贵。...2.1 特点 性能: 由于不需要额外的校验计算,非ECC内存通常比ECC内存具有稍微更高的性能。 成本: 非ECC内存相对便宜,适用于预算有限的服务器。...2.3 缺点 与 ECC 内存相比,非 ECC 内存没有错误检测和修复的功能。这意味着如果数据发生错误,非 ECC 内存无法修复错误,也无法通知系统发生了错误。...然而,非 ECC 内存在某些方面是有优势的。 2.4 优点 首先,非 ECC 内存比 ECC 内存更便宜。因为 ECC 内存需要额外的硬件来生成和处理校验码,所以它们通常比非 ECC 内存更贵。...并非所有的服务器主板都支持 ECC 内存,所以在购买 ECC 内存之前,一定要检查你的硬件是否支持。 四、总结 ECC 内存和非 ECC 内存都有各自的优点和缺点。
本节来学习裸机下的Nand Flash驱动,本节学完后,再来学习Linux下如何使用Nand Flash驱动 Linux中的Nand Flash驱动,链接如下: (分析MTD层以及制作Nand Flash... 1个设备=2048块Block 1块Block=64页Pages 1页=(2K+64)B (因为每个地址里都存放了一个字节,所以用B表示) 其中64B是存放ECC...的OOB地址,(ECC:存放判断位反转的校验码) Nand Flash 缺点: 读数据容易位反转 可以通过ECC编码器值来判断读数据是否位反转,若位反转则重新读数据 写过程: 1)写页数据 2)然后生成...ECC 3)将ECC写入到OBB页地址里(写数据是不会出现位反转) 读过程: 1)读出页数据,然后生成临时ECC(此时ECC可能有错) 2)然后读出OOB页地址里的ECC 3)比较两个ECC,判断是否出现位反转...NFCONT *((unsigend int *)0X4E000000); //控制寄存器(用来使能nandflash控制器以及ECC编码器,还有控制芯片使能CE脚) #define
文章目录 Linux SPI-NAND 驱动开发指南 1 概述 1.1 编写目的 1.2 适用范围 1.3 相关人员 3 流程设计 3.1 体系结构 3.2 源码结构 3.3 关键数据定义 3.3.1...1.3 相关人员 Nand 模块开发人员,及应用开发人员等 2 术语、缩略语及概念 MTD:(Memory Technology device)是用于访问存储设备的 linux 子系统。...nand 本身的物理性质导致在出厂和正常使用过程中都会产生坏块 3 流程设计 3.1 体系结构 NAND MTD/UBI 驱动主要包括 5 大组件,如下图: 图 3-1: UBI 架构 说明:...BIT(0) #define HAS_EXT_ECC_STATUS BIT(1) enum ecc_status_shift ecc_status_shift; int EccFlag...byte 获取 ecc status,则配置 EccFlag = HAS_EXT_ECC_STATUS • EccType:设置 ecc 值对应的状态关系 • EccProtectedType:在 spare
什么是ECC内存 对于大多数企业来说,消除数据损坏是一项关键任务——这正是 ECC(纠错码)内存的目的。...ECC 内存的工作原理 ECC 内存包含附加内存位和内存控制器,这些控制器用于控制模块上附加芯片中的附加位。...优势和劣势 在金融等行业以及科学界,ECC 内存对于维持数据完整性至关重要。 大多数服务器内存也是 ECC 内存。 ECC 内存进一步减少了数据崩溃情况,这对于多用户服务器应用程序非常重要。...与非 ECC 内存相比,ECC 内存通常更昂贵,速度可能稍慢。 其他系统组件(例如,CPU 和主板)也必须支持 ECC 内存。...如何看内存是否启用ECC 使用AIDA64 或Everest软件在内存,找到错误纠正,可以看到 ECC 是否启用或禁用。
(支持每512字节需要ECC位数小于或等于4位的NAND Flash)....在网络网络摄像机的应用中为了节约成本,有一些用户使用了NAND Flash启动方式.图1就是从上电到Linux启动的一个概要的流程图.首先RBL(ROM boot loader)从NAND上读取UBL(...DDR里面运行的U-Boot又从NAND Flash里面读取Linux内核代码,并且复制到DDR上,然后启动内核.这样DM365的系统就从上电到完成Linux内核启动,然后就可以运行相应的应用程序了....图1 NAND Flash启动流程 下面我们会一步一步的介绍从上电到Linux启动是如何实现的....表1 NAND UBL描述符 一旦用户需要的启动设置配置好,RBL就会从0x0020第地址开始把UBL搬移到ARM内存.在从NAND读取UBL的过程中中,RBL会使用4位的硬件ECC对NAND Flash
函数来计算ECC码;否则使用drivers/mtd/nand/nand_ecc.c文件中的nand_calculate_ecc函数。...码 290 * 并把它们填入oob 291 */ 292 nand_calculate_ecc(data, &ecc_code[0]); 293 nand_calculate_ecc...ECC位置──它正是nand_oob_16结构的eccpos数组定义的位置。...其中第292、293行的nand_calculate_ecc函数是从内核源文件drivers/mtd/nand/nand_ecc.c修改而来:在/work/system/Development/yaffs2.../utils目录下新建一个同名文件nand_ecc.c,把内核文件nand_ecc.c的nand_calculate_ecc函数、函数中用到的nand_ecc_precalc_table数组摘出来;并去除函数中的第一个形参
status information */ struct mtd_ecc_stats ecc_stats; int subpage_sft; struct device dev; int usecount...> #include #include #include #include #include #include #include #include #include #include #include #include...s3c_nand->dev_ready = s3c2440_dev_ready; s3c_nand->ecc.mode = NAND_ECC_SOFT; /* 3.
引入ECC ECC:Error Checking and Correction,是一种差错检测和修正的算法。 NAND闪存在生产和使用中都会有坏块产生,BBM就是坏块的管理机制。...(2)ECC的保存:ECC的签名一般来说都保存在NAND页后部的SA区域。 (3)数据从NAND读取时:ECC模块回去读取ECC签名,并对照相同与否来发现出现的错误。...上图是个4KB页的NAND闪存(SA区64字节) (1)每当一个page写入NAND闪存,数据会通过ECC引擎,创造独特的ECC签名。...(2)数据和对应的ECC签名存都存放在NAND闪存里,数据放在数据区,ECC签名放在SA区。 (3)当需要读取数据时,数据和ECC签名一起被送往主控制器,此时新的ECC签名被生成。...ECC评价 ECC的能力也影响到NAND 闪存的寿命和数据保存期。
[target] storage_type = xxx 其中storage_type | 0:nand | 1:sd | 2:emmc | 3:spinor | 4:emmc3 | 5:spinand...storage_type = 5 board.dts/uboot-board.dts修改 &spi0 { - status = "disabled"; + status = "okay"; spi-nand...更具体的,nand分为并口nand和spinand,mmc分emmc和sd卡 主要需要区分的是nor和其他介质,因为需要打包的部分有所不同。...即,emmc和nand,sd卡一般可共用一份固件,而nor则需使用另一份固件 sys_config配置 在sys_config中有一个配置项,storage_type,取值及含义如下 ;--------...support Caching block device access to MTD devices SPI-NOR device support (对于linux4.9
因为Yaffs2的ECC校验与yaffs1一样,所以这里只对应具体函数做解释 1.void yaffs_ecc_calc(const unsigned char *data, unsigned char...*ecc)//为256B的数据进行校验生成3B的校验位 2.int yaffs_ecc_correct(unsigned char *data, unsigned char *read_ecc,const...unsigned char *test_ecc)//没有错误返回0,改正了的错误返回1,不能改能的错误返回-1 3.void yaffs_ecc_calc_other(const unsigned char...*data, unsigned n_bytes,struct yaffs_ecc_other *ecc_other)//计算该数据块的任意n_bytes位的ecc值 4.int yaffs_ecc_correct_other...(unsigned char *data, unsigned n_bytes,struct yaffs_ecc_other *read_ecc, const struct yaffs_ecc_other
fact that it deals withNAND */ nand_do_read_ops stats= mtd->ecc_stats;...if(mtd->ecc_stats.failed – stats.failed) return-EBADMSG; nand_read_page_hwecc...stat= chip->ecc.correct(mtd, p, &ecc_code[i], &ecc_calc[i]); if(stat cellinfo & NAND_CI_CELLTYPE_MSK)) { switch(chip->ecc.steps) { case 2: mtd->subpage_sft
- davinci_dm368_ipnc_defconfig_nand make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- davinci_dm368...= ARRAY_SIZE(davinci_nand_partitions), //.ecc_mode = NAND_ECC_HW,....ecc_mode = NAND_ECC_NONE, .options = NAND_USE_FLASH_BBT..., .ecc_bits = 4, }; IPNC 设置 Hi Marko, Thanks for your help....0x82000000 ipnc_dm368_ubifs nand erase 0x500000 0x400000 nand write 0x80700000 0x500000 0x400000 nand
pmon 支持俩种接口类型的 nand flash,一个是 nand 控制器接口,一个是 spi 接口。龙芯核心板上板载了一个 nand 控制器接口的 flash。...在 pmon 默认的 bsp 中,默认添加了代码 select nand,所以这里我们不必要在添加代码 select nand,而select 指定的是后面的参数 nand 被选中,选中了 nand 参数以后...ls2k_nand_init 函数定义的 sys/dev/nand/ls2k-nand.c 驱动文件,通过阅读代码我们可以找到对 mtd 结构初始化的驱动函数为 ls2k_nand_init_mtd,...通过访问 mtd 就可以访问 nand 控制器, 在 ls2k_nand_init_mtd 函数中,最关键的是对 ECC 的选择,在 pmon 中默认的 ECC 有 NAND_ECC_SOFT 和 NAND_ECC_SOFT_BCH...BCH 校验比 ECC 校验有更强的纠错能力,龙芯 BSP 里面默认使用的是 ECC 校验,代码如下: 如果我们需要使用 BCH 校验,需要在在 Targets/LS2K/conf/ls2k 中定义
1.ECC可以纠正一个256字节的页数据的单个位错误,因此,这样的两个ECC块上纠正512字节的NAND页。...在Nand中使用3个字节存放校验结果,多余的两个Bit位置1。存放次序如下表所示: ? 以K9F1208为例,每个Page页包含512字节的数据区和16字节的OOB区。...ECC纠错算法 当往NAND Flash的page中写入数据的时候,每256字节我们生成一个ECC校验和,称之为原ECC校验和,保存到PAGE的OOB(out-of-band)数据区中。...当从NAND Flash中读取数据的时候,每256字节我们生成一个ECC校验和,称之为新ECC校验和。...假设ecc_code_raw[3] 保存原始的ECC校验码,ecc_code_new[3] 保存新计算出的ECC校验码,其格式如下表所示: 对ecc_code_raw[3] 和 ecc_code_new
测试例子如下: DATA: GO_ALV_DISPLAY TYPE REF TO IF_SALV_GUI_TABLE_IDA. DATA: GT_VISIBLE...
SD NAND是一种创新的存储芯片,可直接贴片,又名贴片式TF卡、贴片式T卡、贴片式SD卡、贴片式内存卡、SD Flash、Nand Flash等。...ECC(错误校正码):内置ECC功能,自动检测和纠正数据传输中的错误,提高数据的可靠性。...3.SD NAND与其他存储产品的对比SD NANDSPI NANDRaw NAND接口SD/SPISPI并口ecc有有部分有坏块管理有————磨损平均有————垃圾回收有————掉电保护有————封装...LGA-8/LGA-16WSON8TSOP48/BGA63SD NAND比TF卡更适合嵌入式系统,体积小,焊接稳定,不易脱落,内置坏块管理和ECC算法,减少CPU负荷,而TF卡更适用于消费电子设备。...与eMMC类似,内部完成ECC校验、坏块管理、磨损平均、掉电保护、垃圾回收等,能极大的提升开发效率,加速产品上市时间。
领取专属 10元无门槛券
手把手带您无忧上云