From d72b1550784af992063ef5a56a802949782f1b58 Mon Sep 17 00:00:00 2001
From: Sergi Hernandez Juan <shernand@iri.upc.edu>
Date: Tue, 5 Sep 2017 00:41:20 +0200
Subject: [PATCH] Solved a problem with the EPPROM leveling algorithm when
 transfering from one bank to the other.

---
 include/eeprom.h | 4 ++--
 src/eeprom.c     | 9 +++++----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/include/eeprom.h b/include/eeprom.h
index 8648f39..efa2aa9 100755
--- a/include/eeprom.h
+++ b/include/eeprom.h
@@ -53,11 +53,11 @@
 /* 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              0x08000800
+#define PAGE0_ID              0x08000400
 
 #define PAGE1_BASE_ADDRESS    ((uint32_t)(EEPROM_START_ADDRESS + 0x0400))
 #define PAGE1_END_ADDRESS     ((uint32_t)(EEPROM_START_ADDRESS + 2*PAGE_SIZE - 1))
-#define PAGE1_ID              0x08001000
+#define PAGE1_ID              0x08000800
 
 /* Used Flash pages for EEPROM emulation */
 #define PAGE0                 ((uint16_t)0x0000)
diff --git a/src/eeprom.c b/src/eeprom.c
index 984ffc6..8efce03 100755
--- a/src/eeprom.c
+++ b/src/eeprom.c
@@ -637,7 +637,7 @@ static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
   HAL_StatusTypeDef flashstatus = HAL_OK;
   uint32_t newpageaddress = EEPROM_START_ADDRESS;
   uint32_t oldpageid = 0;
-  uint16_t validpage = PAGE0, varidx = 0;
+  uint16_t validpage = PAGE0, varidx = 0, address=0;
   uint16_t eepromstatus = 0, readstatus = 0;
   uint32_t page_error = 0;
   FLASH_EraseInitTypeDef s_eraseinit;
@@ -685,15 +685,16 @@ static uint16_t EE_PageTransfer(uint16_t VirtAddress, uint16_t Data)
   /* Transfer process: transfer variables from old to the new active page */
   for (varidx = 0; varidx < EEPROM_NUM_VAR; varidx++)
   {
-    if (eeprom_data[varidx] != VirtAddress)  /* Check each variable except the one passed as parameter */
+    address=((__IO uint16_t*)oldpageid)[1+varidx*2];
+    if (address != VirtAddress)  /* Check each variable except the one passed as parameter */
     {
       /* Read the other last variable updates */
-      readstatus = EE_ReadVariable(eeprom_data[varidx], &DataVar);
+      readstatus = EE_ReadVariable(address, &DataVar);
       /* In case variable corresponding to the virtual address was found */
       if (readstatus != 0x1)
       {
         /* Transfer the variable to the new active page */
-        eepromstatus = EE_VerifyPageFullWriteVariable(eeprom_data[varidx], DataVar);
+        eepromstatus = EE_VerifyPageFullWriteVariable(address, DataVar);
         /* If program operation was failed, a Flash error code is returned */
         if (eepromstatus != HAL_OK)
         {
-- 
GitLab