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. CentOS下内存使用率查看

    freetotal        used        free      shared     buffers      cachedMem:        1815340     1628680 ...

  2. JDBC为什么要使用PreparedStatement而不是Statement

    PreparedStatement是什么? PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatemen ...

  3. BZOJ 3160: 万径人踪灭 [fft manacher]

    3160: 万径人踪灭 题意:求一个序列有多少不连续的回文子序列 一开始zz了直接用\(2^{r_i}-1\) 总-回文子串 后者用manacher处理 前者,考虑回文有两种对称形式(以元素/缝隙作为 ...

  4. jira + confluence 安装和破解

    Window环境: 环境准备 安装JAVA1.8以上版本 安装SQL SERVER 或 MySQL: jira安装和破解 下载安装包 https://downloads.atlassian.com/s ...

  5. Docker镜像管理

    镜像是docker的三大核心概念之一.可以用来创建容器. Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS.镜像可以基于Dockerfile构建,Dockerf ...

  6. linux使用i/o内存访问外设

    一.linux中访问外设的方法. 1.IO端口(IO port) linux系统给外设分配不同的端口号,linux利用端口号来访问设备(驱动) (cpu x86) cpu访问外设通过端号,访问通过地址 ...

  7. ubuntu 开发板ping通虚拟机挂载nfs服务器

    先.nfs服务配置1.设置开发板ip ,同一网段2.开发板上操作:ifconfig eth0 192.168.1.203.测试是否能够ping通:ping 192.168.1.194.测试开发板ip是 ...

  8. yii2 源码分析 model类分析 (五)

    模型类是数据模型的基类.此类继承了组件类,实现了3个接口 先介绍一下模型类前面的大量注释说了什么: * 模型类是数据模型的基类.此类继承了组件类,实现了3个接口 * 实现了IteratorAggreg ...

  9. Discuz的安装与使用

    Discuz的安装与使用 一.Discuz的安装 由于本机已经安装好XAMPP集成工具,后续Discuz访问数据库以及服务器等都是基于XAMPP环境.在主机localhost根目录下新建bbs文件夹. ...

  10. crontab定时任务一定要记得做好备份

    今天咋服务器上敲了一个 crontab 命令(没加-e ,也没加-l, 更没加 -r) 但是竟然神奇的crontab全部被清除了. 心中一万只CN