📄 f340-at25db161d.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 + -