simple test EEPROM emulation (STM algorithm described in the application notes: AN4061, AN3969, AN2594, AN3390, AN4056) for STM32F091

Dependencies:   mbed

Description in AN4061 from STM.

Changed (compared with the original code AN4061):

  • possibility of a larger size of emulated EEPROM (using multiple Flash pages)
  • dummy variables prevent overwrite code in Flash by algorithm of EEPROM emulation




Macro PAGE_NB_PVP (in eeprom.h) defines the size of the virtual page.
Eg. For F091 where Flash page are 2kB value 4 gives 8kB.

Size 8kB virtual page gives you the ability to use max. approx. 2k of 16-bit variables.

Files at this revision

API Documentation at this revision

Comitter:
mega64
Date:
Thu Sep 22 03:13:23 2016 +0000
Parent:
2:3d16b28380a9
Child:
4:0545cac4e5f9
Commit message:
not tested!

Changed in this revision

eeprom/eeprom.cpp Show annotated file Show diff for this revision Revisions of this file
eeprom/eeprom.h Show annotated file Show diff for this revision Revisions of this file
--- a/eeprom/eeprom.cpp	Fri Jul 29 21:18:28 2016 +0000
+++ b/eeprom/eeprom.cpp	Thu Sep 22 03:13:23 2016 +0000
@@ -1,9 +1,9 @@
 /**
   ******************************************************************************
-  * @file    EEPROM/EEPROM_Emulation/src/eeprom.c 
+  * @file    EEPROM_Emulation/src/eeprom.c 
   * @author  MCD Application Team
-  * @version V1.0.1
-  * @date    29-January-2016
+  * @version V1.6.0
+  * @date    27-May-2016
   * @brief   This file provides all the EEPROM emulation firmware functions.
   ******************************************************************************
   * @attention
@@ -33,7 +33,7 @@
   * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   ******************************************************************************
-  */
+  */ 
 
 /** @addtogroup EEPROM_Emulation
   * @{
@@ -47,7 +47,7 @@
 /* Private macro -------------------------------------------------------------*/
 /* Private variables ---------------------------------------------------------*/
 
-/* Dummy variable to protect eeprom pages if code size is bigger than 32kb (F401) */
+/* Dummy variable to protect eeprom pages if code size is bigger than 32kb, needed in Mbed online compiler to avoid conflict with linker (N.S.)  */
 const uint8_t Eeprom_area[2 * PAGE_SIZE] __attribute__((at(EEPROM_START_ADDRESS),used))={ [0 ... (2 * PAGE_SIZE-1)] = 0xFF };
 
 
@@ -74,228 +74,228 @@
   */
 uint16_t EE_Init(void)
 {
-  uint16_t PageStatus0 = 6, PageStatus1 = 6;
-  uint16_t VarIdx = 0;
-  uint16_t EepromStatus = 0, ReadStatus = 0;
+  uint16_t pagestatus0 = 6, pagestatus1 = 6;
+  uint16_t varidx = 0;
+  uint16_t eepromstatus = 0, readstatus = 0;
   int16_t x = -1;
-  HAL_StatusTypeDef  FlashStatus;
-  uint32_t SectorError = 0;
-  FLASH_EraseInitTypeDef pEraseInit;
+  HAL_StatusTypeDef  flashstatus;
+  uint32_t page_error = 0;
+  FLASH_EraseInitTypeDef s_eraseinit;
 
 
   /* Get Page0 status */
-  PageStatus0 = (*(__IO uint16_t*)PAGE0_BASE_ADDRESS);
+  pagestatus0 = (*(__IO uint16_t*)PAGE0_BASE_ADDRESS);
   /* Get Page1 status */
-  PageStatus1 = (*(__IO uint16_t*)PAGE1_BASE_ADDRESS);
+  pagestatus1 = (*(__IO uint16_t*)PAGE1_BASE_ADDRESS);
 
-  pEraseInit.TypeErase = TYPEERASE_SECTORS;
-  pEraseInit.Sector = PAGE0_ID;
-  pEraseInit.NbSectors = 1;
-  pEraseInit.VoltageRange = VOLTAGE_RANGE;
+  /* Fill EraseInit structure*/
+  s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+  s_eraseinit.PageAddress = PAGE0_BASE_ADDRESS;
+  s_eraseinit.NbPages     = 1;
   
   /* Check for invalid header states and repair if necessary */
-  switch (PageStatus0)
+  switch (pagestatus0)
   {
     case ERASED:
-      if (PageStatus1 == VALID_PAGE) /* Page0 erased, Page1 valid */
+      if (pagestatus1 == VALID_PAGE) /* Page0 erased, Page1 valid */
       {
           /* Erase Page0 */
         if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
         {
-          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);
           /* If erase operation was failed, a Flash error code is returned */
-          if (FlashStatus != HAL_OK)
+          if (flashstatus != HAL_OK)
           {
-            return FlashStatus;
+            return flashstatus;
           }
         }
       }
-      else if (PageStatus1 == RECEIVE_DATA) /* Page0 erased, Page1 receive */
+      else if (pagestatus1 == RECEIVE_DATA) /* Page0 erased, Page1 receive */
       {
         /* Erase Page0 */
         if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
         { 
-          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);
           /* If erase operation was failed, a Flash error code is returned */
-          if (FlashStatus != HAL_OK)
+          if (flashstatus != HAL_OK)
           {
-            return FlashStatus;
+            return flashstatus;
           }
         }
         /* Mark Page1 as valid */
-        FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, PAGE1_BASE_ADDRESS, VALID_PAGE);
+        flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE1_BASE_ADDRESS, VALID_PAGE);
         /* If program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
       }
       else /* First EEPROM access (Page0&1 are erased) or invalid state -> format EEPROM */
       {
         /* Erase both Page0 and Page1 and set Page0 as valid page */
-        FlashStatus = EE_Format();
+        flashstatus = EE_Format();
         /* If erase/program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
       }
       break;
 
     case RECEIVE_DATA:
-      if (PageStatus1 == VALID_PAGE) /* Page0 receive, Page1 valid */
+      if (pagestatus1 == VALID_PAGE) /* Page0 receive, Page1 valid */
       {
         /* Transfer data from Page1 to Page0 */
-        for (VarIdx = 0; VarIdx < NB_OF_VAR; VarIdx++)
+        for (varidx = 0; varidx < NB_OF_VAR; varidx++)
         {
-          if (( *(__IO uint16_t*)(PAGE0_BASE_ADDRESS + 6)) == VirtAddVarTab[VarIdx])
+          if (( *(__IO uint16_t*)(PAGE0_BASE_ADDRESS + 6)) == VirtAddVarTab[varidx])
           {
-            x = VarIdx;
+            x = varidx;
           }
-          if (VarIdx != x)
+          if (varidx != x)
           {
             /* Read the last variables' updates */
-            ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar);
+            readstatus = EE_ReadVariable(VirtAddVarTab[varidx], &DataVar);
             /* In case variable corresponding to the virtual address was found */
-            if (ReadStatus != 0x1)
+            if (readstatus != 0x1)
             {
               /* Transfer the variable to the Page0 */
-              EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar);
+              eepromstatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[varidx], DataVar);
               /* If program operation was failed, a Flash error code is returned */
-              if (EepromStatus != HAL_OK)
+              if (eepromstatus != HAL_OK)
               {
-                return EepromStatus;
+                return eepromstatus;
               }
             }
           }
         }
         /* Mark Page0 as valid */
-        FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);
+        flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);
         /* If program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
-        pEraseInit.Sector = PAGE1_ID;
-        pEraseInit.NbSectors = 1;
-        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+        s_eraseinit.PageAddress = PAGE1_BASE_ADDRESS;
+        s_eraseinit.NbPages     = 1;
         /* Erase Page1 */
         if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
         { 
-          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);
           /* If erase operation was failed, a Flash error code is returned */
-          if (FlashStatus != HAL_OK)
+          if (flashstatus != HAL_OK)
           {
-            return FlashStatus;
+            return flashstatus;
           }
         }
       }
-      else if (PageStatus1 == ERASED) /* Page0 receive, Page1 erased */
+      else if (pagestatus1 == ERASED) /* Page0 receive, Page1 erased */
       {
-        pEraseInit.Sector = PAGE1_ID;
-        pEraseInit.NbSectors = 1;
-        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+        s_eraseinit.PageAddress = PAGE1_BASE_ADDRESS;
+        s_eraseinit.NbPages     = 1;
         /* Erase Page1 */
         if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
         { 
-          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);
           /* If erase operation was failed, a Flash error code is returned */
-          if (FlashStatus != HAL_OK)
+          if (flashstatus != HAL_OK)
           {
-            return FlashStatus;
+            return flashstatus;
           }
         }
         /* Mark Page0 as valid */
-        FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);
+        flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE);
         /* If program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
       }
       else /* Invalid state -> format eeprom */
       {
         /* Erase both Page0 and Page1 and set Page0 as valid page */
-        FlashStatus = EE_Format();
+        flashstatus = EE_Format();
         /* If erase/program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
       }
       break;
 
     case VALID_PAGE:
-      if (PageStatus1 == VALID_PAGE) /* Invalid state -> format eeprom */
+      if (pagestatus1 == VALID_PAGE) /* Invalid state -> format eeprom */
       {
         /* Erase both Page0 and Page1 and set Page0 as valid page */
-        FlashStatus = EE_Format();
+        flashstatus = EE_Format();
         /* If erase/program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
       }
-      else if (PageStatus1 == ERASED) /* Page0 valid, Page1 erased */
+      else if (pagestatus1 == ERASED) /* Page0 valid, Page1 erased */
       {
-        pEraseInit.Sector = PAGE1_ID;
-        pEraseInit.NbSectors = 1;
-        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+        s_eraseinit.PageAddress = PAGE1_BASE_ADDRESS;
+        s_eraseinit.NbPages     = 1;
         /* Erase Page1 */
         if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
         { 
-          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);
           /* If erase operation was failed, a Flash error code is returned */
-          if (FlashStatus != HAL_OK)
+          if (flashstatus != HAL_OK)
           {
-            return FlashStatus;
+            return flashstatus;
           }
         }
       }
       else /* Page0 valid, Page1 receive */
       {
         /* Transfer data from Page0 to Page1 */
-        for (VarIdx = 0; VarIdx < NB_OF_VAR; VarIdx++)
+        for (varidx = 0; varidx < NB_OF_VAR; varidx++)
         {
-          if ((*(__IO uint16_t*)(PAGE1_BASE_ADDRESS + 6)) == VirtAddVarTab[VarIdx])
+          if ((*(__IO uint16_t*)(PAGE1_BASE_ADDRESS + 6)) == VirtAddVarTab[varidx])
           {
-            x = VarIdx;
+            x = varidx;
           }
-          if (VarIdx != x)
+          if (varidx != x)
           {
             /* Read the last variables' updates */
-            ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar);
+            readstatus = EE_ReadVariable(VirtAddVarTab[varidx], &DataVar);
             /* In case variable corresponding to the virtual address was found */
-            if (ReadStatus != 0x1)
+            if (readstatus != 0x1)
             {
               /* Transfer the variable to the Page1 */
-              EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar);
+              eepromstatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[varidx], DataVar);
               /* If program operation was failed, a Flash error code is returned */
-              if (EepromStatus != HAL_OK)
+              if (eepromstatus != HAL_OK)
               {
-                return EepromStatus;
+                return eepromstatus;
               }
             }
           }
         }
         /* Mark Page1 as valid */
-        FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, PAGE1_BASE_ADDRESS, VALID_PAGE);        
+        flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE1_BASE_ADDRESS, VALID_PAGE);        
         /* If program operation was failed, a Flash error code is returned */
-        if (FlashStatus != HAL_OK)
+        if (flashstatus != HAL_OK)
         {
-          return FlashStatus;
+          return flashstatus;
         }
-        pEraseInit.Sector = PAGE0_ID;
-        pEraseInit.NbSectors = 1;
-        pEraseInit.VoltageRange = VOLTAGE_RANGE;
+        s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+        s_eraseinit.PageAddress = PAGE0_BASE_ADDRESS;
+        s_eraseinit.NbPages     = 1;
         /* Erase Page0 */
         if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
         { 
-          FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);
+          flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);
           /* If erase operation was failed, a Flash error code is returned */
-          if (FlashStatus != HAL_OK)
+          if (flashstatus != HAL_OK)
           {
-            return FlashStatus;
+            return flashstatus;
           }
         }
       }
@@ -303,11 +303,11 @@
 
     default:  /* Any other state -> format eeprom */
       /* Erase both Page0 and Page1 and set Page0 as valid page */
-      FlashStatus = EE_Format();
+      flashstatus = EE_Format();
       /* If erase/program operation was failed, a Flash error code is returned */
