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

📄 nand_read.c

📁 arm9的bootloader大家下载解压缩即可看到
💻 C
字号:
//#include "NAND.h"
#include "2410addr.h"
#include "def.h"
#define NF_CMD(cmd)	{rNFCMD=cmd;}
#define NF_ADDR(addr)	{rNFADDR=addr;}	
#define NF_nFCE_L()	{rNFCONF&=~(1<<11);}
#define NF_nFCE_H()	{rNFCONF|=(1<<11);}
#define NF_RSTECC()	{rNFCONF|=(1<<12);}
#define NF_RDDATA() 	(rNFDATA)
#define NF_WRDATA(data) {rNFDATA=data;}

#define NF_WAITRB()    {while(!(rNFSTAT&(1<<0)));} 
	    //wait tWB and check F_RNB pin.   

#define ID_K9S1208V0M	0xec76

#define NAND_SECTOR_SIZE	512
#define NAND_BLOCK_MASK		(NAND_SECTOR_SIZE - 1)
static void
wait_idle(void)
{
    int i;
	//volatile unsigned char *ptr = rNFCONF;

    while(!(rNFSTAT & (1<<0))) for(i=0; i<10; i++);
}

int nand_read_ll(unsigned char *buf, unsigned long start_addr,  int size)
{
    int  j,z;
    unsigned long i;

    if ((start_addr & NAND_BLOCK_MASK) || (size & NAND_BLOCK_MASK)) {
       return -1;	/* invalid alignment */
    }

    /* chip Enable */
    rNFCONF &= ~0x800;
    for(i=0; i<10; i++);

    for(i=start_addr; i < (start_addr + size);) {
      /* READ0 */
      NF_CMD(0) ;

      /* Write Address */
      NF_ADDR ( i & 0xff);
      NF_ADDR ( (i >> 9) & 0xff);
      NF_ADDR ((i >> 17) & 0xff);
      NF_ADDR ((i >> 25) & 0xff);

      wait_idle();
      //NF_WAITRB();

      for(j=0; j < NAND_SECTOR_SIZE; j++, i++) {
	*buf = (NF_RDDATA() & 0xff);
	
	buf++;
      }
    }

    /* chip Disable */
    rNFCONF |= 0x800;	/* chip disable */  
    
    return 0;
}

⌨️ 快捷键说明

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