void NAND_Init()

{

   *(unsigned int *)(0x20030000 + 0xd0) = 7; delay_x(0X5000);

   *(unsigned int *)(0x20030000 + 0xd0) = 6; delay_x(0X5000);

   *(unsigned int *)(0x200f0000 + 0x1fc) = 0;//muxctrl_reg127 NF_DQ0 管脚复用控制寄存器

   *(unsigned int *)(0x200f0000 + 0x200) = 0;

   *(unsigned int *)(0x200f0000 + 0x204) = 0;

   *(unsigned int *)(0x200f0000 + 0x208) = 0;

   *(unsigned int *)(0x200f0000 + 0x20C) = 0;

   *(unsigned int *)(0x200f0000 + 0x210) = 0;

   *(unsigned int *)(0x200f0000 + 0x214) = 0;

   *(unsigned int *)(0x200f0000 + 0x218) = 0;//7

   *(unsigned int *)(0x200f0000 + 0x21C) = 0;

   *(unsigned int *)(0x200f0000 + 0x220) = 0;

//p626

   *(unsigned int *)(NANDC_ADDR +0X00) = 0x85;//NFC_CON

   *(unsigned int *)(NANDC_ADDR +0X04) = 0x666;//NFC_PWIDTH 为读写脉冲宽度配置寄存器。

   *(unsigned int *)(NANDC_ADDR +0X24) = 0x0;//NFC_INTEN 为中断使能寄存器

   delay_x(0X500);

}

void NAND_Read_Page()

{

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x0;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x00003000;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X18) = 0x800;

     delay_x(0X500);

   

                                     //地址周期 cmd1_en addr_wen data_wen  cmd2_en ready/busy data_ren  read_stus_en

    *(unsigned int *)(NANDC_ADDR +0X1c) = 5<<9 | 1<<6 | 1<<5    | 0<<4     | 1<<3  |1<<2      | 1<<1     | 0;//0xa6e;//NFC_OP 为操作寄存器。

     delay_x(0X500);

    

     retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

     delay_x(0X5000);

}

void NAND_Read_Random()

{

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x0;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x0000e005;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X18) = 0x20;

     delay_x(0X500);

   

   

    //*(unsigned int *)(NANDC_ADDR +0X1c) = 0x46e;//NFC_OP 为操作寄存器。

                                     //地址周期 cmd1_en addr_wen data_wen  cmd2_en ready/busy data_ren  read_stus_en

    *(unsigned int *)(NANDC_ADDR +0X1c) = 2<<9 | 1<<6 | 1<<5    | 0<<4     | 1<<3  |1<<2      | 1<<1     | 0;////NFC_OP 为操作寄存器。

     delay_x(0X500);  

     retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

     delay_x(0X5000);

}

void NAND_Write_Page()

{

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x0;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x00001080;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X18) = 8;

     delay_x(0X500);

    *(unsigned int *)(0x50000000) = 0x11223344;

     delay_x(0X500);

    *(unsigned int *)(0x50000004) = 0x55667788;

     delay_x(0X500);

   

   

 //   *(unsigned int *)(NANDC_ADDR +0X1c) = 0xa7d;//NFC_OP 为操作寄存器。

                                     //地址周期 cmd1_en addr_wen data_wen  cmd2_en ready/busy data_ren  read_stus_en

    *(unsigned int *)(NANDC_ADDR +0X1c) = 5<<9 | 1<<6 | 1<<5    | 1<<4     | 1<<3  |1<<2      | 0<<1     | 0;//NFC_OP 为操作寄存器。

     delay_x(0X500);

     retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

     delay_x(0X5000);

}

void NAND_ReadID()

{

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x20;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x00000090;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X18) = 5;

     delay_x(0X500);

   

   

    *(unsigned int *)(NANDC_ADDR +0X1c) = 0x266;//NFC_OP 为操作寄存器。

     delay_x(0X500);

     retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

     delay_x(0X5000);

}

void NAND_Erase_Block()

