Nand分区及nand erase简解

我的nand flash 32M,kernel 2.6.18, rootfs is emb linux, cramfs.

nand flash分区如下:
static struct mtd_partition nand_partitions[] = {
        /* bootloader (UBL, U-Boot, BBT) in sectors: 0 - 14 */
        {
                .name = "bootloader",
                .offset = 0,
                .size = 32 * NAND_BLOCK_SIZE,  //32x16 = 512k
                .mask_flags = MTD_WRITEABLE,        /* force read-only */
        },
        /* bootloader params in the next sector 15 */
        {
                .name = "params",
                .offset = MTDPART_OFS_APPEND,
                .size = 96 * NAND_BLOCK_SIZE, //96x16 = 1536k = 1.5M
                .mask_flags = MTD_WRITEABLE,        /* force read-only */
        },
        /* kernel in sectors: 16 */
        {
                .name = "kernel",
                .offset = MTDPART_OFS_APPEND,
                .size = SZ_2M, //2M
                .mask_flags = 0
        },
        /* rootfs */
        {
                .name = "filesystem1",
                .offset = MTDPART_OFS_APPEND,
                .size = SZ_16M + SZ_8M, //24M
                .mask_flags = 0
        },
        /*parameter*/
        {
                .name = "filesystem2",
                .offset = MTDPART_OFS_APPEND,
                .size = MTDPART_SIZ_FULL, //4M, /mnt/nand, save log,sysenv,
                .mask_flags = 0
        }
};

//系统启动后
# cat /proc/partitions                                                         
major minor  #blocks  name                                                      
                                                                                
  31     0        512 mtdblock0                                                
  31     1       1536 mtdblock1                                                
  31     2       2048 mtdblock2                                                
  31     3      24576 mtdblock3                                                
  31     4       4096 mtdblock4                                                
254     0        512 sbulla                                                   
#
# cat /proc/mtd                                                                 
dev:    size   erasesize  name                                                  
mtd0: 00080000 00004000 "bootloader"                                            
mtd1: 00180000 00004000 "params"                                                
mtd2: 00200000 00004000 "kernel"                                                
mtd3: 01800000 00004000 "filesystem1"                                          
mtd4: 00400000 00004000 "filesystem2"                                          
#

loadb 20000000                  //(1)
nand erase 0x100000   0x200000           //(2)
nand write 0x20000000 0x100000 0x200000 -//(3)
nand read  0x20000000 0x100000 0x200000 -//(4)

tftp 0x80200000(内存地址) uImage
过程  从服务器 到内存 从内存在到Nand flash
为什么呢 因为 nandflash 的擦出 读写不独立 万一一边擦好了 可网络断了 那就麻烦了 呵呵 通过内存中转 好主意阿 速度起码快把 呵呵

(1) 从串口下载到SDRAM的0x20000000处
(2) 从1M处开始擦写Nand Flash,擦写2M大小的空间
(3) 将SDRAM中的0x20000000处开始的内容,烧写到Nand Flash的0x100000处开始的2M空间内
(4) 将Nand Flash的0x100000处开始的2M空间内容,拷贝到SDRAM中0x20000000处开始的地方
Nand flash芯片工作原理
------------------------------------
    Nand flash芯片型号为Samsung K9F1208U0B,数据存储容量为64MB,采用块页式存储管理。8个I/O
引脚充当数据、地址、命令的复用端口。

    芯片内部存储布局及存储操作特点:
    一片Nand flash为一个设备(device), 其数据存储分层为:
    1 (Device) = 4096 (Blocks)
    1 (Block) -= 32   (Pages/Rows) 页与行是相同的意思,叫法不一样
    1 (Page)   = 528 (Bytes) = 数据块大小(512Bytes) + OOB 块大小(16Bytes)
     在每一页中,最后16个字节(又称OOB)用于Nand Flash命令执行完后设置状态用,剩余512个字节又
分为前半部分和后半部分。可以通过Nand Flash命令00h/01h/50h分别对前半部、后半部、OOB进行定位通过
Nand Flash内置的指针指向各自的首地址。

    存储操作特点:
    1. 擦除操作的最小单位是块。
    2. Nand Flash芯片每一位(bit)只能从1变为0,而不能从0变为1,所以在对其进行写入操作之前要一定将相应块擦除(擦除即是将相应块得位全部变为1).
    3. OOB部分的第六字节(即517字节)标志是否是坏块,如果不是坏块该值为FF,否则为坏块。
    4. 除OOB第六字节外,通常至少把OOB的前3个字节存放Nand Flash硬件ECC码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

eclipse启动了tomcat,但是浏览器打不开欢迎页

tomcat在eclipse中启动成功,主页却打不开 症状: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误。同时其他项目页面也不能访问。 关闭eclipse里面的tomcat,在tomcat安装目…

洛谷1011 车站

水题。题目描述有坑&#xff0c;可以先根据样例手算试一试//Serene #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #include<cmath> using namespace std; const int maxn50; int f[50],…

三极管放大电路三种类型

根据三极管三个电极与输入输出端子的连接方式&#xff0c;可归纳为三种&#xff1a;共发射极电路、共基极电路和共集电极电路&#xff1b; 三种电路的共同点&#xff1a;各有两个回路&#xff0c;一个输入回路一个输出回路&#xff0c;两个回路有一个公共 端&#xff0c;而公…

ImportError: No module named 'chardet'

