Ejemplo n.º 1
0
Archivo: nand.c Proyecto: eagle860/bare
int nand_write(unsigned int nand_start, unsigned char * buf, unsigned int len)
{
	unsigned long count = 0;
	unsigned long addr  = nand_start;
	int i = nand_start % 2048;
	
	nand_select();
	while (count < len)
	{
		nand_cmd(0x80);
		nand_send_addr(addr);
		for (; i < 2048 && count < len; i++)
		{
			nand_send_data(buf[count++]);
			addr++;
		}

		nand_cmd(0x10);
		wait_ready();
		i = 0;		
	}

	nand_deselect();
	
}
Ejemplo n.º 2
0
Archivo: nand.c Proyecto: eagle860/bare
int nand_erase_block(unsigned long addr)
{
	int page = addr / 2048;
	
	nand_select();
	nand_cmd(0x60);
	
	nand_addr(page & 0xff);
	nand_addr((page >> 8) & 0xff);
	nand_addr((page >> 16) & 0xff);

	nand_cmd(0xd0);
	wait_ready();

	nand_deselect();
}
Ejemplo n.º 3
0
void NF_PageRead(unsigned long addr,unsigned char* buff)
{
    int i;
    
    
    /* 选中芯片 */
    select_ship();
    
    /* 清除RnB */
    clean_RnB();
    
    /* 发出命令0x00 */
     nand_cmd(0x00);
        
     /* 发出列地址 */
    nand_addr(0x00);
    nand_addr(0x00);

    /* 发出行地址 */
    nand_addr(addr&0xff);
    nand_addr((addr >>8 ) & (0xff));
    nand_addr((addr >>16 ) & (0xff));
        
    /* 发出命令0x30 */
     nand_cmd(0x30);
        
    /* 等待就绪 */
     wait_RnB();
        
    /* 读数据 */
     for(i = 0; i<1024*2; i++)
    {
    	*buff++ = NFDATA;
    }
        
      
     /* 取消片选 */
     
     delselect_ship();
     
}
Ejemplo n.º 4
0
Archivo: nand.c Proyecto: eagle860/bare
static void nand_reset(void)
{
	/* 选中 */
	nand_select();
	
	/* 发出0xff命令 */
	nand_cmd(0xff);

	/* 等待就绪 */
	wait_ready();
	
	/* 取消选中 */
	nand_deselect();
}
Ejemplo n.º 5
0
Archivo: nand.c Proyecto: eagle860/bare
int nand_read(unsigned int nand_start, unsigned int ddr_start, unsigned int len)
{
	unsigned int addr = nand_start;
	int i, count = 0;
	unsigned char *dest = (unsigned char *)ddr_start;
	
	/* 选中芯片 */
	nand_select();

	while (count < len)
	{
		/* 发出命令0x00 */
		nand_cmd(0x00);

		/* 发出地址 */
		nand_send_addr(addr);

		/* 发出命令0x30 */
		nand_cmd(0x30);

		/* 等待就绪 */
		wait_ready();

		/* 读数据 */
		for (i = 0; i < 2048 && count < len; i++)
		{
			dest[count++] = nand_get_data();
		}

		addr += 2048;			
	}

	/* 取消片选 */
	nand_deselect();
	return 0;
}
Ejemplo n.º 6
0
void nand_reset(void)
{
    /* 选中 */
    select_ship();
    
    /* 清除RnB */
    clean_RnB();
    
    /* 发出复位信号 */
    nand_cmd(0xff);
    
    /* 等待就绪 */
    wait_RnB();
    
    /* 取消选中 */
    delselect_ship();
}