{

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x0;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x0070d060;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

      

    //*(unsigned int *)(NANDC_ADDR +0X1c) = 0x66c;//NFC_OP 为操作寄存器。

                                     //地址周期 cmd1_en addr_wen data_wen  cmd2_en ready/busy data_ren  read_stus_en

    *(unsigned int *)(NANDC_ADDR +0X1c) = 3<<9 | 1<<6 | 1<<5    | 0<<4     | 1<<3  |1<<2      | 0<<1     | 0;//0xa6e;//NFC_OP 为操作寄存器。

     delay_x(0X500);

    retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

    delay_x(0X5000);

}

int  NAND_test(unsigned int data)

{

     int i=0;

     UART_Init();

     NAND_Erase_Block();

     //写数据

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x0;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x00001080;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X18) = 0x800;

     delay_x(0X500);

     for(i=0;i<(0x800/4);i++)

     {

        *(unsigned int *)(0x50000000 + i*4) = data;

        delay_x(0X500);

     }

//   *(unsigned int *)(NANDC_ADDR +0X1c) = 0xa7d;//NFC_OP 为操作寄存器。

                                     //地址周期 cmd1_en addr_wen data_wen  cmd2_en ready/busy data_ren  read_stus_en

    *(unsigned int *)(NANDC_ADDR +0X1c) = 5<<9 | 1<<6 | 1<<5    | 1<<4     | 1<<3  |1<<2      | 0<<1     | 0;//NFC_OP 为操作寄存器。

     delay_x(0X500);

     retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

     //读数据

     NAND_Read_Page();

     //随即读

    *(unsigned int *)(NANDC_ADDR +0X10) = 0x0;//NFC_ADDRL 为低位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X14) = 0x0;//NFC_ADDRH 为高位地址配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X0c) = 0x0000e005;//NFC_CMD 为命令字配置寄存器。

     delay_x(0X500);

    *(unsigned int *)(NANDC_ADDR +0X18) = 0x800;

     delay_x(0X500);

   

   

    //*(unsigned int *)(NANDC_ADDR +0X1c) = 0x46e;//NFC_OP 为操作寄存器。

                                     //地址周期 cmd1_en addr_wen data_wen  cmd2_en ready/busy data_ren  read_stus_en

    *(unsigned int *)(NANDC_ADDR +0X1c) = 2<<9 | 1<<6 | 1<<5    | 0<<4     | 1<<3  |1<<2      | 1<<1     | 0;////NFC_OP 为操作寄存器。

     delay_x(0X500);  

     retu = *(unsigned int *)(NANDC_ADDR +0X20) ;//NFC_STATUS 为状态寄存器。

     //判断数据是否正确。

     for(i=0;i<(0x800/4);i++)

     {

        retu = *(unsigned int *)(0x50000000 + i*4);

        if(retu != data)

           return 1;

        delay_x(0X500);

     }

    

     return 0;

}

retu2[0] = NAND_test(0x00000000);

 retu2[1] = NAND_test(0xffffffff);

 retu2[2] = NAND_test(0x5a5a5a5a);

 retu2[3] = NAND_test(0xa5a5a5a5);

 retu2[4] = NAND_test(0x12345678);

 retu = retu2[0]+retu2[2]+retu2[1]+retu2[3]+retu2[4];

