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

📄 at45db642_wr.c

📁 ti msp430 用c 编写的at45db642的操作程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -