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

📄 at45db081操作程序.c

📁 flash的读写程序
💻 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 + -