免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1783 | 回复: 4
打印 上一主题 下一主题

[其它] 谁能帮我找找程序的问题,关于nandflash [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-19 19:53 |只看该作者 |倒序浏览
仿照韦东山第一期视频第七章nandflash实验写的nand.c程序,可是却没有输出任何东西,总程序的功能是将nandflash里的内容负责到DDR,最后调用main函数计算输入两个数值的值。其他程序没有改动,只是将nand.c替换成自己写的,就没有任何输出了

#define uint unsigned int
#define uchar unsigned char

#define MEM_SYS_CFG     (*((volatile unsigned long *)0x7E00F120))
#define NFCONF          (*((volatile unsigned long *)0x70200000))
#define NFCONT          (*((volatile unsigned long *)0x70200004))
#define NFCMMD          (*((volatile unsigned long *)0x7020000)
#define NFADDR          (*((volatile unsigned long *)0x7020000C))
#define NFDATA          (*((volatile unsigned char *)0x70200010))
#define NFSTAT          (*((volatile unsigned long *)0x7020002)

void send_cmd(uchar a)
{
        NFCMMD = a;
}

void send_addr(uchar a)
{
        NFADDR = a;
}

void wait_ready()
{
        while(!(NFSTAT & 0x01));
}

void nand_select()
{
        NFCONT &= 0xfd;                /*使REG_nCE0 = 0*/
}

void nand_diselect()
{
        NFCONT |= 0x02;                /*使REG_nCE0 = 1*/
}

void nand_init()
{
        MEM_SYS_CFG = 0X01;
       
/*设置时序*/
#define TACLS 0
#define TWRPH0 1
#define TWRPH1 0

        NFCONF = (TACLS << 12) | (TWRPH0 << | (TWRPH1 << 4);
        NFCONT |= 0x01;                /*使MODE = 1,使能nand 控制器*/
        nand_select();
       
}

uchar get_data()
{
        return NFDATA;
}

uchar send_addr(uchar addr)
{
        uchar page = addr /2048;
        uchar column = addr & 0x7ff;
       
        /*发送nandflash 地址*/
        send_addr(column & 0xff);
        send_addr((column >> & 0xff);
        send_addr(page & 0xff);
        send_addr((page >> & 0xff);
        send_addr((page >> 16) & 0xff);

}

int copy2ddr(uchar nand_start, uchar ddr_start, uchar len)
{
        uchar i, count = 0;
        uchar * dest = ddr_start;
        nand_init();
        while(count < len)
        {
                /*发送0x00 指令*/
                send_cmd(0x00);
                send_addr(nand_start);
                /*发送0x30 指令*/
                send_cmd(0x30);
                /*等待读取数据*/
                wait_ready();               
                for(i =0; i <2048; i++)
                        dest[count++] = get_data();
                nand_start += 2048;
        }
        return 0;
       

}

论坛徽章:
0
2 [报告]
发表于 2014-11-19 19:53 |只看该作者
求大神,卡在这里一两天了

论坛徽章:
0
3 [报告]
发表于 2014-11-19 19:54 |只看该作者
上面的笑脸是数值 8

论坛徽章:
0
4 [报告]
发表于 2014-11-21 12:43 |只看该作者
他的视频看了真蛋疼,直接帖代码,自己实现还是比较难的。。。

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:58:11
5 [报告]
发表于 2014-11-21 15:52 |只看该作者
nand flash要分大页和小页的,你的nand flash和他的一样吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP