Index: ctrl/firmware/Main/CubeMX/FATFS/App/fatfs.c
===================================================================
--- ctrl/firmware/Main/CubeMX/FATFS/App/fatfs.c	(revision 89)
+++ ctrl/firmware/Main/CubeMX/FATFS/App/fatfs.c	(revision 90)
@@ -23,10 +23,11 @@
 FATFS SDFatFS;    /* File system object for SD logical drive */
 FIL SDFile;       /* File object for SD */
+
+/* USER CODE BEGIN Variables */
+
 uint8_t retEEPROM;    /* Return value for USER */
 char EEPROMPath[4];   /* USER logical drive path */
-FATFS USERFatFS;    /* File system object for USER logical drive */
+FATFS EEPROMFatFS;	  /* File system object for USER logical drive */
 FIL EEPROMFile;       /* File object for USER */
-
-/* USER CODE BEGIN Variables */
 
 /* USER CODE END Variables */
@@ -36,9 +37,10 @@
   /*## FatFS: Link the SD driver ###########################*/
   retSD = FATFS_LinkDriver(&SD_Driver, SDPath);
-  /*## FatFS: Link the USER driver ###########################*/
-  retEEPROM = FATFS_LinkDriver(&EEPROM_Driver, EEPROMPath);
 
   /* USER CODE BEGIN Init */
   /* additional user code for init */
+
+  retEEPROM = FATFS_LinkDriver(&EEPROM_Driver, EEPROMPath);
+
   /* USER CODE END Init */
 }
Index: ctrl/firmware/Main/CubeMX/FATFS/App/fatfs.h
===================================================================
--- ctrl/firmware/Main/CubeMX/FATFS/App/fatfs.h	(revision 89)
+++ ctrl/firmware/Main/CubeMX/FATFS/App/fatfs.h	(revision 90)
@@ -27,18 +27,20 @@
 #include "ff_gen_drv.h"
 #include "sd_diskio.h" /* defines SD_Driver as external */
-#include "eeprom_diskio.h" /* defines USER_Driver as external */
 
 /* USER CODE BEGIN Includes */
 
+#include "eeprom_diskio.h" /* defines USER_Driver as external */
+
+extern uint8_t retEEPROM;	/* Return value for USER */
+extern char EEPROMPath[4];	/* USER logical drive path */
+extern FATFS EEPROMFatFS;	/* File system object for USER logical drive */
+extern FIL EEPROMFile;		/* File object for USER */
+
 /* USER CODE END Includes */
 
-extern uint8_t retSD; /* Return value for SD */
-extern char SDPath[4]; /* SD logical drive path */
-extern FATFS SDFatFS; /* File system object for SD logical drive */
-extern FIL SDFile; /* File object for SD */
-extern uint8_t retEEPROM; /* Return value for USER */
-extern char EEPROMPath[4]; /* USER logical drive path */
-extern FATFS EEPROMFatFS; /* File system object for USER logical drive */
-extern FIL EEPROMFile; /* File object for USER */
+extern uint8_t retSD;	/* Return value for SD */
+extern char SDPath[4];	/* SD logical drive path */
+extern FATFS SDFatFS;	/* File system object for SD logical drive */
+extern FIL SDFile;		/* File object for SD */
 
 void MX_FATFS_Init(void);
Index: ctrl/firmware/Main/CubeMX/FATFS/Target/eeprom_diskio.c
===================================================================
--- ctrl/firmware/Main/CubeMX/FATFS/Target/eeprom_diskio.c	(revision 89)
+++ ctrl/firmware/Main/CubeMX/FATFS/Target/eeprom_diskio.c	(revision 90)
@@ -34,6 +34,12 @@
 
 /* Includes ------------------------------------------------------------------*/
+#include <stdio.h>
 #include <string.h>
+
 #include "ff_gen_drv.h"
+
+#include "eeprom_diskio.h"
+#include "eeprom_conf.h"
+#include "m24256e.h"
 
 /* Private typedef -----------------------------------------------------------*/
@@ -44,5 +50,16 @@
 static volatile DSTATUS Stat = STA_NOINIT;
 
+uint8_t M24256E_CDA_DevSelCode = 0xB0;
+uint8_t M24256E_IDPage_DevSelCode = 0xB0;
+uint8_t M24256E_Memory_DevSelCode = 0xA0;
+
+static M24256E_EEPROM_CommonDrv_t *M24256EDrv[EEICA1_M24_INSTANCES_NBR];
+void *M24256ECompObj[EEICA1_M24_INSTANCES_NBR];
+
 /* USER CODE END DECL */
+
+static int32_t M24256E_Probe(void);
+int32_t M24256E_IsDeviceReady(uint32_t Instance, const uint32_t Trials);
+int32_t M24256E_ReadPage(uint32_t Instance, uint8_t * const pData, const uint32_t TarAddr, const uint16_t Size);
 
 /* Private function prototypes -----------------------------------------------*/
@@ -77,12 +94,17 @@
   * @retval DSTATUS: Operation status
   */
-DSTATUS EEPROM_initialize (
-	BYTE pdrv           /* Physical drive nmuber to identify the drive */
-)
-{
-  /* USER CODE BEGIN INIT */
+DSTATUS EEPROM_initialize (BYTE pdrv /* Physical drive nmuber to identify the drive */
+									  )
+{
+	/* USER CODE BEGIN INIT */
+	UNUSED(pdrv);																// We have only one EEPROM on the bus
+
     Stat = STA_NOINIT;
+
+	if (M24256E_Probe() == BSP_ERROR_NONE)
+		Stat = 0;
+
     return Stat;
-  /* USER CODE END INIT */
+	/* USER CODE END INIT */
 }
 
@@ -96,8 +118,13 @@
 )
 {
-  /* USER CODE BEGIN STATUS */
+	/* USER CODE BEGIN STATUS */
+	UNUSED(pdrv);																// We have only one EEPROM on the bus
     Stat = STA_NOINIT;
+
+	if (M24256E_IsDeviceReady(EEICA1_M24256E, MAX_TRIALS) == BSP_ERROR_NONE)
+		Stat = 0;
+
     return Stat;
-  /* USER CODE END STATUS */
+	/* USER CODE END STATUS */
 }
 
@@ -117,7 +144,13 @@
 )
 {
-  /* USER CODE BEGIN READ */
+	/* USER CODE BEGIN READ */
+	UNUSED(pdrv);
+	printf("Requested %u sectors starting at %lu.\n", count, sector);
+
+	if (M24256E_ReadPage(EEICA1_M24256E, buff, sector * _MIN_SS, count * _MIN_SS) != BSP_ERROR_NONE)
+		return RES_ERROR;
+
     return RES_OK;
-  /* USER CODE END READ */
+	/* USER CODE END READ */
 }
 
@@ -159,9 +192,158 @@
 )
 {
-  /* USER CODE BEGIN IOCTL */
+	/* USER CODE BEGIN IOCTL */
+	UNUSED(pdrv);
+
     DRESULT res = RES_ERROR;
+
+    if (Stat & STA_NOINIT) return RES_NOTRDY;
+
+    switch (cmd)
+    {
+		case CTRL_SYNC:	  // Make sure that no pending write process
+			res = RES_OK;
+			break;
+
+		case GET_SECTOR_COUNT:	  // Get number of sectors on the disk (DWORD)
+			*(DWORD*)buff = M24256E_MEMORYSIZE / _MIN_SS;
+			res = RES_OK;
+			break;
+
+		case GET_SECTOR_SIZE:	// Get R/W sector size (WORD)
+			*(WORD*)buff = _MIN_SS;
+			res = RES_OK;
+			break;
+
+
+		case GET_BLOCK_SIZE:	// Get erase block size in unit of sector (DWORD)
+			*(DWORD*)buff = 1;
+			res = RES_OK;
+			break;
+
+		default:
+			res = RES_PARERR;
+    }
+
     return res;
-  /* USER CODE END IOCTL */
+	/* USER CODE END IOCTL */
 }
 #endif /* _USE_IOCTL == 1 */
 
+//------------------------------------------------------------------------------
+
+/**
+* @brief  Reads complete page from the memory at page start address
+* @param  Instance : I2C EEPROM instance to be used
+* @param  pData   : pointer to the data to read
+* @param  TarAddr : starting page address to read
+* @param  Size    : Size in bytes of the value to be written
+* @retval BSP status
+*/
+int32_t M24256E_ReadPage(uint32_t Instance, uint8_t * const pData, const uint32_t TarAddr, const uint16_t Size)
+{
+  int32_t ret = BSP_ERROR_NONE;
+
+  if ((TarAddr + Size)> M24256E_MEMORYSIZE)
+    return BSP_ERROR_WRONG_PARAM;
+
+  uint32_t iNumberOfPage = (TarAddr + Size) / M24256E_PAGESIZE;
+  uint32_t iRemainder = (TarAddr + Size) % M24256E_PAGESIZE;
+
+  uint32_t PageAddress = TarAddr * M24256E_PAGESIZE;
+  uint32_t iPageNumber = TarAddr;
+  if (iRemainder != 0U)
+  {
+    iNumberOfPage += 1U;
+  }
+
+  if (iNumberOfPage <= 1U)
+  {
+    if (M24256EDrv[Instance]->ReadPage(M24256ECompObj[Instance], pData, PageAddress, M24256E_PAGESIZE) != BSP_ERROR_NONE)
+    {
+      ret = BSP_ERROR_COMPONENT_FAILURE;
+    }
+    else
+    {
+      ret = BSP_ERROR_NONE;
+    }
+  }
+  else
+  {
+    for (uint32_t iCounter=0; iCounter<iNumberOfPage; iCounter++)
+    {
+      uint32_t iPageAddress = iPageNumber * M24256E_PAGESIZE;
+      ret = M24256EDrv[Instance]->ReadPage(M24256ECompObj[Instance], &pData[0U + (iCounter*M24256E_PAGESIZE)], iPageAddress, M24256E_PAGESIZE);
+      iPageNumber++;
+      HAL_Delay(5);
+    }
+  }
+
+  return ret;
+}
+
+//------------------------------------------------------------------------------
+
+/**
+* @brief  Checks if the memory is available
+* @param  Instance : I2C EEPROM instance to be used
+* @param  Trials : Number of trials
+* @retval BSP status
+*/
+int32_t M24256E_IsDeviceReady(uint32_t Instance, const uint32_t Trials)
+{
+    int32_t ret;
+
+    if (M24256EDrv[Instance]->IsReady(M24256ECompObj[Instance], Trials) != BSP_ERROR_NONE)
+    {
+      ret = BSP_ERROR_COMPONENT_FAILURE;
+    }
+    else
+    {
+      ret = BSP_ERROR_NONE;
+    }
+    return ret;
+}
+
+//------------------------------------------------------------------------------
+
+/**
+* @brief  Register Bus IOs for instance M24256E
+* @retval BSP status
+*/
+static int32_t M24256E_Probe(void)
+{
+    M24256E_IO_t io_ctx256;
+    int32_t ret = BSP_ERROR_NONE;
+    static M24256E_Object_t M24256_obj_0;
+
+    io_ctx256.Address     = M24256E_CDA_DevSelCode;
+    io_ctx256.Init        = EEICA1_I2C_INIT;
+    io_ctx256.DeInit      = EEICA1_I2C_DEINIT;
+    io_ctx256.ReadReg     = EEICA1_I2C_READREG;
+    io_ctx256.WriteReg    = EEICA1_I2C_WRITEREG;
+    io_ctx256.ReadReg16   = EEICA1_I2C_READREG16;
+    io_ctx256.WriteReg16  = EEICA1_I2C_WRITEREG16;
+    io_ctx256.Transmit    = EEICA1_I2C_SEND;
+    io_ctx256.IsReady     = EEICA1_I2C_ISREADY;
+    io_ctx256.Delay       = EEICA1_M24_DELAY;
+
+    if (M24256E_RegisterBusIO(&M24256_obj_0, &io_ctx256) != M24_OK)
+    {
+		ret = BSP_ERROR_UNKNOWN_COMPONENT;
+    }
+
+    M24256ECompObj[EEICA1_M24256E] = &M24256_obj_0;
+    M24256EDrv[EEICA1_M24256E] = (M24256E_EEPROM_CommonDrv_t *)(void *)&M24256E_i2c_Drv;
+
+    if (M24256EDrv[EEICA1_M24256E]->Init(M24256ECompObj[EEICA1_M24256E]) != M24_OK)
+    {
+		ret = BSP_ERROR_COMPONENT_FAILURE;
+    }
+    else
+    {
+		ret = BSP_ERROR_NONE;
+    }
+    return ret;
+}
+
+//------------------------------------------------------------------------------
Index: ctrl/firmware/Main/CubeMX/FATFS/Target/eeprom_diskio.h
===================================================================
--- ctrl/firmware/Main/CubeMX/FATFS/Target/eeprom_diskio.h	(revision 89)
+++ ctrl/firmware/Main/CubeMX/FATFS/Target/eeprom_diskio.h	(revision 90)
@@ -32,4 +32,14 @@
 /* Exported types ------------------------------------------------------------*/
 /* Exported constants --------------------------------------------------------*/
+
+#define M24256E_PAGESIZE					64U
+#define M24256E_MEMORYSIZE					32768U // in bytes, do not change
+
+#define EEICA1_M24_INSTANCES_NBR			2U
+#define EEICA1_M24256E						0U
+#define EEICA1_M24xx						1U
+
+#define MAX_TRIALS							3U
+
 /* Exported functions ------------------------------------------------------- */
 extern Diskio_drvTypeDef  EEPROM_Driver;
Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 89)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 90)
@@ -110,5 +110,5 @@
 Dma.USART3_TX.2.SyncSignalID=NONE
 FATFS.BSP.number=1
-FATFS.IPParameters=_USE_FIND,_USE_EXPAND,_USE_LABEL,_USE_LFN,_LFN_UNICODE,_MULTI_PARTITION,_FS_EXFAT,_USE_MUTEX,_FS_REENTRANT,_FS_NORTC,_NORTC_YEAR,_NORTC_MDAY,_NORTC_MON,_STRF_ENCODE,_USE_STRFUNC,_MAX_SS
+FATFS.IPParameters=_USE_FIND,_USE_EXPAND,_USE_LABEL,_USE_LFN,_LFN_UNICODE,_MULTI_PARTITION,_FS_EXFAT,_USE_MUTEX,_FS_REENTRANT,_FS_NORTC,_NORTC_YEAR,_NORTC_MDAY,_NORTC_MON,_STRF_ENCODE,_USE_STRFUNC,_MAX_SS,_VOLUMES
 FATFS._FS_EXFAT=0
 FATFS._FS_NORTC=0
@@ -127,4 +127,5 @@
 FATFS._USE_MUTEX=1
 FATFS._USE_STRFUNC=0
+FATFS._VOLUMES=2
 FATFS0.BSP.STBoard=false
 FATFS0.BSP.api=Unknown
@@ -289,15 +290,15 @@
 Mcu.Pin55=PB9
 Mcu.Pin56=VP_FATFS_VS_SDIO
-Mcu.Pin57=VP_FATFS_VS_Generic
-Mcu.Pin58=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin59=VP_RTC_VS_RTC_Activate
+Mcu.Pin57=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin58=VP_RTC_VS_RTC_Activate
+Mcu.Pin59=VP_RTC_VS_RTC_Calendar
 Mcu.Pin6=PF1
-Mcu.Pin60=VP_RTC_VS_RTC_Calendar
-Mcu.Pin61=VP_SYS_VS_tim7
-Mcu.Pin62=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin63=VP_TIM6_VS_ClockSourceINT
-Mcu.Pin64=VP_TIM8_VS_ControllerModeReset
-Mcu.Pin65=VP_TIM8_VS_ClockSourceINT
-Mcu.Pin66=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin60=VP_SYS_VS_tim7
+Mcu.Pin61=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin62=VP_TIM6_VS_ClockSourceINT
+Mcu.Pin63=VP_TIM8_VS_ControllerModeReset
+Mcu.Pin64=VP_TIM8_VS_ClockSourceINT
+Mcu.Pin65=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin66=VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0
 Mcu.Pin7=PH0-OSC_IN
 Mcu.Pin8=PH1-OSC_OUT
@@ -305,5 +306,6 @@
 Mcu.PinsNb=67
 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0
-Mcu.ThirdPartyNb=1
+Mcu.ThirdParty1=STMicroelectronics.X-CUBE-EEPRMA1.5.1.0
+Mcu.ThirdPartyNb=2
 Mcu.UserConstants=
 Mcu.UserName=STM32H723ZETx
@@ -617,5 +619,5 @@
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_MDMA_Init-MDMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SPI4_Init-SPI4-false-HAL-true,6-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,7-MX_USART3_UART_Init-USART3-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,9-SystemClock_Config-RCC-false-HAL-false,10-MX_FATFS_Init-FATFS-false-HAL-false,11-MX_TIM8_Init-TIM8-false-HAL-true,12-MX_SPI2_Init-SPI2-false-HAL-true,13-MX_USART2_UART_Init-USART2-false-HAL-true,14-MX_USART10_UART_Init-USART10-false-HAL-true,15-MX_TIM6_Init-TIM6-false-HAL-true,16-MX_I2C1_Init-I2C1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
+ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-MX_MDMA_Init-MDMA-false-HAL-true,4-MX_RTC_Init-RTC-false-HAL-true,5-MX_SPI4_Init-SPI4-false-HAL-true,6-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,7-MX_USART3_UART_Init-USART3-false-HAL-true,8-MX_TIM3_Init-TIM3-false-HAL-true,9-SystemClock_Config-RCC-false-HAL-false,10-MX_FATFS_Init-FATFS-false-HAL-false,11-MX_TIM8_Init-TIM8-false-HAL-true,12-MX_SPI2_Init-SPI2-false-HAL-true,13-MX_USART2_UART_Init-USART2-false-HAL-true,14-MX_USART10_UART_Init-USART10-false-HAL-true,15-MX_TIM6_Init-TIM6-false-HAL-true,16-MX_I2C1_Init-I2C1-false-HAL-true,17-MX_I2C2_Init-I2C2-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
 RCC.ADCFreq_Value=125000000
 RCC.AHB12Freq_Value=100000000
@@ -758,4 +760,9 @@
 STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0_IsAnAzureRtosMw=true
 STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0_SwParameter=InterfacesCcFileOoSystemJjFileXOoSDOointerface\:true;ThreadXCcRTOSJjThreadXJjLowOoPowerOosupport\:true;FileXCcFileOoSystemJjFileXJjCore\:true;ThreadXCcRTOSJjThreadXJjCore\:true;
+STMicroelectronics.X-CUBE-EEPRMA1.5.1.0.BoardOoPartJjEEPROM_Checked=true
+STMicroelectronics.X-CUBE-EEPRMA1.5.1.0.EEPROMCcBoardOoPartJjM24256EAaFJjM24256EAaF=true
+STMicroelectronics.X-CUBE-EEPRMA1.5.1.0.EEPROMCcBoardOoPartJjM24JjM24XX=true
+STMicroelectronics.X-CUBE-EEPRMA1.5.1.0.IPParameters=EEPROMCcBoardOoPartJjM24JjM24XX,EEPROMCcBoardOoPartJjM24256EAaFJjM24256EAaF
+STMicroelectronics.X-CUBE-EEPRMA1.5.1.0_SwParameter=EEPROMCcBoardOoPartJjM24JjM24XX\:true;EEPROMCcBoardOoPartJjM24256EAaFJjM24256EAaF\:true;
 TIM3.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_ENABLE
 TIM3.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2
@@ -784,6 +791,4 @@
 USART3.SwapParam=ADVFEATURE_SWAP_ENABLE
 USART3.VirtualMode-Asynchronous=VM_ASYNC
-VP_FATFS_VS_Generic.Mode=User_defined
-VP_FATFS_VS_Generic.Signal=FATFS_VS_Generic
 VP_FATFS_VS_SDIO.Mode=SDIO
 VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO
@@ -796,4 +801,6 @@
 VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
 VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
+VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0.Mode=BoardOoPartJjEEPROM
+VP_STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0.Signal=STMicroelectronics.X-CUBE-EEPRMA1_VS_BoardOoPartJjEEPROM_5.1.0_5.1.0
 VP_SYS_VS_tim7.Mode=TIM7
 VP_SYS_VS_tim7.Signal=SYS_VS_tim7