-      if (FlashStatus != HAL_OK)
+      if (flashstatus != HAL_OK)
       {
-        return FlashStatus;
+        return flashstatus;
       }
       break;
   }
@@ -327,21 +327,21 @@
   */
 uint16_t EE_VerifyPageFullyErased(uint32_t Address)
 {
-  uint32_t ReadStatus = 1;
-  uint16_t AddressValue = 0x5555;
+  uint32_t readstatus = 1;
+  uint16_t addressvalue = 0x5555;
     
   /* Check each active page address starting from end */
   while (Address <= PAGE0_END_ADDRESS)
   {
     /* Get the current location content to be compared with virtual address */
-    AddressValue = (*(__IO uint16_t*)Address);
+    addressvalue = (*(__IO uint16_t*)Address);
 
     /* Compare the read address with the virtual address */
-    if (AddressValue != ERASED)
+    if (addressvalue != ERASED)
     {
       
-      /* In case variable value is read, reset ReadStatus flag */
-      ReadStatus = 0;
+      /* In case variable value is read, reset readstatus flag */
+      readstatus = 0;
 
       break;
     }
@@ -349,8 +349,8 @@
     Address = Address + 4;
   }
   
-  /* Return ReadStatus value: (0: Page not erased, 1: Sector erased) */
-  return ReadStatus;
+  /* Return readstatus value: (0: Page not erased, 1: Page erased) */
+  return readstatus;
 }
 
 /**
@@ -365,51 +365,51 @@
   */
 uint16_t EE_ReadVariable(uint16_t VirtAddress, uint16_t* Data)
 {
-  uint16_t ValidPage = PAGE0;
-  uint16_t AddressValue = 0x5555, ReadStatus = 1;
-  uint32_t Address = EEPROM_START_ADDRESS, PageStartAddress = EEPROM_START_ADDRESS;
+  uint16_t validpage = PAGE0;
+  uint16_t addressvalue = 0x5555, readstatus = 1;
+  uint32_t address = EEPROM_START_ADDRESS, PageStartAddress = EEPROM_START_ADDRESS;
 
   /* Get active Page for read operation */
-  ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);
+  validpage = EE_FindValidPage(READ_FROM_VALID_PAGE);
 
   /* Check if there is no valid page */
-  if (ValidPage == NO_VALID_PAGE)
+  if (validpage == NO_VALID_PAGE)
   {
     return  NO_VALID_PAGE;
   }
 
   /* Get the valid Page start Address */
-  PageStartAddress = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(ValidPage * PAGE_SIZE));
+  PageStartAddress = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(validpage * PAGE_SIZE));
 
   /* Get the valid Page end Address */
-  Address = (uint32_t)((EEPROM_START_ADDRESS - 2) + (uint32_t)((1 + ValidPage) * PAGE_SIZE));
+  address = (uint32_t)((EEPROM_START_ADDRESS - 2) + (uint32_t)((1 + validpage) * PAGE_SIZE));
 
   /* Check each active page address starting from end */
-  while (Address > (PageStartAddress + 2))
+  while (address > (PageStartAddress + 2))
   {
     /* Get the current location content to be compared with virtual address */
-    AddressValue = (*(__IO uint16_t*)Address);
+    addressvalue = (*(__IO uint16_t*)address);
 
     /* Compare the read address with the virtual address */
-    if (AddressValue == VirtAddress)
+    if (addressvalue == VirtAddress)
     {
       /* Get content of Address-2 which is variable value */
-      *Data = (*(__IO uint16_t*)(Address - 2));
+      *Data = (*(__IO uint16_t*)(address - 2));
 
-      /* In case variable value is read, reset ReadStatus flag */
-      ReadStatus = 0;
+      /* In case variable value is read, reset readstatus flag */
+      readstatus = 0;
 
       break;
     }
     else
     {
       /* Next address location */
-      Address = Address - 4;
+      address = address - 4;
     }
   }
 
-  /* Return ReadStatus value: (0: variable exist, 1: variable doesn't exist) */
-  return ReadStatus;
+  /* Return readstatus value: (0: variable exist, 1: variable doesn't exist) */
+  return readstatus;
 }
 
 /**
@@ -448,41 +448,40 @@
   */
 static HAL_StatusTypeDef EE_Format(void)
 {
-  HAL_StatusTypeDef FlashStatus = HAL_OK;
-  uint32_t SectorError = 0;
-  FLASH_EraseInitTypeDef pEraseInit;
+  HAL_StatusTypeDef flashstatus = HAL_OK;
+  uint32_t page_error = 0;
+  FLASH_EraseInitTypeDef s_eraseinit;
 
-  pEraseInit.TypeErase = FLASH_TYPEERASE_SECTORS;  
-  pEraseInit.Sector = PAGE0_ID;
-  pEraseInit.NbSectors = 1;
-  pEraseInit.VoltageRange = VOLTAGE_RANGE;
+  s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+  s_eraseinit.PageAddress = PAGE0_BASE_ADDRESS;
+  s_eraseinit.NbPages     = 1;
   /* Erase Page0 */
   if(!EE_VerifyPageFullyErased(PAGE0_BASE_ADDRESS))
   {
-    FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError); 
+    flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error); 
     /* If erase operation was failed, a Flash error code is returned */
-    if (FlashStatus != HAL_OK)
+    if (flashstatus != HAL_OK)
     {
-      return FlashStatus;
+      return flashstatus;
     }
   }
   /* Set Page0 as valid page: Write VALID_PAGE at Page0 base address */
-  FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE); 
+  flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, PAGE0_BASE_ADDRESS, VALID_PAGE); 
   /* If program operation was failed, a Flash error code is returned */
-  if (FlashStatus != HAL_OK)
+  if (flashstatus != HAL_OK)
   {
-    return FlashStatus;
+    return flashstatus;
   }
 
-  pEraseInit.Sector = PAGE1_ID;
+  s_eraseinit.PageAddress = PAGE1_BASE_ADDRESS;
   /* Erase Page1 */
   if(!EE_VerifyPageFullyErased(PAGE1_BASE_ADDRESS))
   {  
-    FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError); 
+    flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error); 
     /* If erase operation was failed, a Flash error code is returned */
-    if (FlashStatus != HAL_OK)
+    if (flashstatus != HAL_OK)
     {
-      return FlashStatus;
+      return flashstatus;
     }
   }
   
@@ -500,22 +499,22 @@
   */
 static uint16_t EE_FindValidPage(uint8_t Operation)
 {
-  uint16_t PageStatus0 = 6, PageStatus1 = 6;
+  uint16_t pagestatus0 = 6, pagestatus1 = 6;
 
   /* Get Page0 actual status */
-  PageStatus0 = (*(__IO uint16_t*)PAGE0_BASE_ADDRESS);
+  pagestatus0 = (*(__IO uint16_t*)PAGE0_BASE_ADDRESS);
 
   /* Get Page1 actual status */
-  PageStatus1 = (*(__IO uint16_t*)PAGE1_BASE_ADDRESS);
+  pagestatus1 = (*(__IO uint16_t*)PAGE1_BASE_ADDRESS);
 
   /* Write or read operation */
   switch (Operation)
   {
     case WRITE_IN_VALID_PAGE:   /* ---- Write operation ---- */
-      if (PageStatus1 == VALID_PAGE)
+      if (pagestatus1 == VALID_PAGE)
       {
         /* Page0 receiving data */
-        if (PageStatus0 == RECEIVE_DATA)
+        if (pagestatus0 == RECEIVE_DATA)
         {
           return PAGE0;         /* Page0 valid */
         }
@@ -524,10 +523,10 @@
           return PAGE1;         /* Page1 valid */
         }
       }
-      else if (PageStatus0 == VALID_PAGE)
+      else if (pagestatus0 == VALID_PAGE)
       {
         /* Page1 receiving data */
-        if (PageStatus1 == RECEIVE_DATA)
+        if (pagestatus1 == RECEIVE_DATA)
         {
           return PAGE1;         /* Page1 valid */
         }
@@ -542,11 +541,11 @@
       }
 
     case READ_FROM_VALID_PAGE:  /* ---- Read operation ---- */
-      if (PageStatus0 == VALID_PAGE)
+      if (pagestatus0 == VALID_PAGE)
       {
         return PAGE0;           /* Page0 valid */
       }
-      else if (PageStatus1 == VALID_PAGE)
+      else if (pagestatus1 == VALID_PAGE)
       {
         return PAGE1;           /* Page1 valid */
       }
@@ -572,47 +571,47 @@
   */
 static uint16_t EE_VerifyPageFullWriteVariable(uint16_t VirtAddress, uint16_t Data)
 {
-  HAL_StatusTypeDef FlashStatus = HAL_OK;
-  uint16_t ValidPage = PAGE0;
-  uint32_t Address = EEPROM_START_ADDRESS, PageEndAddress = EEPROM_START_ADDRESS+PAGE_SIZE;
+  HAL_StatusTypeDef flashstatus = HAL_OK;
+  uint16_t validpage = PAGE0;
+  uint32_t address = EEPROM_START_ADDRESS, pageendaddress = EEPROM_START_ADDRESS+PAGE_SIZE;
 
   /* Get valid Page for write operation */
-  ValidPage = EE_FindValidPage(WRITE_IN_VALID_PAGE);
+  validpage = EE_FindValidPage(WRITE_IN_VALID_PAGE);
   
   /* Check if there is no valid page */
-  if (ValidPage == NO_VALID_PAGE)
+  if (validpage == NO_VALID_PAGE)
   {
     return  NO_VALID_PAGE;
   }
 
-  /* Get the valid Page start Address */
-  Address = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(ValidPage * PAGE_SIZE));
+  /* Get the valid Page start address */
+  address = (uint32_t)(EEPROM_START_ADDRESS + (uint32_t)(validpage * PAGE_SIZE));
 
-  /* Get the valid Page end Address */
-  PageEndAddress = (uint32_t)((EEPROM_START_ADDRESS - 1) + (uint32_t)((ValidPage + 1) * PAGE_SIZE));
+  /* Get the valid Page end address */
+  pageendaddress = (uint32_t)((EEPROM_START_ADDRESS - 1) + (uint32_t)((validpage + 1) * PAGE_SIZE));
 
   /* Check each active page address starting from begining */
-  while (Address < PageEndAddress)
+  while (address < pageendaddress)
   {
-    /* Verify if Address and Address+2 contents are 0xFFFFFFFF */
-    if ((*(__IO uint32_t*)Address) == 0xFFFFFFFF)
+    /* Verify if address and address+2 contents are 0xFFFFFFFF */
+    if ((*(__IO uint32_t*)address) == 0xFFFFFFFF)
     {
       /* Set variable data */
-      FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, Address, Data);       
+      flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address, Data);       
       /* If program operation was failed, a Flash error code is returned */
-      if (FlashStatus != HAL_OK)
+      if (flashstatus != HAL_OK)
       {
-        return FlashStatus;
+        return flashstatus;
       }
       /* Set variable virtual address */
-      FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, Address + 2, VirtAddress);       
+      flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, address + 2, VirtAddress);       
       /* Return program operation status */
-      return FlashStatus;
+      return flashstatus;
     }
     else
     {
       /* Next address location */
-      Address = Address + 4;
+      address = address + 4;
     }
   }
 
@@ -633,32 +632,32 @@
   */
 static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
 {
-  HAL_StatusTypeDef FlashStatus = HAL_OK;
-  uint32_t NewPageAddress = EEPROM_START_ADDRESS;
-  uint16_t OldPageId=0;
-  uint16_t ValidPage = PAGE0, VarIdx = 0;
-  uint16_t EepromStatus = 0, ReadStatus = 0;
-  uint32_t SectorError = 0;
-  FLASH_EraseInitTypeDef pEraseInit;
+  HAL_StatusTypeDef flashstatus = HAL_OK;
+  uint32_t newpageaddress = EEPROM_START_ADDRESS;
+  uint32_t oldpageid = 0;
+  uint16_t validpage = PAGE0, varidx = 0;
+  uint16_t eepromstatus = 0, readstatus = 0;
+  uint32_t page_error = 0;
+  FLASH_EraseInitTypeDef s_eraseinit;
 
   /* Get active Page for read operation */
-  ValidPage = EE_FindValidPage(READ_FROM_VALID_PAGE);
+  validpage = EE_FindValidPage(READ_FROM_VALID_PAGE);
 
-  if (ValidPage == PAGE1)       /* Page1 valid */
+  if (validpage == PAGE1)       /* Page1 valid */
   {
     /* New page address where variable will be moved to */
-    NewPageAddress = PAGE0_BASE_ADDRESS;
+    newpageaddress = PAGE0_BASE_ADDRESS;
 
     /* Old page ID where variable will be taken from */
-    OldPageId = PAGE1_ID;
+    oldpageid = PAGE1_BASE_ADDRESS;
   }
-  else if (ValidPage == PAGE0)  /* Page0 valid */
+  else if (validpage == PAGE0)  /* Page0 valid */
   {
     /* New page address  where variable will be moved to */
-    NewPageAddress = PAGE1_BASE_ADDRESS;
+    newpageaddress = PAGE1_BASE_ADDRESS;
 
     /* Old page ID where variable will be taken from */
-    OldPageId = PAGE0_ID;
+    oldpageid = PAGE0_BASE_ADDRESS;
   }
   else
   {
@@ -666,69 +665,70 @@
   }
 
   /* Set the new Page status to RECEIVE_DATA status */
-  FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, NewPageAddress, RECEIVE_DATA);  
+  flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, newpageaddress, RECEIVE_DATA);  
   /* If program operation was failed, a Flash error code is returned */