1.使用requsets出现这个错误&#xff0c;ImportError: No module named chardet 原因&#xff1a;requests依赖其他一些模块 解决&#xff1a;依次使用pip安装即可 pip install certifi pip install chardet pip install idna pip install urllib3转载于:https://www.cnblogs.c…

各种组件的js 获取值 / js动态赋值

jQuery获取Select选择的Text和Value:语法解释&#xff1a;1. $("#select_id").change(function(){//code...}); //为Select添加事件&#xff0c;当选择其中一项时触发2. var checkText$("#select_id").find("option:selected").text(); //获取…

Linux下/proc目录简介

1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统&#xff0c;在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统&#xff0c;它只存在内存当中&#xff0c;而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。 用户…

Mysql带返回值与不带返回值的2种存储过程

过程1&#xff1a;带返回值&#xff1a; 1 drop procedure if exists proc_addNum; 2 create procedure proc_addNum (in x int,in y int,out sum int) 3 BEGIN 4 SET sum x y; 5 end 然后&#xff0c;执行过程&#xff0c;out输出返回值&#xff1a; 1 call proc_addNum(2,3,…

MOS管的米勒效应简介

一、米勒平台介绍 Mos管的三极都会存在以下 的三个电容,分别是:Cgs,Cgd,Cds。 米勒电容指的是Cgd。米勒效应在MOS驱动中臭名昭著,他是由MOS管的米勒电容引发的米勒效应,在MOS管开通过程 中,GS电压上升到某一电压值后GS电压有一段稳定值(图中t2~t3阶段),过后Vgs电压…

PopupWindow 使用详解(二) Popwindow 制作常见花哨效果

帝都几日降温&#xff0c;终于被撂倒了。but 只要一息尚存就得不断进步&#xff01;于是&#xff0c;写出 《PopupWindow 使用详解》的第二篇 笔记&#xff0c;先奉上 第一篇链接: 《PopupWindow 使用详解&#xff08;一&#xff09; 中文API 文档 赠送 ListPopupWindow 中文 A…

hbase replication原理分析

本文只是从总体流程来分析replication过程&#xff0c;很多细节没有提及&#xff0c;下一篇文章准备多分析分析细节。replicationSource启动过程org.apache.hadoop.hbase.regionserver.HRegionServer#startServiceThreads ->org.apache.hadoop.hbase.replication.regionserv…

8168

http://blog.csdn.net/crushonme/article/details/10287693 http://blog.csdn.net/yangxueble/article/details/10138763

Mysql查询结果只有一条的情况下把值赋值给变量,再用if else 流程判断

1 BEGIN 2 set n(SELECT count(day) from log where dayCURDATE()); 3 IF n0 THEN 4 call m_LogInsert(); 5 ELSE 6 call m_LoginCheck(); 7 end if; 8 end 转载于:https://www.cnblogs.com/mengms/p/7629486.html

近距离无线通信技术对比

定义&#xff1a;无线通信是利用电磁波信号在自由空间中传播的特性进行信息交换的一种通信方式。 优点&#xff1a;成本低、无物理线路&#xff0c;不受工业环境限制&#xff0c;环境适应能力强&#xff1b; 故障诊断简单&#xff0c;可远程诊断&#xff0c;扩展性强&#xff…

看不清的融资迷局 二线玩家字节跳动在打什么主意?

互联网似乎对离经叛道者总是多一分关注&#xff0c;吃瓜心态随着时间的推进越来越浓烈。 其中&#xff0c;今日头条成了“看热闹”时代最佳的“演员”之一&#xff0c;供看客消遣&#xff1a;其母公司字节跳动一个融资传闻从8月炒到了10月&#xff0c;即便是媒体通过信源确认这…

第3章-动态基础分析实验

Lab 3-1 Question: 1.先对文件使用PEID进行查壳,显示文件被加壳处理过 2.使用Dependency Walker查看文件导入函数&#xff0c;文件只有一个DLL而且只有一个导入函数Exitprocess 3.使用Strings程序查看字符串&#xff0c;发现可疑字符串。 4.动态分析前期准备 4.1 对系统进行初始…

如何优化增强第三方库?

开发中&#xff0c;我们不可避免要使用&#xff0c;别人花很多时间打磨好的轮子&#xff0c;轮子好用&#xff0c;但有时却无法完全满足我们的要去&#xff0c;这时我们不可避免的要去修改增强一下这个库&#xff0c;如何增强&#xff1f; 我认为&#xff0c;一般有两种修改的方…

C语言变长数组data[0]【总结】

C语言变长数组data[0]【总结】 1、前言 今天在看代码中遇到一个结构中包含char data[0]&#xff0c;第一次见到时感觉很奇怪&#xff0c;数组的长度怎么可以为零呢&#xff1f;于是上网搜索一下这样的用法的目的&#xff0c;发现在linux内核中&#xff0c;结构体中经常用到data…

Excel 转为 MySQL 语句

一、方法 一、假设你的表格有A、B、C三列数据&#xff0c;希望导入到你的数据库中表格table&#xff0c;对应的字段分别是col1、col2、col3 二、在你的表格中增加一列&#xff0c;利用excel的公式自动生成sql语句&#xff0c;具体方法如下&#xff1a; 1、增加一列&#xff08;…

CentOS7下安装zookeeper3.4.9

获取zookeeper官方安装包 1 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz 解压该文件包 1 tar zxf zookeeper-3.4.9.tar.gz 进入conf文件夹并创建新配置文件 1 cd zookeeper-3.4.9/conf 2 vi zoo.cfg 在config文件中加…