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

📄 at45db642_wr.c

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