Index: ctrl/firmware/Main/CubeMX/Core/Inc/stm32h7xx_it.h
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Inc/stm32h7xx_it.h	(revision 81)
+++ ctrl/firmware/Main/CubeMX/Core/Inc/stm32h7xx_it.h	(revision 82)
@@ -67,4 +67,5 @@
 void TIM7_IRQHandler(void);
 void SPI4_IRQHandler(void);
+void MDMA_IRQHandler(void);
 void USART10_IRQHandler(void);
 /* USER CODE BEGIN EFP */
Index: ctrl/firmware/Main/CubeMX/Core/Src/main.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/main.c	(revision 81)
+++ ctrl/firmware/Main/CubeMX/Core/Src/main.c	(revision 82)
@@ -22,4 +22,5 @@
 #include "dma.h"
 #include "fatfs.h"
+#include "mdma.h"
 #include "memorymap.h"
 #include "rtc.h"
@@ -105,5 +106,5 @@
   /* USER CODE BEGIN Init */
 
-  SCB_DisableDCache();
+  //SCB_DisableDCache();
 
   /* USER CODE END Init */
@@ -124,4 +125,5 @@
   MX_GPIO_Init();
   MX_DMA_Init();
+  MX_MDMA_Init();
   MX_RTC_Init();
   MX_SPI4_Init();
@@ -280,4 +282,16 @@
 
   HAL_MPU_ConfigRegion(&MPU_InitStruct);
+
+  /** Initializes and configures the Region and the memory to be protected
+  */
+  MPU_InitStruct.Number = MPU_REGION_NUMBER1;
+  MPU_InitStruct.BaseAddress = 0x24000000;
+  MPU_InitStruct.Size = MPU_REGION_SIZE_128KB;
+  MPU_InitStruct.SubRegionDisable = 0x0;
+  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL1;
+  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
+  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
+
+  HAL_MPU_ConfigRegion(&MPU_InitStruct);
   /* Enables the MPU */
   HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);
Index: ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c	(revision 81)
+++ ctrl/firmware/Main/CubeMX/Core/Src/stm32h7xx_it.c	(revision 82)
@@ -25,5 +25,6 @@
 
 #include "FreeRTOS.h"
-#include "semphr.h"
+#include "modbus.h"
+//#include "semphr.h"
 
 /* USER CODE END Includes */
@@ -60,4 +61,5 @@
 
 /* External variables --------------------------------------------------------*/
+extern MDMA_HandleTypeDef hmdma_mdma_channel0_sdmmc1_end_data_0;
 extern SD_HandleTypeDef hsd1;
 extern DMA_HandleTypeDef hdma_spi2_rx;
@@ -374,4 +376,18 @@
 
 /**
+  * @brief This function handles MDMA global interrupt.
+  */
+void MDMA_IRQHandler(void)
+{
+  /* USER CODE BEGIN MDMA_IRQn 0 */
+
+  /* USER CODE END MDMA_IRQn 0 */
+  HAL_MDMA_IRQHandler(&hmdma_mdma_channel0_sdmmc1_end_data_0);
+  /* USER CODE BEGIN MDMA_IRQn 1 */
+
+  /* USER CODE END MDMA_IRQn 1 */
+}
+
+/**
   * @brief This function handles USART10 global interrupt.
   */
@@ -379,4 +395,8 @@
 {
   /* USER CODE BEGIN USART10_IRQn 0 */
+  extern modbus_t lb_mbData;
+  MODBUS_UART_IRQHandler(&huart10, &lb_mbData);
+  return;
+
 
   /* USER CODE END USART10_IRQn 0 */
Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 81)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 82)
@@ -3,8 +3,13 @@
 CAD.pinconfig=Dual
 CAD.provider=
+CORTEX_M7.AccessPermission_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=MPU_REGION_FULL_ACCESS
+CORTEX_M7.BaseAddress_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=0x24000000
 CORTEX_M7.CPU_DCache=Enabled
 CORTEX_M7.CPU_ICache=Enabled
-CORTEX_M7.Enable_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=__NULL
-CORTEX_M7.IPParameters=default_mode_Activation,CPU_ICache,CPU_DCache,Enable_S-Cortex_Memory_Protection_Unit_Region1_Settings_S
+CORTEX_M7.DisableExec_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=MPU_INSTRUCTION_ACCESS_DISABLE
+CORTEX_M7.Enable_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=MPU_REGION_ENABLE
+CORTEX_M7.IPParameters=default_mode_Activation,CPU_ICache,CPU_DCache,Enable_S-Cortex_Memory_Protection_Unit_Region1_Settings_S,BaseAddress_S-Cortex_Memory_Protection_Unit_Region1_Settings_S,Size_S-Cortex_Memory_Protection_Unit_Region1_Settings_S,TypeExtField_S-Cortex_Memory_Protection_Unit_Region1_Settings_S,AccessPermission_S-Cortex_Memory_Protection_Unit_Region1_Settings_S,DisableExec_S-Cortex_Memory_Protection_Unit_Region1_Settings_S
+CORTEX_M7.Size_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=MPU_REGION_SIZE_128KB
+CORTEX_M7.TypeExtField_S-Cortex_Memory_Protection_Unit_Region1_Settings_S=MPU_TEX_LEVEL1
 CORTEX_M7.default_mode_Activation=1
 Dma.Request0=SPI4_TX
@@ -105,9 +110,10 @@
 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
+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._FS_EXFAT=0
 FATFS._FS_NORTC=0
 FATFS._FS_REENTRANT=1
 FATFS._LFN_UNICODE=0
+FATFS._MAX_SS=512
 FATFS._MULTI_PARTITION=0
 FATFS._NORTC_MDAY=1
@@ -204,21 +210,22 @@
 Mcu.IP0=CORTEX_M7
 Mcu.IP1=DEBUG
-Mcu.IP10=SPI2
-Mcu.IP11=SPI4
-Mcu.IP12=SYS
-Mcu.IP13=TIM3
-Mcu.IP14=TIM8
-Mcu.IP15=USART2
-Mcu.IP16=USART3
-Mcu.IP17=USART10
+Mcu.IP10=SDMMC1
+Mcu.IP11=SPI2
+Mcu.IP12=SPI4
+Mcu.IP13=SYS
+Mcu.IP14=TIM3
+Mcu.IP15=TIM8
+Mcu.IP16=USART2
+Mcu.IP17=USART3
+Mcu.IP18=USART10
 Mcu.IP2=DMA
 Mcu.IP3=FATFS
 Mcu.IP4=FREERTOS
-Mcu.IP5=MEMORYMAP
-Mcu.IP6=NVIC
-Mcu.IP7=RCC
-Mcu.IP8=RTC
-Mcu.IP9=SDMMC1
-Mcu.IPNb=18
+Mcu.IP5=MDMA
+Mcu.IP6=MEMORYMAP
+Mcu.IP7=NVIC
+Mcu.IP8=RCC
+Mcu.IP9=RTC
+Mcu.IPNb=19
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
@@ -288,4 +295,31 @@
 Mcu.UserConstants=
 Mcu.UserName=STM32H723ZETx
+Mdma.MDMA_Channel0.Request0=SDMMC1_END_DATA
+Mdma.MDMA_Channel0.RequestsNb=1
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.BlockCount=4
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.BlockDataLength=512
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.BufferTransferLength=2048
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.CircularMode=MDMA_LINEAR_LIST
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.DataAlignment=MDMA_DATAALIGN_PACKENABLE
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.DestBlockAddressOffset=0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.DestBurst=MDMA_DEST_BURST_4BEATS
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.DestDataSize=MDMA_DEST_DATASIZE_WORD
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.DestinationInc=MDMA_DEST_INC_WORD
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.DstAddress=0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.Endianness=MDMA_LITTLE_ENDIANNESS_PRESERVE
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.Instance=MDMA_Channel0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.MaskAddress=0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.MaskData=0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.Priority=MDMA_PRIORITY_HIGH
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.Rank=First
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.RequestParameters=Instance,CircularMode,TransferTriggerMode,Priority,Endianness,SourceInc,DestinationInc,SourceDataSize,DestDataSize,DataAlignment,BufferTransferLength,SourceBurst,DestBurst,SourceBlockAddressOffset,DestBlockAddressOffset,MaskAddress,MaskData,SrcAddress,DstAddress,BlockDataLength,BlockCount,Rank
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.SourceBlockAddressOffset=0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.SourceBurst=MDMA_SOURCE_BURST_4BEATS
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.SourceDataSize=MDMA_SRC_DATASIZE_WORD
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.SourceInc=MDMA_SRC_INC_WORD
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.SrcAddress=0
+Mdma.MDMA_Channel0.SDMMC1_END_DATA.0.TransferTriggerMode=MDMA_BUFFER_TRANSFER
+Mdma.RequestSet0=MDMA_Channel0
+Mdma.RequestSetsNb=1
 MxCube.Version=6.13.0
 MxDb.Version=DB.6.0.130
@@ -300,4 +334,5 @@
 NVIC.ForceEnableDMAVector=true
 NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
+NVIC.MDMA_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
 NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
 NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false
@@ -544,5 +579,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_RTC_Init-RTC-false-HAL-true,4-MX_SPI4_Init-SPI4-false-HAL-true,5-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,7-MX_TIM3_Init-TIM3-false-HAL-true,8-SystemClock_Config-RCC-false-HAL-false,9-MX_FATFS_Init-FATFS-false-HAL-false,10-MX_TIM8_Init-TIM8-false-HAL-true,11-MX_SPI2_Init-SPI2-false-HAL-true,12-MX_USART2_UART_Init-USART2-false-HAL-true,13-MX_USART10_UART_Init-USART10-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,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
 RCC.ADCFreq_Value=125000000
 RCC.AHB12Freq_Value=100000000