-  if (FlashStatus != HAL_OK)
+  if (flashstatus != HAL_OK)
   {
-    return FlashStatus;
+    return flashstatus;
   }
   
   /* Write the variable passed as parameter in the new active page */
-  EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddress, Data);
+  eepromstatus = EE_VerifyPageFullWriteVariable(VirtAddress, Data);
   /* If program operation was failed, a Flash error code is returned */
-  if (EepromStatus != HAL_OK)
+  if (eepromstatus != HAL_OK)
   {
-    return EepromStatus;
+    return eepromstatus;
   }
 
   /* Transfer process: transfer variables from old to the new active page */
-  for (VarIdx = 0; VarIdx < NB_OF_VAR; VarIdx++)
+  for (varidx = 0; varidx < NB_OF_VAR; varidx++)
   {
-    if (VirtAddVarTab[VarIdx] != VirtAddress)  /* Check each variable except the one passed as parameter */
+    if (VirtAddVarTab[varidx] != VirtAddress)  /* Check each variable except the one passed as parameter */
     {
       /* Read the other last variable updates */
-      ReadStatus = EE_ReadVariable(VirtAddVarTab[VarIdx], &DataVar);
+      readstatus = EE_ReadVariable(VirtAddVarTab[varidx], &DataVar);
       /* In case variable corresponding to the virtual address was found */
-      if (ReadStatus != 0x1)
+      if (readstatus != 0x1)
       {
         /* Transfer the variable to the new active page */
-        EepromStatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[VarIdx], DataVar);
+        eepromstatus = EE_VerifyPageFullWriteVariable(VirtAddVarTab[varidx], DataVar);
         /* If program operation was failed, a Flash error code is returned */
-        if (EepromStatus != HAL_OK)
+        if (eepromstatus != HAL_OK)
         {
-          return EepromStatus;
+          return eepromstatus;
         }
       }
     }
   }
 
-  pEraseInit.TypeErase = TYPEERASE_SECTORS;
-  pEraseInit.Sector = OldPageId;
-  pEraseInit.NbSectors = 1;
-  pEraseInit.VoltageRange = VOLTAGE_RANGE;
+  s_eraseinit.TypeErase   = FLASH_TYPEERASE_PAGES;
+  s_eraseinit.PageAddress = oldpageid;
+  s_eraseinit.NbPages     = 1;
   
   /* Erase the old Page: Set old Page status to ERASED status */
-  FlashStatus = HAL_FLASHEx_Erase(&pEraseInit, &SectorError);  
+  flashstatus = HAL_FLASHEx_Erase(&s_eraseinit, &page_error);  
   /* If erase operation was failed, a Flash error code is returned */
-  if (FlashStatus != HAL_OK)
+  if (flashstatus != HAL_OK)
   {
-    return FlashStatus;
+    return flashstatus;
   }
 
   /* Set new Page status to VALID_PAGE status */
-  FlashStatus = HAL_FLASH_Program(TYPEPROGRAM_HALFWORD, NewPageAddress, VALID_PAGE);   
+  flashstatus = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, newpageaddress, VALID_PAGE);   
   /* If program operation was failed, a Flash error code is returned */
-  if (FlashStatus != HAL_OK)
+  if (flashstatus != HAL_OK)
   {
-    return FlashStatus;
+    return flashstatus;
   }
+  
+  
 
   /* Return last operation flash status */
-  return FlashStatus;
+  return flashstatus;
 }
 
 /**
   * @}
   */ 
 
-/******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
--- a/eeprom/eeprom.h	Fri Jul 29 21:18:28 2016 +0000
+++ b/eeprom/eeprom.h	Thu Sep 22 03:13:23 2016 +0000
@@ -1,9 +1,9 @@
 /**
   ******************************************************************************
-  * @file    EEPROM/EEPROM_Emulation/inc/eeprom.h 
+  * @file    EEPROM_Emulation/inc/eeprom.h 
   * @author  MCD Application Team
-  * @version V1.0.1
-  * @date    29-January-2016
+  * @version V1.6.0
+  * @date    27-May-2016
   * @brief   This file contains all the functions prototypes for the EEPROM 
   *          emulation firmware library.
   ******************************************************************************
@@ -41,39 +41,156 @@
 #define __EEPROM_H
 
 /* Includes ------------------------------------------------------------------*/
-#include "stm32f4xx_hal.h"
+#include "stm32f0xx_hal.h"
 
 /* Exported constants --------------------------------------------------------*/
