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

📄 edit1.c

📁 NANDFLASH的读写子函数
💻 C
字号:
void Read_Page(unsigned int block,unsigned int page,unsigned char *buffer)
{
	int i;
	//unsigned char *source = buffer;
	unsigned int blockPage = (block << 5) + page;
	ST_CMD();
	
//------------------------------------------
	Nand_IO = 0x00;
	ST_ADR();
	Nand_IO = 0;
	Nand_IO = blockPage & 0xff;
	Nand_IO = (blockPage >> 8) & 0xff;
//------------------------------------------

	for(i = 0;i<10;i++);
	ST_DAT();
	WAIT_RB();
	for(i = 0;i < 528; i ++)buffer = Nand_IO;
	for(i=0;i<528;i++)Uart_Printf("read page %x buffer[%d] = 0x%x\n",blockPage,i,buffer);
	ST_INVALID();
}

int Write_Page(unsigned int block,unsigned int page,unsigned char *buffer) 
{
	unsigned int blockPage = (block<<5) + page;
	int i;
	unsigned char *source;
	source = buffer;
	ST_CMD();
	
//------------------------------------------
	Nand_IO = 0x80;
	ST_ADR();
	Nand_IO = 0;
	Nand_IO = blockPage & 0xff;
	Nand_IO = (blockPage >> 8)&0xff;
//------------------------------------------

	ST_DAT();
	for(i = 0;i<528;i++)Nand_IO = source;
	for(i=0;i<528;i++)Uart_Printf("write page %x buffer[%d] = 0x%x\n",blockPage,i,source);
	ST_CMD();
	Nand_IO = 0x10;
	for(i=0;i<10;i++);

	WAIT_RB();
	Nand_IO = 0x70;
	ST_DAT();
	for(i = 0;i<3;i++);
	if(Nand_IO & 0x1 == 0)
	{
		ST_INVALID();
		return 0;
	}
	else 
	{
		ST_INVALID();
		return 1;
	}
}

//64M的比32M的地址多了一位,而这位刚好要在用一个送地址周期才可以把那位送进去,也就是程序修改如下:
//------------------------------------------
Nand_IO = 0;
Nand_IO = blockPage & 0xff;
Nand_IO = (blockPage >> 8)&0xff;
//------------------------------------------
//改为
//------------------------------------------
Nand_IO = 0;
Nand_IO = blockPage & 0xff;
Nand_IO = (blockPage >> 9) & 0xff;
Nand_IO = (blockPage >> 17) & 0x01;
//------------------------------------------

⌨️ 快捷键说明

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