📄 at45db642_wr.c
字号:
#include "main.h"
//#include "at45db642_WR.h"
//================================================================================
//define data and flag moudle
//================================================================================
//==================================================read command
#define RESERVED_BITS 4
#define PAGE_ADDRESS_BITS 13
#define BUFF_ADDRESS_BITS 9
#define FLASH_READY BIT7+BIT5+BIT4+BIT3
#define COMP BIT6
const unsigned char CMD_flash_continousread = 0xE8; //Continues Array Read and 60 pluse no care
const unsigned char CMD_flash_continousRead_a = 0x69; //Continues Array Read and 61 pluse no care
const unsigned char CMD_flash_mainpagesread = 0xd2; //Main Memory Page Read and 60 pluse no care
const unsigned char CMD_flash_mainpagesRead_a = 0x52; //Main Memory Page Read and 61 pluse no care
const unsigned char CMD_flash_buffer1read = 0xd4; // Buffer 1 Read and 1 pules no care
const unsigned char CMD_flash_buffer1Read_a = 0x54; // Buffer 1 Read and 2 pules no care
const unsigned char CMD_flash_buffer2read = 0xd6; // Buffer 2 Read and 1 pules no care
const unsigned char CMD_flash_buffer2Read_a = 0x56; // Buffer 2 Read and 2 pules no care
const unsigned char CMD_flash_registerread = 0xd7; // register 1 Read and 0 pules no care
const unsigned char CMD_flash_registerRead_a = 0x57; // register 1 Read and 1 pules no care
//------------------------------------------------write command
const unsigned char CMD_flash_buffer1thmain = 0x82; // Main Memory Page Program through Buffer 1
const unsigned char CMD_flash_buffer1thmain_f = 0x92; // Main Memory Page Program through Buffer 1 ,fast programme
const unsigned char CMD_flash_buffer2thmain = 0x85; // Main Memory Page Program through Buffer 2
const unsigned char CMD_flash_buffer2thmain_f = 0x95; // Main Memory Page Program through Buffer 2 ,fast programme
const unsigned char CMD_flash_page_erase = 0x81; //page erase
const unsigned char CMD_flash_block_erase = 0x50; //block erase
const unsigned char CMD_flash_buffer1_write = 0x84; // Buffer1 Write
const unsigned char CMD_flash_buffer2_write = 0x87; // Buffer2 Write
const unsigned char CMD_flash_buffer1tomain_e = 0x83; // Buffer1 to Main Memory Page Program with Built-in Erase
const unsigned char CMD_flash_buffer2tomain_e = 0x86; // Buffer2 to Main Memory Page Program with Built-in Erase
const unsigned char CMD_flash_buffer1tomain = 0x88; // Buffer1 to Main Memory Page Program without Built-in Erase
const unsigned char CMD_flash_buffer2tomain = 0x89; // Buffer2 to Main Memory Page Program without Built-in Erase
const unsigned char CMD_flash_buffer1tomain_ef = 0x93; // Buffer1 to Main Memory Page Program with Built-in Erase ,fast programme
const unsigned char CMD_flash_buffer2tomain_ef = 0x96; // Buffer2 to Main Memory Page Program with Built-in Erase ,fast programme
const unsigned char CMD_flash_buffer1tomain_f = 0x98; // Buffer1 to Main Memory Page Program without Built-in Erase ,fast programme
const unsigned char CMD_flash_buffer2tomain_f = 0x99; // Buffer2 to Main Memory Page Program without Built-in Erase ,fast programme
//-----------------------------------------------additional command
const unsigned char CMD_flash_maintobuffer1 = 0x53; // Main Memory Page to Buffer 1
const unsigned char CMD_flash_maintobuffer2 = 0x55; // Main Memory Page to Buffer 2
const unsigned char CMD_flash_maincmpbuffer1 = 0x60; // Main Memory Page to Buffer 1 compare
const unsigned char CMD_flash_maincmpbuffer2 = 0x61; // Main Memory Page to Buffer 2 compare
const unsigned char CMD_flash_rewritethbuffer1 = 0x58; // Auto Page Rewrite through Buffer 1
const unsigned char CMD_flash_rewritethbuffer2 = 0x59; // Auto Page Rewrite through Buffer 2
//-------------------------------
#define CLOCK_DELAY() _NOP();_NOP();_NOP()
#define SET_FLASH_CS_LOW() at45db642ctr_out &= ~cs_ctr;CLOCK_DELAY()
#define SET_FLASH_CS_HIGH() at45db642ctr_out |= cs_ctr;CLOCK_DELAY()
#define SET_FLASH_PORT_OUT() at45db642io_dir = 0xff
#define SET_FLASH_PORT_INPUT() at45db642io_dir = 0x0
//-------------------------------
unsigned char check_busy(void);
void write_a_Byte(unsigned char w_type);
void write_nocareBit(unsigned short nocare_number);
void write_comand(unsigned char cmd,unsigned short adr_page,unsigned short buffer);
////////////////////////////////////////////////////////////////////////////////////////////
//=============================================================================================
//this is a subcountine for read and write a programme
//--------------------------------------
unsigned char Intialize_Write_at45db642memory(void)
{
unsigned short j;
if(Error_Code>RESULT_READY)return(Error_Code);
at45db642ctr_sel &= ~(parall_ctr + busy_ctr +cs_ctr);
at45db642spi_dir |= clk_ctr;
at45db642spi_out |= clk_ctr;
at45db642io_sel = 0x00;
at45db642io_dir = 0xff;
at45db642io_out = 0x00; //built on output port
at45db642ctr_dir |= parall_ctr; //select the parall port for transmit
at45db642ctr_dir |= cs_ctr;
CLOCK_DELAY();
at45db642ctr_dir &= ~busy_ctr;
at45db642ctr_out &= ~busy_ctr;
//--------------------------
CLOCK_DELAY();
at45db642spi_sel &= ~clk_ctr; //spi mode at45db642spi_sel |= clk_ctr;
at45db642spi_dir |= clk_ctr;
at45db642spi_out &= ~clk_ctr; //clk =0
//-----------------------------
CLOCK_DELAY();
at45db642ctr_out &= ~parall_ctr;
at45db642ctr_out |= cs_ctr; //cs = 1 """""""""""\_________________
at45db642spi_out &= ~clk_ctr; //clk = 0 _____________|""|__|""|______
for(j=1000;j>0;j--);
Error_Location=1;
if((Read_Status()&FLASH_READY)!=FLASH_READY)return(ERROR_FLASH_BUSY);
return(NO_ERROR);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Wait_busy(void)
{
unsigned short j;
if(Error_Code>RESULT_READY)return(Error_Code);
for(j=10000;j>0;j--)if(check_busy()==0)return(NO_ERROR); /// check flash ready
Error_Location=5;
return(ERROR_FLASH_BUSY);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////read a stutes register
unsigned char Read_Status(void)
{
unsigned char cmd_adr[1];
unsigned char i;
cmd_adr[0] = CMD_flash_registerread; //no add pulse//60
//----------------------------------------
SET_FLASH_PORT_OUT();
SET_FLASH_CS_LOW();
write_a_Byte(cmd_adr[0]);
SET_FLASH_PORT_INPUT();
i = Read_a_Byte();
SET_FLASH_CS_HIGH();
return (i);
}
//-------------------------------
//-------------------------------
//////////////////////////////////////////////////////////////////////////////////////
unsigned char Erease_Block(unsigned short BlockNo)
{
if(Error_Code>RESULT_READY)return(Error_Code);
//if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY);
write_comand(CMD_flash_block_erase,0,0);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
//////////////////////////////////////////////////////////////////////////////////////
unsigned char Transfer_Page_to_Buffer(unsigned char bufferNo,unsigned short adr_page)
{
unsigned char cmd;
if(Error_Code>RESULT_READY)return(Error_Code);
//if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY);
if(bufferNo==0)cmd = CMD_flash_maintobuffer1;
else cmd = CMD_flash_maintobuffer2;
write_comand(cmd,adr_page,0);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
//////////////////////////////////////////////////////////////////////////////////////
unsigned char Compare_Page_to_Buffer(unsigned char bufferNo,unsigned short adr_page)
{ unsigned char cmd;
if(Error_Code>RESULT_READY)return(Error_Code);
//if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY);
if(bufferNo==0)cmd = CMD_flash_maintobuffer1;
else cmd = CMD_flash_maintobuffer2;
write_comand(cmd,adr_page,0);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
//////////////////////////////////////////////////////////////////////////////////////
unsigned char Auto_Page_rewrite(unsigned char bufferNo,unsigned short adr_page)
{
unsigned char cmd;
if(Error_Code>RESULT_READY)return(Error_Code);
//if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY);
if(bufferNo==0)cmd = CMD_flash_rewritethbuffer1;
else cmd = CMD_flash_rewritethbuffer2;
write_comand(cmd,adr_page,0);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Start_Continuous_Array_Read(unsigned short adr_page,unsigned short adr_buffer)
{
if(Error_Code>RESULT_READY)return(Error_Code);
//if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY); /// check flash ready
write_comand(CMD_flash_continousRead_a,adr_page,adr_buffer);
write_nocareBit(60); //write no care
SET_FLASH_PORT_INPUT();
Read_a_Byte();
return(NO_ERROR);
}
void End_Continuous_Array_Read(void)
{
SET_FLASH_CS_HIGH();
}
///////////////////////////////////////////////////////////////////////////////////////////////////read a type from buffer1
unsigned char Read_nByte_buffer(unsigned char bufferNo,type_datas_toFlash *rdata,unsigned short adr_buffer)
{
unsigned char cmd;
unsigned short i;
unsigned char * data = rdata->data;
unsigned short data_len = rdata->data_len;
if(Error_Code>RESULT_READY)return(Error_Code);
//if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY); /// check flash ready
if(bufferNo==0)cmd = CMD_flash_buffer1read;
else cmd = CMD_flash_buffer2read;
write_comand(cmd,0,adr_buffer);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -