forked from SZV10X_Software/SZV103_FM33A0xxEV_SiZhu

jinlicong
2024-06-12 f03cf3ae7a36954e64fc014e6bb7afd20c5a5247
Function/E2P/EEPROM.c
@@ -14,7 +14,7 @@
#include "eeprom.h"
#include "spi.h"
#include "delay.h"
//#include "devicegpioinit.h"
#include "gpio.h"
volatile uint8_t Fram_cs_flag = 0;  //´æ´¢Æ¬Ñ¡±êÖ¾£¬ÒÔºóÔö¼ÓһƬ´æ´¢Ð¾Æ¬£¬ÓÃÓÚÑ¡Ôñ²Ù×÷ÄÇÒ»¿é´æ´¢£¬·Ç1ΪµÚ1¿é£¬1ΪµÚ2¿éÐÂÔöµÄ¡£
@@ -23,7 +23,33 @@
//static u16 WR_times_suc=0;
//eeprom ¶ÁÊÇ1¸ö×Ö½Ú50us¡£
void E2P_Ctrl_Gpio_Init(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(EEPROM_PWR_PORT,EEPROM_PWR_PIN,OUT_PUSHPULL);
   OutputIO(EEPROM_CS1_PORT,EEPROM_CS1_PIN,OUT_PUSHPULL);
   OutputIO(EEPROM_CS2_PORT,EEPROM_CS2_PIN,OUT_PUSHPULL);
   CloseIO(EEPROM_WP_PORT,EEPROM_WP_PIN);
   E2P_PWR_ON;
   EEPROM_CS_HIGH;
   EEPROM_CS_2_HIGH;
}
void E2P_Ctrl_Gpio_sleep(void)
{
   CMU_PERCLK_SetableEx(PADCLK, ENABLE);  //PADʱÖÓ£¨GPIO£©Ê¹Äܺ¯Êý
   OutputIO(EEPROM_PWR_PORT,EEPROM_PWR_PIN,OUT_PUSHPULL);
   OutputIO(EEPROM_CS1_PORT,EEPROM_CS1_PIN,OUT_PUSHPULL);
   OutputIO(EEPROM_CS2_PORT,EEPROM_CS2_PIN,OUT_PUSHPULL);
   CloseIO(EEPROM_WP_PORT,EEPROM_WP_PIN);
   E2P_PWR_OFF;
   EEPROM_CS_LOW;
   EEPROM_CS_2_LOW;
}
typedef union 
{
@@ -74,19 +100,21 @@
//      laddr = (addr16 & 0xff);     //low  8 bit address 
     
//     delay_us(10);
     EEPROM_CS_LOW;
     EEPROM_CS_ENABLE;
     FM_ReadWriteByte(FM_WREN);             
    EEPROM_CS_HIGH;
    EEPROM_CS_DISABLE;
      
//     delay_us(10);
      
     EEPROM_CS_LOW;
     EEPROM_CS_ENABLE;
      FM_ReadWriteByte(FM_WRITE);
   #ifndef EEPROM_ADDR_BYTES2
     FM_ReadWriteByte((uint8_t)((addr_fit)>>16));
   #endif
     FM_ReadWriteByte((uint8_t)((addr_fit)>>8));
      FM_ReadWriteByte((uint8_t)((addr_fit)));
     FM_ReadWriteByte(data);
     EEPROM_CS_HIGH;
     EEPROM_CS_DISABLE;
   
   
@@ -112,13 +140,15 @@
//    haddr = (addr16 >> 8) & 0x7f;//high 7 bit address  
//    laddr = (addr16 & 0xff);     //low  8 bit address 
   
   EEPROM_CS_LOW;
   EEPROM_CS_ENABLE;
   FM_ReadWriteByte(FM_READ);
   #ifndef EEPROM_ADDR_BYTES2
   FM_ReadWriteByte((uint8_t)(addr_fit>>16));
   #endif
   FM_ReadWriteByte((uint8_t)(addr_fit>>8));
   FM_ReadWriteByte((uint8_t)(addr_fit));
   data = FM_ReadWriteByte(0xff);//data = FM_ReadWriteByte(0xff);
   EEPROM_CS_HIGH;
   EEPROM_CS_DISABLE;
   
   return data;
}
@@ -134,16 +164,16 @@
void EEPROM_stat_write(uint8 stat) 
{
//     delay_us(10);
     EEPROM_CS_LOW;
     EEPROM_CS_ENABLE;
     FM_ReadWriteByte(FM_WREN);             
    EEPROM_CS_HIGH;
    EEPROM_CS_DISABLE;
      
//     delay_us(10);
      
     EEPROM_CS_LOW;
     EEPROM_CS_ENABLE;
      FM_ReadWriteByte(FM_WRSR);
     FM_ReadWriteByte(stat);
     EEPROM_CS_HIGH;
     EEPROM_CS_DISABLE;
   
}
@@ -159,10 +189,10 @@
   uint8 stat;
   
   delay_us(10);
   EEPROM_CS_LOW;
   EEPROM_CS_ENABLE;
   FM_ReadWriteByte(FM_RDSR);
   stat = FM_ReadWriteByte(0xff);
   EEPROM_CS_HIGH;
   EEPROM_CS_DISABLE;
   
   return stat;
}
@@ -177,9 +207,9 @@
void EEPROM_sleep(void)
   delay_us(10);
   EEPROM_CS_LOW;
   EEPROM_CS_ENABLE;
   FM_ReadWriteByte(FM_SLEEP);
   EEPROM_CS_HIGH;
   EEPROM_CS_DISABLE;
}
@@ -195,13 +225,13 @@
   uint8 i;
   delay_us(10);
   EEPROM_CS_LOW;
   EEPROM_CS_ENABLE;
   FM_ReadWriteByte(FM_RDID);
   for(i = 0;i < 9;i ++)
   {
      dst[i] = FM_ReadWriteByte(0xff);
   }
   EEPROM_CS_HIGH;
   EEPROM_CS_DISABLE;
}
@@ -296,7 +326,7 @@
 *****************************************/
