⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nand.c

📁 sbc2410 移植u-boot 1.3.4 的修改部分 需要在borad/sbc2410x/Makefile 下添加编译nand.o
💻 C
字号:
#include <common.h>
#include <s3c2410.h>
#include <config.h>
#define TACLS	0
#define TWRPH0	3
#define TWRPH1	0
#define U32 unsigned int
extern unsigned long nand_probe(unsigned long physadr);

static void NF_Reset(void)
{
	int i;
	NF_nFCE_L(); /* 片选Nand Flash芯片*/
	NF_CMD(0xFF); /* 复位命令 */
	for(i=0;i<10;i++); /* 等待tWB = 100ns. */
	NF_WAITRB(); /* wait 200~500us; */
	NF_nFCE_H(); /* 取消Nand Flash 选中*/
}

void NF_Init(void)
{
	/* 设置Nand Flash配置寄存器, 每一位的取值见1.3节
	 * initial value is 0xf830 */
	rNFCONF=(1<<15)|(1<<14)|(1<<13)|(1<<12)|(1<<11)|(TACLS<<8)|(TWRPH0<<4)|(TWRPH1<<0);
	/* 复位外部Nand Flash芯片 */
	NF_Reset();
}



/* 从Nand Flash中把数据读入到RAM中 */
int nand_read_whole(unsigned char *buf, unsigned long start_addr, int size)
{
	int i, j;
	/* 如果起始地址和长度不是512字节(1页)的倍数, 则返回错误代码 */
	if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
		return 1;
	}
	/* 激活Nand Flash */
	NF_nFCE_L();
	for(i=0; i<10; i++);
	i = start_addr;
	while(i < start_addr + size) {
		/* 读A区 */
		rNFCMD = 0;
		/* 写入读取地址 */
		rNFADDR = i & 0xff;
		rNFADDR = (i >> 9) & 0xff;
		rNFADDR = (i >> 17) & 0xff;
		rNFADDR = (i >> 25) & 0xff;
		NF_WAITRB();
		/* 读出一页(512字节) */
		for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
			*buf = (rNFDATA & 0xff);
			buf++;
		}
	}
	/* 停止驱动Nand Flash */
	NF_nFCE_H();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -