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. 集中式(SVN)和分布式(Git)版本控制系统的简单比较

       集中式(SVN)  分布式(Git)  是否有中央服务器  有.开发人员需要从中央服务器获得最新版本的项目然后在本地开发,开发完推送给中央服务器.因此脱离服务器开发者是几乎无法工作的  没有中央 ...

  2. java indexof、BigDecimal、字符串替换

    自我总结,有什么需要改正弥补的地方,请指出,感激不尽! 本次总结了indexof的用法,BigDecimal的乘法.移位运算,Decimal的格式化输出,字符串替换 上代码: 测试类 Test.jav ...

  3. 【django之orm小练习】

    作业1 创建单表Book表,要求字段: 1 主键 nid 2 书名 title 3 价格 price 4 出版日期 pubDate 5 出版社 publisher(普通字符串字段) class Boo ...

  4. 关于OMAPL138烧写程序的说明

    相信很多朋友在用CCS调试OMAPL138开发板的时候,肯定遇到了许许多多的问题: 例如: 1.CCS安装不完整,导致有些功能无法使用 2.ARM端没有加载gel文件,使得程序无法被唤醒 3.ccxm ...

  5. Selenium UI自动化解决iframe定位问题

      更多原创测试技术文章同步更新到微信公众号 :三国测,敬请扫码关注个人的微信号,感谢! 原文链接:http://www.cnblogs.com/zishi/p/6735116.html 一个阴雨霏霏 ...

  6. ABAP更换请求

    当创建的程序或表操作失误存储在其他的请求下边如何更换请求呢? 事务代码:SE09 双击请求号,复制存储错误的对象 打开一个新窗口,双击正确的请求,点击修改,将复制的对象粘贴在正确的请求下 将错误的请求 ...

  7. python基础 列表 的用法及介绍

    列表 首先定义一个列表 声明列表 列表名字=[值1,值2] list=[1,2,3,4,5] 这是一个列表,列表中有五个元素(1,2,3,4,5) 显示list列表 print   list 输出   ...

  8. 一步一步从原理跟我学邮件收取及发送 12.telnet命令行收一封信pop3

    本系列上一篇文章中我们就说到了,这一次我们要说 pop3 收信了.虽然我觉得应该先说完 mime 格式,不过估计大家已经不耐烦了 -- 怎么老在说发送啊?我们要看收取!    好吧,来啦,来啦!收取邮 ...

  9. main函数的实现解析

    main函数的传参的实现,其实也是一个解析字符串的过程:将每个word后一个空格改为“/0”,将单词提取出来. 就是这么简单. 废话不多说,直接上代码: #include<stdio.h> ...

  10. socketlog的安装和使用

    socketlog的使用范围  socketlog比较适用于ajax调试和api的调试,经典应用莫不过于微信众多的api使用调试,使用socketlog可以很条理清楚的查看到api传递的参数,加载的性 ...