-/* EEPROM emulation firmware error codes */
-#define EE_OK      (uint32_t)HAL_OK
-#define EE_ERROR   (uint32_t)HAL_ERROR
-#define EE_BUSY    (uint32_t)HAL_BUSY
-#define EE_TIMEOUT (uint32_t)HAL_TIMEOUT
+
+/* Base address of the Flash sectors */
+#define ADDR_FLASH_PAGE_0     ((uint32_t)0x08000000) /* Base @ of Page 0, 2 Kbytes */
+#define ADDR_FLASH_PAGE_1     ((uint32_t)0x08000800) /* Base @ of Page 1, 2 Kbytes */
+#define ADDR_FLASH_PAGE_2     ((uint32_t)0x08001000) /* Base @ of Page 2, 2 Kbytes */
+#define ADDR_FLASH_PAGE_3     ((uint32_t)0x08001800) /* Base @ of Page 3, 2 Kbytes */
+#define ADDR_FLASH_PAGE_4     ((uint32_t)0x08002000) /* Base @ of Page 4, 2 Kbytes */
+#define ADDR_FLASH_PAGE_5     ((uint32_t)0x08002800) /* Base @ of Page 5, 2 Kbytes */
+#define ADDR_FLASH_PAGE_6     ((uint32_t)0x08003000) /* Base @ of Page 6, 2 Kbytes */
+#define ADDR_FLASH_PAGE_7     ((uint32_t)0x08003800) /* Base @ of Page 7, 2 Kbytes */
+#define ADDR_FLASH_PAGE_8     ((uint32_t)0x08004000) /* Base @ of Page 8, 2 Kbytes */
+#define ADDR_FLASH_PAGE_9     ((uint32_t)0x08004800) /* Base @ of Page 9, 2 Kbytes */
+#define ADDR_FLASH_PAGE_10    ((uint32_t)0x08005000) /* Base @ of Page 10, 2 Kbytes */
+#define ADDR_FLASH_PAGE_11    ((uint32_t)0x08005800) /* Base @ of Page 11, 2 Kbytes */
+#define ADDR_FLASH_PAGE_12    ((uint32_t)0x08006000) /* Base @ of Page 12, 2 Kbytes */
+#define ADDR_FLASH_PAGE_13    ((uint32_t)0x08006800) /* Base @ of Page 13, 2 Kbytes */
+#define ADDR_FLASH_PAGE_14    ((uint32_t)0x08007000) /* Base @ of Page 14, 2 Kbytes */
+#define ADDR_FLASH_PAGE_15    ((uint32_t)0x08007800) /* Base @ of Page 15, 2 Kbytes */
+#define ADDR_FLASH_PAGE_16    ((uint32_t)0x08008000) /* Base @ of Page 16, 2 Kbytes */
+#define ADDR_FLASH_PAGE_17    ((uint32_t)0x08008800) /* Base @ of Page 17, 2 Kbytes */
+#define ADDR_FLASH_PAGE_18    ((uint32_t)0x08009000) /* Base @ of Page 18, 2 Kbytes */
+#define ADDR_FLASH_PAGE_19    ((uint32_t)0x08009800) /* Base @ of Page 19, 2 Kbytes */
+#define ADDR_FLASH_PAGE_20    ((uint32_t)0x0800A000) /* Base @ of Page 20, 2 Kbytes */
+#define ADDR_FLASH_PAGE_21    ((uint32_t)0x0800A800) /* Base @ of Page 21, 2 Kbytes */
+#define ADDR_FLASH_PAGE_22    ((uint32_t)0x0800B000) /* Base @ of Page 22, 2 Kbytes */
+#define ADDR_FLASH_PAGE_23    ((uint32_t)0x0800B800) /* Base @ of Page 23, 2 Kbytes */
+#define ADDR_FLASH_PAGE_24    ((uint32_t)0x0800C000) /* Base @ of Page 24, 2 Kbytes */
+#define ADDR_FLASH_PAGE_25    ((uint32_t)0x0800C800) /* Base @ of Page 25, 2 Kbytes */
+#define ADDR_FLASH_PAGE_26    ((uint32_t)0x0800D000) /* Base @ of Page 26, 2 Kbytes */
+#define ADDR_FLASH_PAGE_27    ((uint32_t)0x0800D800) /* Base @ of Page 27, 2 Kbytes */
+#define ADDR_FLASH_PAGE_28    ((uint32_t)0x0800E000) /* Base @ of Page 28, 2 Kbytes */
+#define ADDR_FLASH_PAGE_29    ((uint32_t)0x0800E800) /* Base @ of Page 29, 2 Kbytes */
+#define ADDR_FLASH_PAGE_30    ((uint32_t)0x0800F000) /* Base @ of Page 30, 2 Kbytes */
+#define ADDR_FLASH_PAGE_31    ((uint32_t)0x0800F800) /* Base @ of Page 31, 2 Kbytes */
+#define ADDR_FLASH_PAGE_32    ((uint32_t)0x08010000) /* Base @ of Page 32, 2 Kbytes */
+#define ADDR_FLASH_PAGE_33    ((uint32_t)0x08010800) /* Base @ of Page 33, 2 Kbytes */
+#define ADDR_FLASH_PAGE_34    ((uint32_t)0x08011000) /* Base @ of Page 34, 2 Kbytes */
+#define ADDR_FLASH_PAGE_35    ((uint32_t)0x08011800) /* Base @ of Page 35, 2 Kbytes */
+#define ADDR_FLASH_PAGE_36    ((uint32_t)0x08012000) /* Base @ of Page 36, 2 Kbytes */
+#define ADDR_FLASH_PAGE_37    ((uint32_t)0x08012800) /* Base @ of Page 37, 2 Kbytes */
+#define ADDR_FLASH_PAGE_38    ((uint32_t)0x08013000) /* Base @ of Page 38, 2 Kbytes */
+#define ADDR_FLASH_PAGE_39    ((uint32_t)0x08013800) /* Base @ of Page 39, 2 Kbytes */
+#define ADDR_FLASH_PAGE_40    ((uint32_t)0x08014000) /* Base @ of Page 40, 2 Kbytes */
+#define ADDR_FLASH_PAGE_41    ((uint32_t)0x08014800) /* Base @ of Page 41, 2 Kbytes */
+#define ADDR_FLASH_PAGE_42    ((uint32_t)0x08015000) /* Base @ of Page 42, 2 Kbytes */
+#define ADDR_FLASH_PAGE_43    ((uint32_t)0x08015800) /* Base @ of Page 43, 2 Kbytes */
+#define ADDR_FLASH_PAGE_44    ((uint32_t)0x08016000) /* Base @ of Page 44, 2 Kbytes */
+#define ADDR_FLASH_PAGE_45    ((uint32_t)0x08016800) /* Base @ of Page 45, 2 Kbytes */
+#define ADDR_FLASH_PAGE_46    ((uint32_t)0x08017000) /* Base @ of Page 46, 2 Kbytes */
+#define ADDR_FLASH_PAGE_47    ((uint32_t)0x08017800) /* Base @ of Page 47, 2 Kbytes */
+#define ADDR_FLASH_PAGE_48    ((uint32_t)0x08018000) /* Base @ of Page 48, 2 Kbytes */
+#define ADDR_FLASH_PAGE_49    ((uint32_t)0x08018800) /* Base @ of Page 49, 2 Kbytes */
+#define ADDR_FLASH_PAGE_50    ((uint32_t)0x08019000) /* Base @ of Page 50, 2 Kbytes */
+#define ADDR_FLASH_PAGE_51    ((uint32_t)0x08019800) /* Base @ of Page 51, 2 Kbytes */
+#define ADDR_FLASH_PAGE_52    ((uint32_t)0x0801A000) /* Base @ of Page 52, 2 Kbytes */
+#define ADDR_FLASH_PAGE_53    ((uint32_t)0x0801A800) /* Base @ of Page 53, 2 Kbytes */
+#define ADDR_FLASH_PAGE_54    ((uint32_t)0x0801B000) /* Base @ of Page 54, 2 Kbytes */
+#define ADDR_FLASH_PAGE_55    ((uint32_t)0x0801B800) /* Base @ of Page 55, 2 Kbytes */
+#define ADDR_FLASH_PAGE_56    ((uint32_t)0x0801C000) /* Base @ of Page 56, 2 Kbytes */
+#define ADDR_FLASH_PAGE_57    ((uint32_t)0x0801C800) /* Base @ of Page 57, 2 Kbytes */
+#define ADDR_FLASH_PAGE_58    ((uint32_t)0x0801D000) /* Base @ of Page 58, 2 Kbytes */
+#define ADDR_FLASH_PAGE_59    ((uint32_t)0x0801D800) /* Base @ of Page 59, 2 Kbytes */
+#define ADDR_FLASH_PAGE_60    ((uint32_t)0x0801E000) /* Base @ of Page 60, 2 Kbytes */
+#define ADDR_FLASH_PAGE_61    ((uint32_t)0x0801E800) /* Base @ of Page 61, 2 Kbytes */
+#define ADDR_FLASH_PAGE_62    ((uint32_t)0x0801F000) /* Base @ of Page 62, 2 Kbytes */
+#define ADDR_FLASH_PAGE_63    ((uint32_t)0x0801F800) /* Base @ of Page 63, 2 Kbytes */
+#define ADDR_FLASH_PAGE_64    ((uint32_t)0x08020000) /* Base @ of Page 64, 2 Kbytes */
+#define ADDR_FLASH_PAGE_65    ((uint32_t)0x08020800) /* Base @ of Page 65, 2 Kbytes */
+#define ADDR_FLASH_PAGE_66    ((uint32_t)0x08021000) /* Base @ of Page 66, 2 Kbytes */
+#define ADDR_FLASH_PAGE_67    ((uint32_t)0x08021800) /* Base @ of Page 67, 2 Kbytes */
+#define ADDR_FLASH_PAGE_68    ((uint32_t)0x08022000) /* Base @ of Page 68, 2 Kbytes */
+#define ADDR_FLASH_PAGE_69    ((uint32_t)0x08022800) /* Base @ of Page 69, 2 Kbytes */
+#define ADDR_FLASH_PAGE_70    ((uint32_t)0x08023000) /* Base @ of Page 70, 2 Kbytes */
+#define ADDR_FLASH_PAGE_71    ((uint32_t)0x08023800) /* Base @ of Page 71, 2 Kbytes */
+#define ADDR_FLASH_PAGE_72    ((uint32_t)0x08024000) /* Base @ of Page 72, 2 Kbytes */
+#define ADDR_FLASH_PAGE_73    ((uint32_t)0x08024800) /* Base @ of Page 73, 2 Kbytes */
+#define ADDR_FLASH_PAGE_74    ((uint32_t)0x08025000) /* Base @ of Page 74, 2 Kbytes */
+#define ADDR_FLASH_PAGE_75    ((uint32_t)0x08025800) /* Base @ of Page 75, 2 Kbytes */
+#define ADDR_FLASH_PAGE_76    ((uint32_t)0x08026000) /* Base @ of Page 76, 2 Kbytes */
+#define ADDR_FLASH_PAGE_77    ((uint32_t)0x08026800) /* Base @ of Page 77, 2 Kbytes */
+#define ADDR_FLASH_PAGE_78    ((uint32_t)0x08027000) /* Base @ of Page 78, 2 Kbytes */
+#define ADDR_FLASH_PAGE_79    ((uint32_t)0x08027800) /* Base @ of Page 79, 2 Kbytes */
+#define ADDR_FLASH_PAGE_80    ((uint32_t)0x08028000) /* Base @ of Page 80, 2 Kbytes */
+#define ADDR_FLASH_PAGE_81    ((uint32_t)0x08028800) /* Base @ of Page 81, 2 Kbytes */
+#define ADDR_FLASH_PAGE_82    ((uint32_t)0x08029000) /* Base @ of Page 82, 2 Kbytes */
+#define ADDR_FLASH_PAGE_83    ((uint32_t)0x08029800) /* Base @ of Page 83, 2 Kbytes */
+#define ADDR_FLASH_PAGE_84    ((uint32_t)0x0802A000) /* Base @ of Page 84, 2 Kbytes */
+#define ADDR_FLASH_PAGE_85    ((uint32_t)0x0802A800) /* Base @ of Page 85, 2 Kbytes */
+#define ADDR_FLASH_PAGE_86    ((uint32_t)0x0802B000) /* Base @ of Page 86, 2 Kbytes */
+#define ADDR_FLASH_PAGE_87    ((uint32_t)0x0802B800) /* Base @ of Page 87, 2 Kbytes */
+#define ADDR_FLASH_PAGE_88    ((uint32_t)0x0802C000) /* Base @ of Page 88, 2 Kbytes */
+#define ADDR_FLASH_PAGE_89    ((uint32_t)0x0802C800) /* Base @ of Page 89, 2 Kbytes */
+#define ADDR_FLASH_PAGE_90    ((uint32_t)0x0802D000) /* Base @ of Page 90, 2 Kbytes */
+#define ADDR_FLASH_PAGE_91    ((uint32_t)0x0802D800) /* Base @ of Page 91, 2 Kbytes */
+#define ADDR_FLASH_PAGE_92    ((uint32_t)0x0802E000) /* Base @ of Page 92, 2 Kbytes */
+#define ADDR_FLASH_PAGE_93    ((uint32_t)0x0802E800) /* Base @ of Page 93, 2 Kbytes */
+#define ADDR_FLASH_PAGE_94    ((uint32_t)0x0802F000) /* Base @ of Page 94, 2 Kbytes */
+#define ADDR_FLASH_PAGE_95    ((uint32_t)0x0802F800) /* Base @ of Page 95, 2 Kbytes */
+#define ADDR_FLASH_PAGE_96    ((uint32_t)0x08030000) /* Base @ of Page 96, 2 Kbytes */
+#define ADDR_FLASH_PAGE_97    ((uint32_t)0x08030800) /* Base @ of Page 97, 2 Kbytes */
+#define ADDR_FLASH_PAGE_98    ((uint32_t)0x08031000) /* Base @ of Page 98, 2 Kbytes */
+#define ADDR_FLASH_PAGE_99    ((uint32_t)0x08031800) /* Base @ of Page 99, 2 Kbytes */
+#define ADDR_FLASH_PAGE_100   ((uint32_t)0x08032000) /* Base @ of Page 100, 2 Kbytes */
+#define ADDR_FLASH_PAGE_101   ((uint32_t)0x08032800) /* Base @ of Page 101, 2 Kbytes */
+#define ADDR_FLASH_PAGE_102   ((uint32_t)0x08033000) /* Base @ of Page 102, 2 Kbytes */
+#define ADDR_FLASH_PAGE_103   ((uint32_t)0x08033800) /* Base @ of Page 103, 2 Kbytes */
+#define ADDR_FLASH_PAGE_104   ((uint32_t)0x08034000) /* Base @ of Page 104, 2 Kbytes */
+#define ADDR_FLASH_PAGE_105   ((uint32_t)0x08034800) /* Base @ of Page 105, 2 Kbytes */
+#define ADDR_FLASH_PAGE_106   ((uint32_t)0x08035000) /* Base @ of Page 106, 2 Kbytes */
+#define ADDR_FLASH_PAGE_107   ((uint32_t)0x08035800) /* Base @ of Page 107, 2 Kbytes */
+#define ADDR_FLASH_PAGE_108   ((uint32_t)0x08036000) /* Base @ of Page 108, 2 Kbytes */
+#define ADDR_FLASH_PAGE_109   ((uint32_t)0x08036800) /* Base @ of Page 109, 2 Kbytes */
+#define ADDR_FLASH_PAGE_110   ((uint32_t)0x08037000) /* Base @ of Page 110, 2 Kbytes */
+#define ADDR_FLASH_PAGE_111   ((uint32_t)0x08037800) /* Base @ of Page 111, 2 Kbytes */
+#define ADDR_FLASH_PAGE_112   ((uint32_t)0x08038000) /* Base @ of Page 112, 2 Kbytes */
+#define ADDR_FLASH_PAGE_113   ((uint32_t)0x08038800) /* Base @ of Page 113, 2 Kbytes */
+#define ADDR_FLASH_PAGE_114   ((uint32_t)0x08039000) /* Base @ of Page 114, 2 Kbytes */
+#define ADDR_FLASH_PAGE_115   ((uint32_t)0x08039800) /* Base @ of Page 115, 2 Kbytes */
+#define ADDR_FLASH_PAGE_116   ((uint32_t)0x0803A000) /* Base @ of Page 116, 2 Kbytes */
+#define ADDR_FLASH_PAGE_117   ((uint32_t)0x0803A800) /* Base @ of Page 117, 2 Kbytes */
+#define ADDR_FLASH_PAGE_118   ((uint32_t)0x0803B000) /* Base @ of Page 118, 2 Kbytes */
+#define ADDR_FLASH_PAGE_119   ((uint32_t)0x0803B800) /* Base @ of Page 119, 2 Kbytes */
+#define ADDR_FLASH_PAGE_120   ((uint32_t)0x0803C000) /* Base @ of Page 120, 2 Kbytes */
+#define ADDR_FLASH_PAGE_121   ((uint32_t)0x0803C800) /* Base @ of Page 121, 2 Kbytes */
+#define ADDR_FLASH_PAGE_122   ((uint32_t)0x0803D000) /* Base @ of Page 122, 2 Kbytes */
+#define ADDR_FLASH_PAGE_123   ((uint32_t)0x0803D800) /* Base @ of Page 123, 2 Kbytes */
+#define ADDR_FLASH_PAGE_124   ((uint32_t)0x0803E000) /* Base @ of Page 124, 2 Kbytes */
+#define ADDR_FLASH_PAGE_125   ((uint32_t)0x0803E800) /* Base @ of Page 125, 2 Kbytes */
+#define ADDR_FLASH_PAGE_126   ((uint32_t)0x0803F000) /* Base @ of Page 126, 2 Kbytes */
+#define ADDR_FLASH_PAGE_127   ((uint32_t)0x0803F800) /* Base @ of Page 127, 2 Kbytes */
 
 /* Define the size of the sectors to be used */
-#define PAGE_SIZE               (uint32_t)0x4000  /* Page size = 16KByte */
-
-/* Device voltage range supposed to be [2.7V to 3.6V], the operation will 
-   be done by word  */
-#define VOLTAGE_RANGE           (uint8_t)VOLTAGE_RANGE_3
+#define PAGE_SIZE               (uint32_t)FLASH_PAGE_SIZE  /* Page size */
 
 /* EEPROM start address in Flash */
-#define EEPROM_START_ADDRESS  ((uint32_t)0x08008000) /* EEPROM emulation start address:
-                                                  from sector2 : after 16KByte of used 
-                                                  Flash memory */
+#define EEPROM_START_ADDRESS  ((uint32_t)ADDR_FLASH_PAGE_16) /* EEPROM emulation start address */
 
 /* Pages 0 and 1 base and end addresses */
 #define PAGE0_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x0000))
 #define PAGE0_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (PAGE_SIZE - 1)))
-#define PAGE0_ID               FLASH_SECTOR_2
 
-#define PAGE1_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x4000))
-#define PAGE1_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + (2 * PAGE_SIZE - 1)))
-#define PAGE1_ID               FLASH_SECTOR_3
+#define PAGE1_BASE_ADDRESS    ((uint32_t)(ADDR_FLASH_PAGE_48))
+#define PAGE1_END_ADDRESS     ((uint32_t)(ADDR_FLASH_PAGE_48 + PAGE_SIZE - 1))
 
 /* Used Flash pages for EEPROM emulation */
 #define PAGE0                 ((uint16_t)0x0000)
-#define PAGE1                 ((uint16_t)0x0001) /* Page nb between PAGE0_BASE_ADDRESS & PAGE1_BASE_ADDRESS*/
+#define PAGE1                 ((uint16_t)32) /* Page nb between PAGE0_BASE_ADDRESS & PAGE1_BASE_ADDRESS*/
 
 /* No valid page define */
 #define NO_VALID_PAGE         ((uint16_t)0x00AB)