Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 75)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 76)
@@ -166,9 +166,10 @@
 Mcu.IP0=CORTEX_M7
 Mcu.IP1=DEBUG
-Mcu.IP10=SPI4
-Mcu.IP11=SYS
-Mcu.IP12=TIM3
-Mcu.IP13=TIM8
-Mcu.IP14=USART3
+Mcu.IP10=SPI2
+Mcu.IP11=SPI4
+Mcu.IP12=SYS
+Mcu.IP13=TIM3
+Mcu.IP14=TIM8
+Mcu.IP15=USART3
 Mcu.IP2=DMA
 Mcu.IP3=FATFS
@@ -179,5 +180,5 @@
 Mcu.IP8=RTC
 Mcu.IP9=SDMMC1
-Mcu.IPNb=15
+Mcu.IPNb=16
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
@@ -188,46 +189,53 @@
 Mcu.Pin12=PE14
 Mcu.Pin13=PE15
-Mcu.Pin14=PD8
-Mcu.Pin15=PD9
-Mcu.Pin16=PD10
-Mcu.Pin17=PD11
-Mcu.Pin18=PD12
-Mcu.Pin19=PD13
+Mcu.Pin14=PB10
+Mcu.Pin15=PB14
+Mcu.Pin16=PB15
+Mcu.Pin17=PD8
+Mcu.Pin18=PD9
+Mcu.Pin19=PD10
 Mcu.Pin2=PC15-OSC32_OUT
-Mcu.Pin20=PC6
-Mcu.Pin21=PC7
-Mcu.Pin22=PC8
-Mcu.Pin23=PC9
-Mcu.Pin24=PA8
-Mcu.Pin25=PA13(JTMS/SWDIO)
-Mcu.Pin26=PA14(JTCK/SWCLK)
-Mcu.Pin27=PC10
-Mcu.Pin28=PC11
-Mcu.Pin29=PC12
+Mcu.Pin20=PD11
+Mcu.Pin21=PD12
+Mcu.Pin22=PD13
+Mcu.Pin23=PC6
+Mcu.Pin24=PC7
+Mcu.Pin25=PC8
+Mcu.Pin26=PC9
+Mcu.Pin27=PA8
+Mcu.Pin28=PA13(JTMS/SWDIO)
+Mcu.Pin29=PA14(JTCK/SWCLK)
 Mcu.Pin3=PH0-OSC_IN
-Mcu.Pin30=PD2
-Mcu.Pin31=PD7
-Mcu.Pin32=PG9
-Mcu.Pin33=PG10
-Mcu.Pin34=PG11
-Mcu.Pin35=PG12
-Mcu.Pin36=PG13
-Mcu.Pin37=PG15
-Mcu.Pin38=VP_FATFS_VS_SDIO
-Mcu.Pin39=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin30=PC10
+Mcu.Pin31=PC11
+Mcu.Pin32=PC12
+Mcu.Pin33=PD2
+Mcu.Pin34=PD3
+Mcu.Pin35=PD7
+Mcu.Pin36=PG9
+Mcu.Pin37=PG10
+Mcu.Pin38=PG11
+Mcu.Pin39=PG12
 Mcu.Pin4=PH1-OSC_OUT
-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.Pin40=PG13
+Mcu.Pin41=PG15
+Mcu.Pin42=PB4(NJTRST)
+Mcu.Pin43=PB8
+Mcu.Pin44=PB9
+Mcu.Pin45=VP_FATFS_VS_SDIO
+Mcu.Pin46=VP_FREERTOS_VS_CMSIS_V2
+Mcu.Pin47=VP_RTC_VS_RTC_Activate
+Mcu.Pin48=VP_RTC_VS_RTC_Calendar
+Mcu.Pin49=VP_SYS_VS_tim7
 Mcu.Pin5=PF15
+Mcu.Pin50=VP_TIM3_VS_ClockSourceINT
+Mcu.Pin51=VP_TIM8_VS_ControllerModeReset
+Mcu.Pin52=VP_TIM8_VS_ClockSourceINT
+Mcu.Pin53=VP_MEMORYMAP_VS_MEMORYMAP
 Mcu.Pin6=PG0
 Mcu.Pin7=PG1
 Mcu.Pin8=PE7
 Mcu.Pin9=PE11
-Mcu.PinsNb=47
+Mcu.PinsNb=54
 Mcu.ThirdParty0=STMicroelectronics.X-CUBE-AZRTOS-H7.3.3.0
 Mcu.ThirdPartyNb=1
@@ -270,4 +278,31 @@
 PA8.Locked=true
 PA8.Signal=GPIO_Input
+PB10.GPIOParameters=GPIO_Label
+PB10.GPIO_Label=ETH_SPI_SCK
+PB10.Mode=Full_Duplex_Master
+PB10.Signal=SPI2_SCK
+PB14.GPIOParameters=GPIO_Label
+PB14.GPIO_Label=ETH_SPI_MISO
+PB14.Locked=true
+PB14.Mode=Full_Duplex_Master
+PB14.Signal=SPI2_MISO
+PB15.GPIOParameters=GPIO_Label
+PB15.GPIO_Label=ETH_SPI_MOSI
+PB15.Locked=true
+PB15.Mode=Full_Duplex_Master
+PB15.Signal=SPI2_MOSI
+PB4(NJTRST).GPIOParameters=GPIO_Label
+PB4(NJTRST).GPIO_Label=ETH_SPI_NSS
+PB4(NJTRST).Locked=true
+PB4(NJTRST).Mode=NSS_Signal_Hard_Output
+PB4(NJTRST).Signal=SPI2_NSS
+PB8.GPIOParameters=GPIO_Label
+PB8.GPIO_Label=ETH_SPI_INT
+PB8.Locked=true
+PB8.Signal=GPXTI8
+PB9.GPIOParameters=GPIO_Label
+PB9.GPIO_Label=ETH_SPI_RST
+PB9.Locked=true
+PB9.Signal=GPIO_Output
 PC10.Mode=SD_4_bits_Wide_bus
 PC10.Signal=SDMMC1_D2
@@ -308,4 +343,9 @@
 PD2.Mode=SD_4_bits_Wide_bus
 PD2.Signal=SDMMC1_CMD
+PD3.GPIOParameters=PinState,GPIO_Label
+PD3.GPIO_Label=ETH_SPI_PWR
+PD3.Locked=true
+PD3.PinState=GPIO_PIN_SET
+PD3.Signal=GPIO_Output
 PD7.GPIOParameters=GPIO_Label
 PD7.GPIO_Label=OUTPUT_ON_LED
@@ -421,5 +461,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,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,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_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,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
 RCC.ADCFreq_Value=166666666.66666666
 RCC.AHB12Freq_Value=100000000
@@ -507,4 +547,6 @@
 SDMMC1.HardwareFlowControl=SDMMC_HARDWARE_FLOW_CONTROL_ENABLE
 SDMMC1.IPParameters=ClockPowerSave,HardwareFlowControl,ClockDiv
+SH.GPXTI8.0=GPIO_EXTI8
+SH.GPXTI8.ConfNb=1
 SH.S_TIM3_CH2.0=TIM3_CH2,PWM Generation2 CH2
 SH.S_TIM3_CH2.ConfNb=1
@@ -512,4 +554,14 @@
 SH.S_TIM8_CH1.1=TIM8_CH1,TriggerSource_TI1FP1
 SH.S_TIM8_CH1.ConfNb=2
+SPI2.CalculateBaudRate=25.0 MBits/s
+SPI2.DataSize=SPI_DATASIZE_8BIT
+SPI2.Direction=SPI_DIRECTION_2LINES
+SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,DataSize,MasterInterDataIdleness,MasterSSIdleness,MasterKeepIOState
+SPI2.MasterInterDataIdleness=SPI_MASTER_INTERDATA_IDLENESS_06CYCLE
+SPI2.MasterKeepIOState=SPI_MASTER_KEEP_IO_STATE_ENABLE
+SPI2.MasterSSIdleness=SPI_MASTER_SS_IDLENESS_03CYCLE
+SPI2.Mode=SPI_MODE_MASTER
+SPI2.VirtualNSS=VM_NSSHARD
+SPI2.VirtualType=VM_MASTER
 SPI4.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
 SPI4.CalculateBaudRate=6.25 MBits/s
