edit1.c

来自「NANDFLASH的读写子函数」· C语言 代码 · 共 76 行

C
76
字号
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 + =
减小字号Ctrl + -
显示快捷键?