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. Trusted Execution Technology (TXT) --- 度量(Measurement)篇

    版权声明:本文为博主原创文章,未经博主允许不得转载.http://www.cnblogs.com/tsec/p/8413537.html 0. 导读 TXT基本原理篇介绍了TXT安全度量的基本概念,包 ...

  2. Round trip 流程图

    更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢!

  3. web项目,ftl文件中的路径引入问题

    路径问题的引入方式:绝对路径.相对路径 区别如图: =================================================

  4. JDBC(二)

    三层架构的一些基本报结构如下: domain包:下面是一些实体bean,属性为private,提供属性相对应的set和get方法.一般对应于数据库中的一张数据表,属性对应于数据表中的列. dao包,数 ...

  5. C语言深度剖析-笔记

    关键字: C语言关键字32个: 关键字                                         意 义 auto                           声明自动变 ...

  6. iOS UIFont 字体名字大全

    Font Family: American TypewriterFont: AmericanTypewriterFont: AmericanTypewriter-Bold Font Family: A ...

  7. 【Unity3D技术文档翻译】第1.9篇 使用 Unity AssetBundle Browser tool (AssetBundle系列完结)

    上一章:[Unity3D技术文档翻译]第1.8篇 AssetBundles 问题及解决方法 本章原文所在章节:[Unity Manual]→[Working in Unity]→[Advanced D ...

  8. object类的equals方法简介 & String类重写equals方法

    object类中equals方法源码如下所示 public boolean equals(Object obj) { return this == obj; } Object中的equals方法是直接 ...

  9. [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少分配率, 最重要的规则,缩短对象的生命周期,减少对象层次的深度,减少对象之间的引用,避免钉住对象(Pinning)

    减少分配率 这个几乎不用解释,减少了内存的使用量,自然就减少GC回收时的压力,同时降低了内存碎片与CPU的使用量.你可以用一些方法来达到这一目的,但它可能会与其它设计相冲突. 你需要在设计对象时仔细检 ...

  10. 韩信点兵(hanxin)

    相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排.五人一排.七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了.输入包含多组数据,每组数据包含3个非负整数a,b,c,表 ...