HI3531的nand flash测试的更多相关文章

  1. Hi3531添加16GByte(128Gbit) NAND Flash支持

    0.板子上已有Nor Flash了,添加的Nand Flash型号为MT29F128G08CJABAWP,进系统挂接NAND作为一个分区 1.修改uboot u-boot-2010.06/driver ...

  2. 硬件初始化,nand flash固化操作,系统启动简单流程

    2015.3.27星期五 晴 链接脚本定义代码的排放顺序 硬件系统初始化:一:arm核初始化:(里面有指令)初始化ARM核的时候需要看arm核的手册指令:1.异常向量(最起码有个复位异常,初始化模式- ...

  3. NAND FLASH均衡算法笔记(转)

    转来一篇关于NAND FLASH均衡算法的文章,加上一点思考和笔记,认为这种思考有助于更深刻的理解,更好的记忆,所以也算半原创了吧,最起码笔记是原创的.有意思的是,帖子提起这个算法并不是因为嵌入式开发 ...

  4. NAND Flash【转】

    转自:http://www.cnblogs.com/lifan3a/articles/4958224.html 以Micron公司的MT29F2G08为例介绍NAND Flash原理和使用. 1. 概 ...

  5. Nand flash uboot 命令详解【转】

    转自:http://blog.chinaunix.net/uid-14833587-id-76513.html nand info & nand device 显示flash的信息: DM36 ...

  6. STM32学习笔记——FSMC 驱动大容量NAND FLASH [复制链接]

    本文原创于观海听涛,原作者版权所有,转载请注明出处. 近几天开发项目需要用到STM32驱动NAND FLASH,但由于开发板例程以及固件库是用于小页(512B),我要用到的FLASH为1G bit的大 ...

  7. Samsung K9F1G08U0D SLC NAND FLASH简介(待整理)

    Samsung  K9F1G08U0D,数据存储容量为128M,采用块页式存储管理.8个I/O引脚充当数据.地址.命令的复用端口.详细:http://www.linux-mtd.infradead.o ...

  8. Nand flash 的发展和eMMC

    讨论到eMMC的发展历程,必须要从介绍Flash的历史开始 Flash分为两种规格:NOR Flash和NAND Flash,两者均为非易失性闪存模块. 1988年,Intel首次发出NOR flas ...

  9. 编程器NAND Flash 技术入门

    NAND Flash分类 SLC(Single-Level Cell)架构:单一储存单元(Cell)可储存1bit data MLC(Multi-Level Cell)架构:单一储存单元(Cell)可 ...

随机推荐

  1. React-Native 系列视频失效补链及一些碎碎念

    最近很多朋友联系我要视频链接,说失效了,这边补一下链接,时间问题就不一篇一篇修改了: 链接:https://pan.baidu.com/s/1mj5Cak4 密码:wiq2 注:视频还是建议参考,因为 ...

  2. 【Spring】HttpMessageConverter的作用及替换

    相信使用过Spring的开发人员都用过@RequestBody.@ResponseBody注解,可以直接将输入解析成Json.将输出解析成Json,但HTTP 请求和响应是基于文本的,意味着浏览器和服 ...

  3. linux修改TCP最大连接数

    环境 操作系统: oracle-linux7.3 修改系统支持的最大TCP连接 最大tcp连接数和系统允许打开的最大文件数,用户允许打开的最大文件数,TCP网络连接可用的端口范围有关,取上述的最小值: ...

  4. Cypher查询语言--Neo4j 入门 (一)

    目录 操作符 参数 标识符 注解 Start 通过id绑定点 通过id绑定关系 通过id绑定多个节点 所有节点 通过索引查询获取节点 通过索引查询获取关系 多个开始点  Cypher是一个描述性的图形 ...

  5. 关闭apache启用的TRACE Method

    TRACE和TRACK是用来调试web服务器连接的HTTP方式.支持该方式的服务器存在跨站脚本漏洞,通常在描述各种浏览器缺陷的时候,把"Cross-Site-Tracing"简称为 ...

  6. CentOS下mysql数据库data目录迁移和配置优化

    目录迁移 关闭数据库服务 service mysqld stop 复制数据库 mv /var/lib/mysql /data/mysql # 或者使用cp -a复制 # 这两个命令都会带权限到新目录去 ...

  7. Codeforces Round #402 (Div. 2)

    Codeforces Round #402 (Div. 2) A. 日常沙比提 #include<iostream> #include<cstdio> #include< ...

  8. 在CentOS 6.x上配合Windows客户端搭建 git(gitosis)服务器

    一.在 CentOS 上安装 git 和 gitosis: 逐条执行如下语句: sudo yum install git python-setuptools cd /opt sudo git clon ...

  9. Redis进阶实践之十一 Redis的Cluster集群搭建

    一.引言      本文档只对Redis的Cluster集群做简单的介绍,并没有对分布式系统的详细概念做深入的探讨.本文只是提供了有关如何设置集群.测试和操作集群的说明,而不涉及Redis集群规范中涵 ...

  10. javascript 利用FileReader和滤镜上传图片预览

    FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File或 Blob对象指定要读取的文件或数据. 1.FileReader接口的方法 Fi ...