免费注册 查看新帖 |

Chinaunix

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

nand_read.c—从nand flash 读出数据到 sdram [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-16 00:19 |只看该作者 |倒序浏览

#include config.h>
#define __REGb(x)    (*(volatile unsigned char *)(x))
#define __REGi(x)    (*(volatile unsigned int *)(x))
#define NF_BASE        0x4e000000
#define NFCONF        __REGi(NF_BASE + 0x0)
#define NFCMD         __REGb(NF_BASE + 0x4)
#define NFADDR        __REGb(NF_BASE + 0x8)
#define NFDATA        __REGb(NF_BASE + 0xc)
#define NFSTAT        __REGb(NF_BASE + 0x10)
   细心的人肯定会发现,这里定义了两个宏来设置NAND 的控制寄存器地址,NFCONF是指向整形的地址,而其他都是指向字符的地址
这与寄存器具体使用情况有关,因为datesheet中只有NFCONF使用了16位,其他都只使用了8位
#define BUSY 1
inline void wait_idle(void) {
    int i;
    while(!(NFSTAT & BUSY))
      for(i=0; i10; i++);     //这段的作用是判断NAND的状态,NFSTAT=0
//表明NAND忙,执行延时子程序。等待NAND空闲
}
#define NAND_SECTOR_SIZE    512
#define NAND_BLOCK_MASK        (NAND_SECTOR_SIZE - 1)
/* low level nand read function */
int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size)
{
    int i, j;
    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
        return -1;    /* invalid alignment */
    }
    /* chip Enable */
    NFCONF &= ~0x800;
    for(i=0; i10; i++);  //delay
    for(i=start_addr; i  (start_addr + size);) {
      /* READ0 */
      NFCMD = 0;  //为什么写0参考k9f2410芯片手册,读命令
      /* Write Address */ //地址操作,在k9f2410中有表格列出,其中A8未用
      NFADDR = i & 0xff;
      NFADDR = (i >> 9) & 0xff;   //左移9位
      NFADDR = (i >> 17) & 0xff;
      NFADDR = (i >> 25) & 0xff;
      wait_idle();
      for(j=0; j  NAND_SECTOR_SIZE; j++, i++) {
    *buf = (NFDATA & 0xff);
    buf++;
      }//一次循环读NFDATA寄存器512次,得到512个字节
    }
    /* chip Disable */
    NFCONF |= 0x800;    /* chip disable */
    return 0;


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/110004/showart_2150562.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP