HI3531的nand flash测试

简介: <p> </p> <p>void NAND_Init()<br> {<br>    *(unsigned int *)(0x20030000 + 0xd0) = 7; delay_x(0X5000);<br>    *(unsigned int *)(0x20030000 + 0xd0) = 6; delay_x(0X5000);<br>    *(unsigned int *)

 

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];

相关文章
|
Unix Linux Android开发
|
移动开发 测试技术 内存技术
|
内存技术 Web App开发
|
Web App开发 移动开发 iOS开发
HTIML5 真的打败了Flash?新测试结果出人意料
本文最早发布于 2010 年,通过 Flash 与 HTML5 在 Mac 及 Windows 平台不同浏览器中的测试表现,比较两者的性能并分析背后的原因。虽然是一篇老文,但其客观冷静的分析态度,仍旧值得我们学习。文章系国内 ITOM 管理平台 OneAPM 编译呈现。
1930 0
|
3月前
|
Java 测试技术 容器
Jmeter工具使用:HTTP接口性能测试实战
希望这篇文章能够帮助你初步理解如何使用JMeter进行HTTP接口性能测试,有兴趣的话,你可以研究更多关于JMeter的内容。记住,只有理解并掌握了这些工具,你才能充分利用它们发挥其应有的价值。+
717 23
|
8月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
5月前
|
SQL 安全 测试技术
2025接口测试全攻略:高并发、安全防护与六大工具实战指南
本文探讨高并发稳定性验证、安全防护实战及六大工具(Postman、RunnerGo、Apipost、JMeter、SoapUI、Fiddler)选型指南,助力构建未来接口测试体系。接口测试旨在验证数据传输、参数合法性、错误处理能力及性能安全性,其重要性体现在早期发现问题、保障系统稳定和支撑持续集成。常用方法包括功能、性能、安全性及兼容性测试,典型场景涵盖前后端分离开发、第三方服务集成与数据一致性检查。选择合适的工具需综合考虑需求与团队协作等因素。
634 24
|
5月前
|
SQL 测试技术
除了postman还有什么接口测试工具
最好还是使用国内的接口测试软件,其实国内替换postman的软件有很多,这里我推荐使用yunedit-post这款接口测试工具来代替postman,因为它除了接口测试功能外,在动态参数的支持、后置处理执行sql语句等支持方面做得比较好。而且还有接口分享功能,可以生成接口文档给团队在线浏览。
224 2

热门文章

最新文章