u32 EEPROM_data_read_uint32(uint32 addr16) 
{
   u32_un t;
   t.data[0] = EEPROM_data_read(addr16);
   t.data[1] = EEPROM_data_read(addr16+1);
@@ -399,18 +429,20 @@
   {
      
      
      EEPROM_CS_LOW;
      EEPROM_CS_ENABLE;
      FM_ReadWriteByte(FM_WREN);             
      EEPROM_CS_HIGH;
      EEPROM_CS_DISABLE;
         
      EEPROM_CS_LOW;
      EEPROM_CS_ENABLE;
      FM_ReadWriteByte(FM_WRITE);
      #ifndef EEPROM_ADDR_BYTES2
      FM_ReadWriteByte((uint8_t)((addr_temp)>>16));
      #endif
      FM_ReadWriteByte((uint8_t)((addr_temp)>>8));
      FM_ReadWriteByte((uint8_t)(addr_temp));
      for(i = 0;i < bytewrite;i ++)
        FM_ReadWriteByte(*ptr_data ++);
      EEPROM_CS_HIGH;
      EEPROM_CS_DISABLE;
      
      
@@ -445,53 +477,59 @@
{
   u16    index;
   
   EEPROM_CS_LOW;
   EEPROM_CS_ENABLE;
   FM_ReadWriteByte(FM_READ);
   #ifndef EEPROM_ADDR_BYTES2
   FM_ReadWriteByte((uint8_t)(addr>>16));
   #endif
   FM_ReadWriteByte((uint8_t)(addr>>8));
   FM_ReadWriteByte((uint8_t)(addr));
   for(index = 0;index < bytes;index ++)
     data[index] = FM_ReadWriteByte(0xff);
   EEPROM_CS_HIGH;
   EEPROM_Wait_Busy();   
   EEPROM_CS_DISABLE;
}
uint8_t  EEPROM_MultipleWrite_CS_2(uint8_t *data,u32 addr,u16 bytes)
{
   Fram_cs_flag = EEPROM_CS_2;
   EEPROM_MultipleWrite(data,  addr,  bytes) ;
   Fram_cs_flag = EEPROM_CS_1;
   return 0;
}
uint8_t  EEPROM_MultipleRead_CS_2(uint8_t *data,u32 addr,u16 bytes)
{
   Fram_cs_flag = EEPROM_CS_2;
   EEPROM_MultipleRead(data,  addr,  bytes) ;
   Fram_cs_flag = EEPROM_CS_1;
   return 0;
}
void EEPROM_CS_2_test(void)
void EEPROM_test(void)
{
   uint8_t   u8_temp;
   uint8_t   u8_temp_s[256];
   uint8_t   u8_temp_s2[256];
   uint8_t   buf_test[10] = {0};
   static uint16_t   WR_times = 0;
   static uint16_t   WR_times_suc = 0;
   
   u16   count_i = 0;
   
   for(count_i=0;count_i<256;count_i++)
   {
      u8_temp_s[count_i] = count_i;
      u8_temp_s2[count_i] = 0;
   }
   delay_ms(10);
   delay_ms(100);
   EEPROM_CTRL_ENABLE;
   delay_ms(100);
   EEPROM_MultipleRead(buf_test, 256, 10);
   EEPROM_CTRL_DISABLE;
   delay_ms(10);
   memset(buf_test,0,sizeof(buf_test));
   
   EEPROM_CTRL_ENABLE;
   delay_ms(10);
   EEPROM_MultipleRead(buf_test, 256, 10);
   EEPROM_CTRL_DISABLE;
   while(1){
      IWDT_Clr();
      delay_ms(500);
   }
   
//   while(WR_times <1024)
//   {
@@ -522,7 +560,7 @@
//      
//   }
   
//   EEPROM_MultipleRead_CS_2(u8_temp_s2,(1000 * 256+9),256);