Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 39)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 45)
@@ -7,4 +7,24 @@
 CORTEX_M7.IPParameters=default_mode_Activation,CPU_ICache,CPU_DCache
 CORTEX_M7.default_mode_Activation=1
+Dma.Request0=SPI4_TX
+Dma.RequestsNb=1
+Dma.SPI4_TX.0.Direction=DMA_MEMORY_TO_PERIPH
+Dma.SPI4_TX.0.EventEnable=DISABLE
+Dma.SPI4_TX.0.FIFOMode=DMA_FIFOMODE_DISABLE
+Dma.SPI4_TX.0.Instance=DMA1_Stream0
+Dma.SPI4_TX.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD
+Dma.SPI4_TX.0.MemInc=DMA_MINC_ENABLE
+Dma.SPI4_TX.0.Mode=DMA_NORMAL
+Dma.SPI4_TX.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD
+Dma.SPI4_TX.0.PeriphInc=DMA_PINC_DISABLE
+Dma.SPI4_TX.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING
+Dma.SPI4_TX.0.Priority=DMA_PRIORITY_LOW
+Dma.SPI4_TX.0.RequestNumber=1
+Dma.SPI4_TX.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
+Dma.SPI4_TX.0.SignalID=NONE
+Dma.SPI4_TX.0.SyncEnable=DISABLE
+Dma.SPI4_TX.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
+Dma.SPI4_TX.0.SyncRequestNumber=1
+Dma.SPI4_TX.0.SyncSignalID=NONE
 File.Version=6
 GPIO.groupedBy=
@@ -15,10 +35,12 @@
 Mcu.Family=STM32H7
 Mcu.IP0=CORTEX_M7
-Mcu.IP1=MEMORYMAP
-Mcu.IP2=NVIC
-Mcu.IP3=RCC
-Mcu.IP4=RTC
-Mcu.IP5=SYS
-Mcu.IPNb=6
+Mcu.IP1=DMA
+Mcu.IP2=MEMORYMAP
+Mcu.IP3=NVIC
+Mcu.IP4=RCC
+Mcu.IP5=RTC
+Mcu.IP6=SPI4
+Mcu.IP7=SYS
+Mcu.IPNb=8
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
@@ -27,8 +49,11 @@
 Mcu.Pin2=PH0-OSC_IN
 Mcu.Pin3=PH1-OSC_OUT
-Mcu.Pin4=VP_RTC_VS_RTC_Activate
-Mcu.Pin5=VP_SYS_VS_Systick
-Mcu.Pin6=VP_MEMORYMAP_VS_MEMORYMAP
-Mcu.PinsNb=7
+Mcu.Pin4=PE11
+Mcu.Pin5=PE12
+Mcu.Pin6=PE14
+Mcu.Pin7=VP_RTC_VS_RTC_Activate
+Mcu.Pin8=VP_SYS_VS_Systick
+Mcu.Pin9=VP_MEMORYMAP_VS_MEMORYMAP
+Mcu.PinsNb=10
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
@@ -37,4 +62,5 @@
 MxDb.Version=DB.6.0.130
 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+NVIC.DMA1_Stream0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.ForceEnableDMAVector=true
@@ -44,4 +70,5 @@
 NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
+NVIC.SPI4_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
 NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
@@ -51,4 +78,19 @@
 PC15-OSC32_OUT.Mode=LSE-External-Oscillator
 PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
+PE11.GPIOParameters=GPIO_Label
+PE11.GPIO_Label=SPI4_NSS_DISPLAY
+PE11.Locked=true
+PE11.Mode=NSS_Signal_Hard_Output
+PE11.Signal=SPI4_NSS
+PE12.GPIOParameters=GPIO_Label
+PE12.GPIO_Label=SPI4_SCK_DISPLAY
+PE12.Locked=true
+PE12.Mode=Simplex_Bidirectional_Master
+PE12.Signal=SPI4_SCK
+PE14.GPIOParameters=GPIO_Label
+PE14.GPIO_Label=SPI4_MOSI_DISPLAY
+PE14.Locked=true
+PE14.Mode=Simplex_Bidirectional_Master
+PE14.Signal=SPI4_MOSI
 PH0-OSC_IN.Mode=HSE-External-Oscillator
 PH0-OSC_IN.Signal=RCC_OSC_IN
@@ -86,6 +128,6 @@
 ProjectManager.UAScriptBeforePath=
 ProjectManager.UnderRoot=false
-ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
-RCC.ADCFreq_Value=100000000
+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,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
+RCC.ADCFreq_Value=166666666.66666666
 RCC.AHB12Freq_Value=100000000
 RCC.AHB4Freq_Value=100000000
@@ -102,18 +144,19 @@
 RCC.DFSDMACLkFreq_Value=100000000
 RCC.DFSDMFreq_Value=100000000
-RCC.DIVM1=25
-RCC.DIVM2=25
+RCC.DIVM1=5
+RCC.DIVM2=3
 RCC.DIVM3=25
-RCC.DIVN1=200
-RCC.DIVN2=200
+RCC.DIVN1=40
+RCC.DIVN2=40
 RCC.DIVN3=200
 RCC.DIVP1Freq_Value=100000000
-RCC.DIVP2Freq_Value=100000000
+RCC.DIVP2Freq_Value=166666666.66666666
 RCC.DIVP3Freq_Value=100000000
 RCC.DIVQ1Freq_Value=100000000
-RCC.DIVQ2Freq_Value=100000000
+RCC.DIVQ2=11
+RCC.DIVQ2Freq_Value=30303030.3030303
 RCC.DIVQ3Freq_Value=100000000
 RCC.DIVR1Freq_Value=100000000
-RCC.DIVR2Freq_Value=100000000
+RCC.DIVR2Freq_Value=166666666.66666666
 RCC.DIVR3Freq_Value=100000000
 RCC.FDCANFreq_Value=100000000
@@ -124,5 +167,5 @@
 RCC.I2C123Freq_Value=100000000
 RCC.I2C4Freq_Value=100000000
-RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVN1,DIVN2,DIVN3,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
+RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVM3,DIVN1,DIVN2,DIVN3,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1Freq_Value,DIVQ2,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCClockSelection,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Spi45ClockSelection,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value
 RCC.LPTIM1Freq_Value=100000000
 RCC.LPTIM2Freq_Value=100000000
@@ -132,4 +175,6 @@
 RCC.MCO1PinFreq_Value=64000000
 RCC.MCO2PinFreq_Value=100000000
+RCC.PLL2FRACN=0
+RCC.PLLFRACN=0
 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
 RCC.QSPIFreq_Value=100000000
@@ -143,9 +188,10 @@
 RCC.SPDIFRXFreq_Value=100000000
 RCC.SPI123Freq_Value=100000000
-RCC.SPI45Freq_Value=100000000
+RCC.SPI45Freq_Value=30303030.3030303
 RCC.SPI6Freq_Value=100000000
 RCC.SWPMI1Freq_Value=100000000
 RCC.SYSCLKFreq_VALUE=100000000
 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
+RCC.Spi45ClockSelection=RCC_SPI45CLKSOURCE_PLL2
 RCC.Tim1OutputFreq_Value=100000000
 RCC.Tim2OutputFreq_Value=100000000
@@ -155,9 +201,17 @@
 RCC.USBFreq_Value=100000000
 RCC.VCO1OutputFreq_Value=200000000
-RCC.VCO2OutputFreq_Value=200000000
+RCC.VCO2OutputFreq_Value=333333333.3333333
 RCC.VCO3OutputFreq_Value=200000000
-RCC.VCOInput1Freq_Value=1000000
-RCC.VCOInput2Freq_Value=1000000
+RCC.VCOInput1Freq_Value=5000000
+RCC.VCOInput2Freq_Value=8333333.333333333
 RCC.VCOInput3Freq_Value=1000000
+SPI4.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_2
+SPI4.CalculateBaudRate=15.151515 MBits/s
+SPI4.DataSize=SPI_DATASIZE_9BIT
+SPI4.Direction=SPI_DIRECTION_1LINE
+SPI4.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,DataSize,BaudRatePrescaler
+SPI4.Mode=SPI_MODE_MASTER
+SPI4.VirtualNSS=VM_NSSHARD
+SPI4.VirtualType=VM_MASTER
 VP_MEMORYMAP_VS_MEMORYMAP.Mode=CurAppReg
 VP_MEMORYMAP_VS_MEMORYMAP.Signal=MEMORYMAP_VS_MEMORYMAP
