HI3531的nand flash测试
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测试的更多相关文章
- Hi3531添加16GByte(128Gbit) NAND Flash支持
0.板子上已有Nor Flash了,添加的Nand Flash型号为MT29F128G08CJABAWP,进系统挂接NAND作为一个分区 1.修改uboot u-boot-2010.06/driver ...
- 硬件初始化,nand flash固化操作,系统启动简单流程
2015.3.27星期五 晴 链接脚本定义代码的排放顺序 硬件系统初始化:一:arm核初始化:(里面有指令)初始化ARM核的时候需要看arm核的手册指令:1.异常向量(最起码有个复位异常,初始化模式- ...
- NAND FLASH均衡算法笔记(转)
转来一篇关于NAND FLASH均衡算法的文章,加上一点思考和笔记,认为这种思考有助于更深刻的理解,更好的记忆,所以也算半原创了吧,最起码笔记是原创的.有意思的是,帖子提起这个算法并不是因为嵌入式开发 ...
- NAND Flash【转】
转自:http://www.cnblogs.com/lifan3a/articles/4958224.html 以Micron公司的MT29F2G08为例介绍NAND Flash原理和使用. 1. 概 ...
- Nand flash uboot 命令详解【转】
转自:http://blog.chinaunix.net/uid-14833587-id-76513.html nand info & nand device 显示flash的信息: DM36 ...
- STM32学习笔记——FSMC 驱动大容量NAND FLASH [复制链接]
本文原创于观海听涛,原作者版权所有,转载请注明出处. 近几天开发项目需要用到STM32驱动NAND FLASH,但由于开发板例程以及固件库是用于小页(512B),我要用到的FLASH为1G bit的大 ...
- Samsung K9F1G08U0D SLC NAND FLASH简介(待整理)
Samsung K9F1G08U0D,数据存储容量为128M,采用块页式存储管理.8个I/O引脚充当数据.地址.命令的复用端口.详细:http://www.linux-mtd.infradead.o ...
- Nand flash 的发展和eMMC
讨论到eMMC的发展历程,必须要从介绍Flash的历史开始 Flash分为两种规格:NOR Flash和NAND Flash,两者均为非易失性闪存模块. 1988年,Intel首次发出NOR flas ...
- 编程器NAND Flash 技术入门
NAND Flash分类 SLC(Single-Level Cell)架构:单一储存单元(Cell)可储存1bit data MLC(Multi-Level Cell)架构:单一储存单元(Cell)可 ...
随机推荐
- Akamai CDN
Akamai CDN中的几个重要组件 mapping system 调度系统(映射client到edge cluster,进而到edge server) edge server platform 边缘 ...
- Servlet 浅析
在我们学习Servlet之前,有必要了解一下Web容器的工作模式 我们所有的请求其实都是先到达了web容器,然后才分发给已经注册好的Servlet 请求由Servlet的service方法调用doGe ...
- PYTHON3 中的虚假四舍五入:round()
PYTHON3 中的虚假四舍五入:round() 创建时间: 2017/12/5 17:08 作者: CN_Simo 标签: python基础, round, 四舍五入 一.这不是一个BUG! 在使用 ...
- JavaScript 数值Number类型详解
Number 问题 如果下面的问题你都能回答对了吗? 0.1 + 0.2 == 0.3 成立吗? .e-5 表示多少? 怎么表示8进制? 怎么转换进制? 如何将字符串转换成数值或整数?反过来呢?十六进 ...
- 浅谈PHP异常处理
1.PHP中异常的独特性 PHP中的异常的独特性,即PHP中的异常不同于主流语言C++.java中的异常.在Java中,异常是唯一的错误报告方式,而在PHP中却不是这样,而是把所有不正常的情况都视作了 ...
- BZOJ 3895: 取石子[SG函数 搜索]
有N堆石子 ·从某堆石子中取走一个 ·合并任意两堆石子 不能操作的人输. 100%的数据满足T<=100, N<=50. ai<=1000 容易发现基础操作数$d=\sum a ...
- vue2.0 组织机构树形选择组件(类似elementui <el-transfer> 与 <el-tree> 两个标签的结合)
1. 效果图 2. 实现: 三级(部门或人员的树形选择) 3. 模拟数据说明: fake.js name: 显示的名称(同时也是源码中 for 循环单一的key , 如果真实数据存在名字有重 ...
- docker-compose快速搭建lnmp+redis服务器环境
因为我用的是MacOS 安装docker sudo yum update sudo tee /etc/yum.repos.d/docker.repo <<-'EOF' [dockerrep ...
- 关于目前自己iOS项目使用的第三方开源库
1.AFNetworking 目前比较推荐的iOS网络请求组件,默认网络请求是异步,通过block回调的方式对返回数据进行处理. 2.FMDB 对sqlite数据库操作进行了封装,demo也比较简单. ...
- Linux下绝对经典的命令
1.使用远程终端时,可以使用如下命令: screen tmux 2.下载文件可以使用如下命令: curl wget 3.压缩解压缩可以使用: tar .zip.rar 4.使用抓包工具 tcpdump ...