📄 sa25f020.c
字号:
#include<intrins.h>
#include "C8051f.h"
unsigned char bdata SPI_DUMP;
sbit SPI_D7=SPI_DUMP^7;
sbit SPI_D0=SPI_DUMP^0;
void SPI_Write(unsigned char dat)
{
unsigned char temp;
SPI_DUMP=dat;
for(temp=0;temp<8;temp++)
{
SSI=SPI_D7;
SSCK=1;
SPI_DUMP=SPI_DUMP<<1;
SSCK=0;
}
}
unsigned char SPI_Read()
{ unsigned char temp;
for(temp=0;temp<8;temp++)
{
SSCK=1;
SPI_DUMP=SPI_DUMP<<1;
SPI_D0=SSO;
SSCK=0;
}
return(SPI_DUMP);
}
unsigned char SA_RDSR()
{ unsigned char temp;
EA=0;
SPI_Write(0x05);
temp=SPI_Read();
temp=SPI_Read();
EA=1;
return(temp);
}
void SA_WREN()
{
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
EA=0;
SPI_Write(0x06);
EA=1;
}
void SA_WRDI()
{
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
EA=0;
SPI_Write(0x04);
EA=1;
}
void SA_WRSR(unsigned char da)
{
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
EA=0;
SPI_Write(0x01);
SPI_Write(da);
EA=1;
}
void SA_Read(unsigned long addr,unsigned char *ptr,unsigned int size)
{
unsigned char addr_hh,addr_h,addr_l;
unsigned int si;
addr_l=addr&0x0000ff;
addr_h=(addr&0x00ff00)>>8;
addr_hh=(addr&0xff0000)>>16;
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
EA=0;
SPI_Write(0x03);
SPI_Write(addr_hh);
SPI_Write(addr_h);
SPI_Write(addr_l);
for(si=0;si<size;si++)
{
ptr[si]=SPI_Read();
}
EA=1;
}
//ҳд
void SA_PP(unsigned long addr,unsigned char *ptr,unsigned int len)
{
unsigned char addr_hh,addr_h,addr_l;
unsigned int si;
addr_l=addr&0x0000ff;
addr_h=(addr&0x00ff00)>>8;
addr_hh=(addr&0xff0000)>>16;
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
SA_WREN();
EA=0;
SPI_Write(0x02);
SPI_Write(addr_hh);
SPI_Write(addr_h);
SPI_Write(addr_l);
for(si=0;si<len;si++)
{
SPI_Write(ptr[si]);
}
_nop_();
_nop_();
EA=1;
do{
if((SA_RDSR()&0x01)==0x01){
_nop_();
_nop_();
}
else{ break;}
}while(1);
}
//page erase
void SA_PE(unsigned long addr)
{
unsigned char addr_hh,addr_h,addr_l;
addr_l=addr&0x0000ff;
addr_h=(addr&0x00ff00)>>8;
addr_hh=(addr&0xff0000)>>16;
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
SA_WREN();
EA=0;
SPI_Write(0x81);
SPI_Write(addr_hh);
SPI_Write(addr_h);
SPI_Write(addr_l);
EA=1;
}
//Sector erase
void SA_SE(unsigned long addr)
{
unsigned char addr_hh,addr_h,addr_l;
addr_l=addr&0x0000ff;
addr_h=(addr&0x00ff00)>>8;
addr_hh=(addr&0xff0000)>>16;
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
SA_WREN();
EA=0;
SPI_Write(0xd8);
SPI_Write(addr_hh);
SPI_Write(addr_h);
SPI_Write(addr_l);
EA=1;
}
// bulk erase
void SA_BE()
{
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
SA_WREN();
EA=0;
SPI_Write(0xc7);
EA=1;
}
//software protection
void SA_SP()
{
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
EA=0;
SPI_Write(0xb9);
EA=1;
}
// release from software protect and read ID
unsigned char SA_RSP()
{ unsigned char temp;
do{
if((SA_RDSR()&0x01)==0) break;
}while(1);
EA=0;
SPI_Write(0xab);
SPI_Write(0x00);
SPI_Write(0x00);
SPI_Write(0x00);
temp=SPI_Read();
EA=1;
return(temp);
}
unsigned char SA_Write(unsigned long addr,unsigned char *ptr)
{
/*
unsigned long anum;
unsigned int SA_temp;
unsigned char tbuf[256];
*/
}
void SA_Init()
{ unsigned char temp;
SSCK=0;
SSI=1;
SSO=1;
SA_WRSR(0x03);
SA_WREN();
temp=SA_RSP();
temp=SA_RDSR();
temp=SA_RDSR();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -