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

📄 f340-at25db161d.c

📁 这是一个C8051F340的SPI接口驱动AT45DB161D的源码
💻 C
字号:


typedef union USHORT 
{
	unsigned int S;
	unsigned char C[2];
} USHORT;

USHORT addrs,Device_ID;

uchar wr_spi(uchar a)
{ 
	SPI0DAT = a;
	while(!SPIF);
	SPIF = 0;
	return(SPI0DAT);
}
uchar RDY_BSY(void)
{
	uchar a;
	NSSMD0 = 0; 
    wr_spi(0x05);
	do{
		a=wr_spi(0);
	}while((a&1)==1);
	NSSMD0 = 1;
	return(a); 
}
void Write_Enable(void)
{
	NSSMD0 = 0; 
    wr_spi(0x06);
	NSSMD0 = 1;
}
void Clearr_Protect(void)
{
	NSSMD0 = 0;
    wr_spi(0x01);
    wr_spi(0x00);
	NSSMD0 = 1;
}
void Erase_Blocks(unsigned int sector)
{
	Write_Enable();
	NSSMD0 = 0; 
    //wr_spi(0x60);//整片擦除
    wr_spi(0x20);//按4K一个块擦除
	addrs.S=sector<<1;
	wr_spi(addrs.C[0]);
	wr_spi(addrs.C[1]);
	wr_spi(0);
	NSSMD0 = 1;
	RDY_BSY();
}
void Sect_Write(unsigned int sector)
{
	unsigned int i=0,q=255;
	bit l=0;
	addrs.S=sector<<1;
	do{
		Write_Enable();
		NSSMD0 = 0; 
		wr_spi(0x02);
		wr_spi(addrs.C[0]);
		wr_spi(addrs.C[1]);
		wr_spi(0);
		for(;i<=q;i++)
		{
			SPI0DAT =~Scratch[i];
			while(!SPIF);
			SPIF = 0;
		}
		NSSMD0 = 1; 
		l=~l;
		addrs.S+=0x1;
		q|=0x100;
		RDY_BSY();
	}while(l==1);
}
void Sect_Read(unsigned int sector)
{
	unsigned int i;
	NSSMD0 = 0; 
	wr_spi(0x03);
	addrs.S=sector<<1;
	wr_spi(addrs.C[0]);
	wr_spi(addrs.C[1]);
	wr_spi(0);
	for(i=0;i<512;i++)
	{
		SPI0DAT = 0;
		while(!SPIF);
		SPIF = 0;
		Scratch[i]=~SPI0DAT;
	}
	NSSMD0 = 1;
}
//读ID号识别芯片容量“AT45DB161”
void Sect_Init(void)
{
	unsigned char i;
    SPI0CFG = 0x40;
    SPI0CN = 0x0D;
    //SPI0CKR = 0x01;
	
    P0MDOUT = 0x0D;
    XBR0 = 0x02;
    XBR1 = 0x40;
	
	NSSMD0 = 0; 
	wr_spi(0x9f);
	Device_ID.C[0]=wr_spi(0);
	Device_ID.C[1]=wr_spi(0);
	wr_spi(0);
	wr_spi(0);
	NSSMD0 = 1;
    if(Device_ID.C[0]==0x1f)
		if((Device_ID.C[1]&0xe0)==0x40)
			Drive_Ready_SD=1;
		Write_Enable();
		Clearr_Protect();
}

⌨️ 快捷键说明

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