📄 at45db642_wr.c
字号:
write_nocareBit(0x01); //write no care
SET_FLASH_PORT_INPUT();
for (i = 0; i <data_len; i++)
{
*data = Read_a_Byte();
++data;
}
SET_FLASH_CS_HIGH();
return (NO_ERROR);
}
////////////////////////////////////////////////////////////////////////////////////
unsigned char Read_nByte_main(type_datas_toFlash *rdata,type_flash_address *flash_address)
{
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
write_comand(CMD_flash_mainpagesread,flash_address->adr_page,flash_address->adr_buffer);
write_nocareBit(60); //write no care
SET_FLASH_PORT_INPUT();
for (i = 0; i <data_len; i++)
{
*data = Read_a_Byte();
++data;
}
SET_FLASH_CS_HIGH();
return (NO_ERROR);
}
///////////////////////////////////////////////////////////////////////////////////////////////////write 1056 types to main pages throuth buffer1
unsigned char Write_mainpage_thr_buffer(unsigned char bufferNo,type_datas_toFlash *rdata,type_flash_address *flash_address)
{
unsigned char cmd;
unsigned short i,adr_buff;
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);
Error_Location=4;
adr_buff=flash_address->adr_buffer;
if(adr_buff>=AT45DB642_BUFFER_LENGTH)return(ERROR_FLASH_BUFFER_ADR);
if(bufferNo==0)cmd = CMD_flash_buffer1thmain;
else cmd = CMD_flash_buffer2thmain;
write_comand(cmd,flash_address->adr_page,flash_address->adr_buffer);
for (i = 0 ; i < data_len; i++)
{
write_a_Byte(*data);
++data;
if(++adr_buff>AT45DB642_BUFFER_LENGTH)
{
SET_FLASH_CS_HIGH();
return(ERROR_FLASH_BUFFER_ADR);
}
}
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////write two types to buffer2
unsigned char Write_1byte_to_buffer(unsigned char bufferNo,unsigned char data,unsigned short adr_buffer)
{
unsigned char cmd;
// if(Wait_busy()>RESULT_READY)return(ERROR_FLASH_BUSY); /// check flash ready
if(Error_Code>RESULT_READY)return(Error_Code);
if(adr_buffer>=AT45DB642_BUFFER_LENGTH)return(ERROR_FLASH_BUFFER_ADR);
if(bufferNo==0)cmd = CMD_flash_buffer1_write;
else cmd = CMD_flash_buffer2_write;
write_comand(cmd,0,adr_buffer);
write_a_Byte(data);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
////////////////////////////////////////////////////////////////////////////////////
unsigned char Write_nbyte_to_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(adr_buffer>=AT45DB642_BUFFER_LENGTH)return(ERROR_FLASH_BUFFER_ADR);
if(bufferNo==0)cmd = CMD_flash_buffer1_write;
else cmd = CMD_flash_buffer2_write;
write_comand(cmd,0,adr_buffer);
for (i = 0 ; i < data_len; i++)
{
write_a_Byte(*data);
data++;
if(++adr_buffer>AT45DB642_BUFFER_LENGTH)
{
SET_FLASH_CS_HIGH();
return(ERROR_FLASH_BUFFER_ADR);
}
}
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Write_buffer_to_main_Erase_Fast(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_buffer1tomain_ef;
else cmd = CMD_flash_buffer1tomain_ef; //no add pulse//60
write_comand(cmd,adr_page,0);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
unsigned char Write_buffer_to_main_Erase(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_buffer1tomain_e;
else cmd = CMD_flash_buffer2tomain_e; //no add pulse//60
write_comand(cmd,adr_page,0);
SET_FLASH_CS_HIGH();
return(NO_ERROR);
}
///////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
void write_comand(unsigned char cmd,unsigned short adr_page,unsigned short adr_buff)
{
unsigned char cmd_adr[4];
unsigned short i,j;
cmd_adr[0] = cmd;
i = adr_page;
i >>= 5;
cmd_adr[1] = i;
i = adr_page;
i <<= 3;
cmd_adr[2] = i;
i &= 0xf8;
j = adr_buff;
j >>= 8;
j &= 0x07;
i += j;
cmd_adr[2] = i;
cmd_adr[3] = adr_buff;
//----------------------------------------
SET_FLASH_PORT_OUT();
SET_FLASH_CS_LOW();
for (i = 0 ; i < 4; i++)write_a_Byte(cmd_adr[i]);
}
//-------------------------------
unsigned char check_busy(void)
{
if((at45db642ctr_in & busy_ctr)==0)return(1);
return (0);
}
//-------------------------------
void write_a_Byte(unsigned char w_type)
{
at45db642io_out = w_type;
at45db642spi_out |= clk_ctr; //clk = 1
CLOCK_DELAY();
at45db642spi_out &= ~clk_ctr; //clk =0
}
//--------------------------------
unsigned char Read_a_Byte(void)
{
unsigned char r_type;
at45db642spi_out |= clk_ctr; //clk = 1
CLOCK_DELAY();
r_type = at45db642io_in;
at45db642spi_out &= ~clk_ctr; //clk =0
return r_type;
}
//--------------------------------
void write_nocareBit(unsigned short nocare_number)
{
unsigned short i;
for (i = 0; i < nocare_number; i++)
{
at45db642io_out = i;
at45db642spi_out |= clk_ctr; //clk = 1
CLOCK_DELAY();
at45db642spi_out &= ~clk_ctr; //clk =0
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -