Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 73)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 74)
@@ -1,5 +1,5 @@
 #MicroXplorer Configuration settings - do not modify
-CAD.formats=
-CAD.pinconfig=
+CAD.formats=[]
+CAD.pinconfig=Dual
 CAD.provider=
 CORTEX_M7.CPU_DCache=Enabled
@@ -66,4 +66,29 @@
 Dma.USART3_TX.2.SyncRequestNumber=1
 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
+FATFS._FS_EXFAT=1
+FATFS._FS_NORTC=1
+FATFS._FS_REENTRANT=0
+FATFS._LFN_UNICODE=1
+FATFS._MULTI_PARTITION=0
+FATFS._NORTC_MDAY=1
+FATFS._NORTC_MON=1
+FATFS._NORTC_YEAR=2025
+FATFS._USE_EXPAND=1
+FATFS._USE_FIND=1
+FATFS._USE_LABEL=1
+FATFS._USE_LFN=2
+FATFS._USE_MUTEX=1
+FATFS0.BSP.STBoard=false
+FATFS0.BSP.api=Unknown
+FATFS0.BSP.component=
+FATFS0.BSP.condition=
+FATFS0.BSP.instance=PA8
+FATFS0.BSP.ip=GPIO
+FATFS0.BSP.mode=Input
+FATFS0.BSP.name=Detect_SDIO
+FATFS0.BSP.semaphore=
+FATFS0.BSP.solution=PA8
 FREERTOS.FootprintOK=true
 FREERTOS.INCLUDE_uxTaskGetStackHighWaterMark2=1
@@ -79,5 +104,59 @@
 GPIO.groupedBy=Group By Peripherals
 KeepUserPlacement=false
-MMTAppRegionsCount=0
+MMTAppReg1.MEMORYMAP.AppRegionName=DTCMRAM
+MMTAppReg1.MEMORYMAP.Cacheability=WBRAWA
+MMTAppReg1.MEMORYMAP.ContextName=Cortex-M7NS
+MMTAppReg1.MEMORYMAP.CoreName=Arm Cortex-M7
+MMTAppReg1.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability
+MMTAppReg1.MEMORYMAP.Name=DTCMRAM
+MMTAppReg1.MEMORYMAP.Size=131072
+MMTAppReg1.MEMORYMAP.StartAddress=0x20000000
+MMTAppReg2.MEMORYMAP.AppRegionName=RAM
+MMTAppReg2.MEMORYMAP.Cacheability=WBRAWA
+MMTAppReg2.MEMORYMAP.ContextName=Cortex-M7NS
+MMTAppReg2.MEMORYMAP.CoreName=Arm Cortex-M7
+MMTAppReg2.MEMORYMAP.DefaultDataRegion=true
+MMTAppReg2.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability,DefaultDataRegion
+MMTAppReg2.MEMORYMAP.Name=RAM
+MMTAppReg2.MEMORYMAP.Size=131072
+MMTAppReg2.MEMORYMAP.StartAddress=0x24000000
+MMTAppReg3.MEMORYMAP.AppRegionName=RAM_D2
+MMTAppReg3.MEMORYMAP.Cacheability=WBRAWA
+MMTAppReg3.MEMORYMAP.ContextName=Cortex-M7NS
+MMTAppReg3.MEMORYMAP.CoreName=Arm Cortex-M7
+MMTAppReg3.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability
+MMTAppReg3.MEMORYMAP.Name=RAM_D2
+MMTAppReg3.MEMORYMAP.Size=32768
+MMTAppReg3.MEMORYMAP.StartAddress=0x30000000
+MMTAppReg4.MEMORYMAP.AppRegionName=RAM_D3
+MMTAppReg4.MEMORYMAP.Cacheability=WBRAWA
+MMTAppReg4.MEMORYMAP.ContextName=Cortex-M7NS
+MMTAppReg4.MEMORYMAP.CoreName=Arm Cortex-M7
+MMTAppReg4.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability
+MMTAppReg4.MEMORYMAP.Name=RAM_D3
+MMTAppReg4.MEMORYMAP.Size=16384
+MMTAppReg4.MEMORYMAP.StartAddress=0x38000000
+MMTAppReg5.MEMORYMAP.AppRegionName=ITCMRAM
+MMTAppReg5.MEMORYMAP.Cacheability=WTRA
+MMTAppReg5.MEMORYMAP.ContextName=Cortex-M7NS
+MMTAppReg5.MEMORYMAP.CoreName=Arm Cortex-M7
+MMTAppReg5.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,ContextName,Name,Cacheability
+MMTAppReg5.MEMORYMAP.Name=ITCMRAM
+MMTAppReg5.MEMORYMAP.Size=65536
+MMTAppReg5.MEMORYMAP.StartAddress=0x00000000
+MMTAppReg6.MEMORYMAP.AP=RO_priv_only
+MMTAppReg6.MEMORYMAP.AppRegionName=FLASH
+MMTAppReg6.MEMORYMAP.Cacheability=WTRA
+MMTAppReg6.MEMORYMAP.ContextName=Cortex-M7NS
+MMTAppReg6.MEMORYMAP.CoreName=Arm Cortex-M7
+MMTAppReg6.MEMORYMAP.DefaultCodeRegion=true
+MMTAppReg6.MEMORYMAP.IPParameters=StartAddress,Size,CoreName,MemType,ContextName,Name,AP,Cacheability,DefaultCodeRegion,ISRRegion,RootBootRegion
+MMTAppReg6.MEMORYMAP.ISRRegion=true
+MMTAppReg6.MEMORYMAP.MemType=ROM
+MMTAppReg6.MEMORYMAP.Name=FLASH
+MMTAppReg6.MEMORYMAP.RootBootRegion=true
+MMTAppReg6.MEMORYMAP.Size=524288
+MMTAppReg6.MEMORYMAP.StartAddress=0x08000000
+MMTAppRegionsCount=6
 MMTConfigApplied=false
 Mcu.CPN=STM32H723ZET6
@@ -85,17 +164,18 @@
 Mcu.IP0=CORTEX_M7
 Mcu.IP1=DEBUG
-Mcu.IP10=SYS
-Mcu.IP11=TIM3
-Mcu.IP12=TIM8
-Mcu.IP13=USART3
+Mcu.IP10=SPI4
+Mcu.IP11=SYS
+Mcu.IP12=TIM3
+Mcu.IP13=TIM8
+Mcu.IP14=USART3
 Mcu.IP2=DMA
-Mcu.IP3=FREERTOS
-Mcu.IP4=MEMORYMAP
-Mcu.IP5=NVIC
-Mcu.IP6=RCC
-Mcu.IP7=RTC
-Mcu.IP8=SDMMC1
-Mcu.IP9=SPI4
-Mcu.IPNb=14
+Mcu.IP3=FATFS
+Mcu.IP4=FREERTOS
+Mcu.IP5=MEMORYMAP
+Mcu.IP6=NVIC
+Mcu.IP7=RCC
+Mcu.IP8=RTC
+Mcu.IP9=SDMMC1
+Mcu.IPNb=15
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
@@ -132,12 +212,14 @@
 Mcu.Pin36=PG13
 Mcu.Pin37=PG15
-Mcu.Pin38=VP_FREERTOS_VS_CMSIS_V2
-Mcu.Pin39=VP_RTC_VS_RTC_Activate
+Mcu.Pin38=VP_FATFS_VS_SDIO
+Mcu.Pin39=VP_FREERTOS_VS_CMSIS_V2
 Mcu.Pin4=PH1-OSC_OUT
-Mcu.Pin40=VP_SYS_VS_tim7
-Mcu.Pin41=VP_TIM3_VS_ClockSourceINT
-Mcu.Pin42=VP_TIM8_VS_ControllerModeReset
-Mcu.Pin43=VP_TIM8_VS_ClockSourceINT
-Mcu.Pin44=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.Pin40=VP_RTC_VS_RTC_Activate
+Mcu.Pin41=VP_RTC_VS_RTC_Calendar
+Mcu.Pin42=VP_SYS_VS_tim7
+Mcu.Pin43=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin44=VP_TIM8_VS_ControllerModeReset
+Mcu.Pin45=VP_TIM8_VS_ClockSourceINT
+Mcu.Pin46=VP_MEMORYMAP_VS_MEMORYMAP
 Mcu.Pin5=PF15
 Mcu.Pin6=PG0
@@ -145,5 +227,5 @@
 Mcu.Pin8=PE7
 Mcu.Pin9=PE11
-Mcu.PinsNb=45
+Mcu.PinsNb=47
 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0
 Mcu.ThirdPartyNb=1
@@ -337,5 +419,5 @@
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=true
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-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-MX_TIM8_Init-TIM8-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
+ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-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-MX_TIM8_Init-TIM8-false-HAL-true,10-MX_FATFS_Init-FATFS-false-HAL-false,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
 RCC.ADCFreq_Value=166666666.66666666
 RCC.AHB12Freq_Value=100000000
@@ -474,4 +556,6 @@
 USART3.SwapParam=ADVFEATURE_SWAP_ENABLE
 USART3.VirtualMode-Asynchronous=VM_ASYNC
+VP_FATFS_VS_SDIO.Mode=SDIO
+VP_FATFS_VS_SDIO.Signal=FATFS_VS_SDIO
 VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2
@@ -480,4 +564,6 @@
 VP_RTC_VS_RTC_Activate.Mode=RTC_Enabled
 VP_RTC_VS_RTC_Activate.Signal=RTC_VS_RTC_Activate
+VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar
+VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar
 VP_SYS_VS_tim7.Mode=TIM7
 VP_SYS_VS_tim7.Signal=SYS_VS_tim7
