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

📄 nandflash.c

📁 ixp425 NANDFlash 源码
💻 C
字号:
#include <stdio.h>

#define GPIOBASE 0xff004000#define GPOUTR (GPIOBASE+0)#define GPOER (GPIOBASE+4)#define GPINR (GPIOBASE+8)#define GPISR (GPIOBASE+12)#define GPIT1R (GPIOBASE+16)#define GPIT2R (GPIOBASE+20)#define GPCLKR (GPIOBASE+24)#define CE 12
#define CLE 5
#define ALE 1

#define FC_CMD {*(unsigned long *)GPOUTR|=(1<<CLE);*(unsigned long *)GPOUTR&=~((1<<ALE)|(1<<CE));}
#define FC_ADDR {*(unsigned long *)GPOUTR|=(1<<ALE);*(unsigned long *)GPOUTR&=~((1<<CLE)|(1<<CE));}
#define FC_DATA {*(unsigned long *)GPOUTR&=~((1<<CLE)|(1<<CE)|(1<<ALE));}
#define FC_INACTIVE	{*(unsigned long *)GPOUTR|=(1<<CE);*(unsigned long *)GPOUTR&=~((1<<ALE)|(1<<CLE));}

#define NAND_BASE (*(unsigned char *)0xE4000000)

static void Flash_Reset(void )		//flash reset
{ 
	int i;
	FC_CMD;
	NAND_BASE = 0xff;	//reset command
	for (i=0;i<300;i++);	//delay 	
}

static unsigned short CheckFlash(void)
{
	int i;
	unsigned int id;

        Flash_Reset();
        
	FC_CMD;
	NAND_BASE = 0x90;
	for(i=0;i<10;i++);		
	FC_ADDR;
	NAND_BASE = 0;
	for(i=0;i<10;i++);
	FC_DATA;
	for(i=0;i<10;i++);	//wait 100ns
	id = NAND_BASE<<8;
	id += NAND_BASE;
	
	FC_INACTIVE;
	return id;	
}

static void InitChipSelect(void)
{
  unsigned long *cs4;
  cs4=(unsigned long *)0xff00d010;    //Nand flash chip select
  *cs4=0xbfff3c43;  //8位 INTEL t1-t5最大
//  *cs4=0x98513c43;  //8位 INTEL t1-t5=1
	
    //设置CE/CLE/ALE作为输出
    *(unsigned long *)GPOER&=~((1<<CLE)|(1<<CE)|(1<<ALE));

    FC_INACTIVE;
}

int main(void)
{
    printf("Test Nand flash build %s %s\n", __DATE__,__TIME__);

    InitChipSelect();
	printf("CS4 = 0x%x GPOER=0x%x\n",*(unsigned long *)0xff00d010,*(unsigned long *)GPOER);
	
    printf("Check Flash 0x%x\n",CheckFlash());

//*(unsigned long *)GPOUTR|=((1<<ALE)|(1<<CLE));
    return 0;
}

⌨️ 快捷键说明

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