📄 at45db081操作程序.c
字号:
************************AT45DB081读状态寄存器函数************************/
/*函数原型:void AT45DB081_read_St_REG()
/*函数功能:AT45DB081读状态寄存器
/*输入参数:无
/*输出参数:无
/*调用模块:无
//作者:丁霄
/*建立时间:2006/08/26
/*************************************************************************/
unsigned char AT45DB081_read_St_REG()
{
unsigned char i,index_copy;
SS=1;
SS=0;
i=AT45DB081_SPI_RW(STATUS_REG_READ); //读AT45DB081状态寄存器
i=AT45DB081_SPI_RW(0x00);
index_copy=((i&0x38)>>3); //取出AT45DB系列存储器的特征码
PageBits=DF_pagebits[index_copy];
PageSize=DF_pagesize[index_copy];
return (i);
}
/************************AT45DB081主存写函数*************************/
/*函数原型:void AT45DB081_page_write(unsigned int page_add,unsigned int buff_add,unsigned char* data_source)
/*函数功能:AT45DB081主存写
/*输入参数:page_add,buff_add,data_source 页地址 缓冲第一个操作地址 数据源
/*输出参数:无
/*调用模块:无
//作者:丁霄
/*建立时间:2006/08/26
/**************************************************************************/
void AT45DB081_page_write(unsigned int page_add,unsigned int buff_add,unsigned char* data_source)
{
unsigned int count; //计数
unsigned int MAX_str;
/***************数据格式**************
--------------------------------------------------------------
| CMD | rrr,PA11-7 | PA6-0,BFA8 | BF7-0 | data_n | data_(n+1)|
--------------------------------------------------------------
***************************************/
SS=1;
SS=0;
AT45DB081_SPI_RW(MAIN_PAGE_WRITE); //AT45DB081写主存
AT45DB081_SPI_RW((unsigned char)(page_add>>(16-PageBits))); //upper part of page address
AT45DB081_SPI_RW((unsigned char)((page_add<<(PageBits-8))|(buff_add>>8)));
AT45DB081_SPI_RW((unsigned char)(buff_add)); //LSB byte of internal page address
AT45DB081_SPI_RW(0x00); //发送空操作数据 //perform 4 dummy writes
AT45DB081_SPI_RW(0x00); //in order to intiate DataFlash
AT45DB081_SPI_RW(0x00); //address pointers
AT45DB081_SPI_RW(0x00);
MAX_str=strlen(data_source);
for(count=0;count<MAX_str;count++)
{
AT45DB081_SPI_RW(*(data_source+count)); //将制定数据写入存储器
}
}
/************************AT45DB081主存读函数*************************/
/*函数原型:void AT45DB081_page_read(unsigned int page_add,unsigned int buff_add,unsigned char* save_data)
/*函数功能:AT45DB081主存读
/*输入参数:page_add,buff_add,save_data 页地址 缓冲第一个操作地址 存储地址
/*输出参数:无
/*调用模块:无
//作者:丁霄
/*建立时间:2006/08/28
/****************************************************************/
void AT45DB081_page_read(unsigned int page_add,unsigned int buff_add,unsigned char* save_data)
{
unsigned int count; //计数
SS=1;
SS=0;
AT45DB081_SPI_RW(MAIN_PAGE_READ); //AT45DB081读主存
AT45DB081_SPI_RW((unsigned char)(page_add>>(16-PageBits))); //upper part of page address
AT45DB081_SPI_RW((unsigned char)((page_add<<(PageBits-8))|(buff_add>>8)));
AT45DB081_SPI_RW((unsigned char)(buff_add));
AT45DB081_SPI_RW(0x00); //发送空操作数据
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
for(count=0;count<78;count++)
{
*(save_data)=AT45DB081_SPI_RW(0x00); //将读到的数据存入指定地址中
save_data++;
}
}
/****************************AT45DB081读写函数***************************/
/*函数原型:unsigned char AT45DB081_SPI_RW (unsigned char output)
/*函数功能:AT45DB081读写
/*输入参数:output 发送的数据
/*输出参数:input 接受到的数据
/*调用模块:无
//作者:丁霄
/*建立时间:2006/08/26
/********************************************************************/
unsigned char AT45DB081_SPI_RW(unsigned char output)
{
unsigned char input;
SPI_DATA = output;
while((SPCFG&0x80)!=0x80); //查看数据是否发送完毕
input = SPI_DATA;
SPCFG=SPCFG&0x7f; //清楚发送完毕标志位
return input;
}
/***************************AT45DB081页擦除函数***************************/
/*函数原型:void AT45DB081_Page_E(unsigned int page_add)
/*函数功能:AT45DB081页擦除
/*输入参数:page_add 要擦除的页地址
/*输出参数:无
/*调用模块:无
//作者:丁霄
/*建立时间:2006/09/04
/*********************************************************************/
void AT45DB081_Page_E(unsigned int page_add) //页擦除
{
SS=1;
SS=0;
AT45DB081_SPI_RW(PAGE_E); //AT45DB081页擦除
AT45DB081_SPI_RW((unsigned char)(page_add>>(16-PageBits)));
AT45DB081_SPI_RW((unsigned char)(page_add<<(PageBits-8)));
AT45DB081_SPI_RW(0x00);
}
/***************************AT45DB081块擦除函数***************************/
/*函数原型:void AT45DB081_Block_E(unsigned int block_add)
/*函数功能:AT45DB081块擦除
/*输入参数:block_add 要擦除的块地址
/*输出参数:无
/*调用模块:无
//作者:丁霄
/*建立时间:2006/09/04
/*********************************************************************/
void AT45DB081_Block_E(unsigned int block_add) //块擦除
{
SS=1;
SS=0;
AT45DB081_SPI_RW(BLOCK_E); //AT45DB081块擦除
AT45DB081_SPI_RW((unsigned char)(block_add<<3));
AT45DB081_SPI_RW(0x00);
AT45DB081_SPI_RW(0x00);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -