Index: ctrl/firmware/Main/CubeMX/Core/Inc/main.h
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Inc/main.h	(revision 47)
+++ ctrl/firmware/Main/CubeMX/Core/Inc/main.h	(revision 48)
@@ -62,6 +62,10 @@
 #define SPI4_SCK_DISPLAY_Pin GPIO_PIN_12
 #define SPI4_SCK_DISPLAY_GPIO_Port GPIOE
+#define PWM_DISPLAY_LIGHT_Pin GPIO_PIN_13
+#define PWM_DISPLAY_LIGHT_GPIO_Port GPIOE
 #define SPI4_MOSI_DISPLAY_Pin GPIO_PIN_14
 #define SPI4_MOSI_DISPLAY_GPIO_Port GPIOE
+#define RST_DISPLAY_Pin GPIO_PIN_15
+#define RST_DISPLAY_GPIO_Port GPIOE
 
 /* USER CODE BEGIN Private defines */
Index: ctrl/firmware/Main/CubeMX/Core/Src/gpio.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/gpio.c	(revision 47)
+++ ctrl/firmware/Main/CubeMX/Core/Src/gpio.c	(revision 48)
@@ -57,12 +57,13 @@
   __HAL_RCC_GPIOD_CLK_ENABLE();
 
+  /*Configure GPIO pin Output Level */
+  HAL_GPIO_WritePin(GPIOE, PWM_DISPLAY_LIGHT_Pin|RST_DISPLAY_Pin, GPIO_PIN_RESET);
+
   /*Configure GPIO pins : PE2 PE3 PE4 PE5
                            PE6 PE7 PE8 PE9
-                           PE10 PE13 PE15 PE0
-                           PE1 */
+                           PE10 PE0 PE1 */
   GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_4|GPIO_PIN_5
                           |GPIO_PIN_6|GPIO_PIN_7|GPIO_PIN_8|GPIO_PIN_9
-                          |GPIO_PIN_10|GPIO_PIN_13|GPIO_PIN_15|GPIO_PIN_0
-                          |GPIO_PIN_1;
+                          |GPIO_PIN_10|GPIO_PIN_0|GPIO_PIN_1;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
@@ -96,9 +97,9 @@
                            PA4 PA5 PA6 PA7
                            PA8 PA9 PA10 PA11
-                           PA12 PA13 PA14 PA15 */
+                           PA12 PA15 */
   GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                           |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7
                           |GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11
-                          |GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
+                          |GPIO_PIN_12|GPIO_PIN_15;
   GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
   GPIO_InitStruct.Pull = GPIO_NOPULL;
@@ -129,4 +130,11 @@
   HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
 
+  /*Configure GPIO pins : PWM_DISPLAY_LIGHT_Pin RST_DISPLAY_Pin */
+  GPIO_InitStruct.Pin = PWM_DISPLAY_LIGHT_Pin|RST_DISPLAY_Pin;
+  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
+  GPIO_InitStruct.Pull = GPIO_NOPULL;
+  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
+  HAL_GPIO_Init(GPIOE, &GPIO_InitStruct);
+
   /*Configure GPIO pins : PD8 PD9 PD10 PD11
                            PD12 PD13 PD14 PD15
Index: ctrl/firmware/Main/CubeMX/Core/Src/main.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/main.c	(revision 47)
+++ ctrl/firmware/Main/CubeMX/Core/Src/main.c	(revision 48)
@@ -28,4 +28,6 @@
 /* USER CODE BEGIN Includes */
 
+#include <stdio.h>
+
 /* USER CODE END Includes */
 
@@ -56,4 +58,8 @@
 /* USER CODE BEGIN PFP */
 
+void SPI_WriteComm(uint8_t);
+void SPI_WriteData(uint8_t);
+
+
 /* USER CODE END PFP */
 
@@ -71,4 +77,6 @@
 
   /* USER CODE BEGIN 1 */
+
+  printf("Program start (%s, %s).\n", __TIME__, __DATE__);
 
   /* USER CODE END 1 */
@@ -107,4 +115,239 @@
   MX_SPI4_Init();
   /* USER CODE BEGIN 2 */
+
+  HAL_GPIO_WritePin(PWM_DISPLAY_LIGHT_GPIO_Port, PWM_DISPLAY_LIGHT_Pin, GPIO_PIN_SET);
+  HAL_GPIO_WritePin(RST_DISPLAY_GPIO_Port, RST_DISPLAY_Pin, GPIO_PIN_SET);
+
+  SPI_WriteComm(0x11);
+  HAL_Delay(120);
+
+  SPI_WriteComm(0xFF);
+  SPI_WriteData(0x77);
+  SPI_WriteData(0x01);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x10);
+
+
+  SPI_WriteComm(0xC0);
+  SPI_WriteData(0x4F);
+  SPI_WriteData(0x00);
+
+
+  SPI_WriteComm(0xC1);
+  SPI_WriteData(0x07);
+  SPI_WriteData(0x02);
+
+
+  SPI_WriteComm(0xC2);
+  SPI_WriteData(0x31);
+  SPI_WriteData(0x05);
+
+  SPI_WriteComm(0xC3);
+  SPI_WriteData(0x80);
+  SPI_WriteData(0x02);
+  SPI_WriteData(0x07);
+
+  SPI_WriteComm(0xCC);
+  SPI_WriteData(0x10);
+
+  SPI_WriteComm(0xB0);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x0A);
+  SPI_WriteData(0x11);
+  SPI_WriteData(0x0C);
+  SPI_WriteData(0x10);
+  SPI_WriteData(0x05);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x08);
+  SPI_WriteData(0x08);
+  SPI_WriteData(0x1F);
+  SPI_WriteData(0x07);
+  SPI_WriteData(0x13);
+  SPI_WriteData(0x10);
+  SPI_WriteData(0xA9);
+  SPI_WriteData(0x30);
+  SPI_WriteData(0x18);
+  SPI_WriteComm(0xB1);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x0B);
+  SPI_WriteData(0x11);
+  SPI_WriteData(0x0D);
+  SPI_WriteData(0x0F);
+  SPI_WriteData(0x05);
+  SPI_WriteData(0x02);
+  SPI_WriteData(0x07);
+  SPI_WriteData(0x06);
+  SPI_WriteData(0x20);
+  SPI_WriteData(0x05);
+  SPI_WriteData(0x15);
+  SPI_WriteData(0x13);
+  SPI_WriteData(0xA9);
+  SPI_WriteData(0x30);
+  SPI_WriteData(0x18);
+  SPI_WriteComm(0xFF);
+  SPI_WriteData(0x77);
+  SPI_WriteData(0x01);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x11);
+
+
+  SPI_WriteComm(0xB0);
+  SPI_WriteData(0x53);
+  SPI_WriteComm(0xB1);
+  SPI_WriteData(0x60);
+
+  SPI_WriteComm(0xB2);
+  SPI_WriteData(0x07);
+
+  SPI_WriteComm(0xB3);
+  SPI_WriteData(0x80);
+
+  SPI_WriteComm(0xB5);
+  SPI_WriteData(0x49);
+
+  SPI_WriteComm(0xB7);
+  SPI_WriteData(0x85);
+
+  SPI_WriteComm(0xB8);
+  SPI_WriteData(0x21);
+
+  SPI_WriteComm(0xC1);
+  SPI_WriteData(0x78);
+
+  SPI_WriteComm(0xC2);
+  SPI_WriteData(0x78);
+  HAL_Delay(100);
+
+  SPI_WriteComm(0xE0);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x02);
+
+  SPI_WriteComm(0xE1);
+  SPI_WriteData(0x03);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x02);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x33);
+  SPI_WriteData(0x33);
+  SPI_WriteComm(0xE2);
+  SPI_WriteData(0x22);
+  SPI_WriteData(0x22);
+  SPI_WriteData(0x33);
+  SPI_WriteData(0x33);
+  SPI_WriteData(0x88);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x87);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+
+
+  SPI_WriteComm(0xE3);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x22);
+  SPI_WriteData(0x22);
+
+  SPI_WriteComm(0xE4);
+  SPI_WriteData(0x44);
+  SPI_WriteData(0x44);
+
+  SPI_WriteComm(0xE5);
+  SPI_WriteData(0x04);
+  SPI_WriteData(0x84);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x06);
+  SPI_WriteData(0x86);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x08);
+  SPI_WriteData(0x88);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x0A);
+  SPI_WriteData(0x8A);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+
+  SPI_WriteComm(0xE6);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x22);
+  SPI_WriteData(0x22);
+
+  SPI_WriteComm(0xE7);
+  SPI_WriteData(0x44);
+  SPI_WriteData(0x44);
+
+  SPI_WriteComm(0xE8);
+  SPI_WriteData(0x03);
+  SPI_WriteData(0x83);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x05);
+  SPI_WriteData(0x85);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x07);
+  SPI_WriteData(0x87);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0x09);
+  SPI_WriteData(0x89);
+  SPI_WriteData(0xA0);
+  SPI_WriteData(0xA0);
+
+  SPI_WriteComm(0xEB);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x01);
+  SPI_WriteData(0xE4);
+  SPI_WriteData(0xE4);
+  SPI_WriteData(0x88);
+  SPI_WriteData(0x00);
+  SPI_WriteData(0x40);
+
+  SPI_WriteComm(0xEC);
+  SPI_WriteData(0x3C);
+  SPI_WriteData(0x01);
+
+  SPI_WriteComm(0xED);
+  SPI_WriteData(0xAB);
+  SPI_WriteData(0x89);
+  SPI_WriteData(0x76);
+  SPI_WriteData(0x54);
+  SPI_WriteData(0x02);
+  SPI_WriteData(0xFF);
+  SPI_WriteData(0xFF);
+  SPI_WriteData(0xFF);
+  SPI_WriteData(0xFF);
+  SPI_WriteData(0xFF);
+  SPI_WriteData(0xFF);
+  SPI_WriteData(0x20);
+  SPI_WriteData(0x45);
+  SPI_WriteData(0x67);
+  SPI_WriteData(0x98);
+  SPI_WriteData(0xBA);
+
+
+  SPI_WriteComm(0x3A);
+  SPI_WriteData(0x66);
+
+  SPI_WriteComm(0x36);
+  SPI_WriteData(0x00);
+
+  HAL_Delay(100);
+  SPI_WriteComm(0x29);
+
 
   /* USER CODE END 2 */
@@ -187,4 +430,27 @@
 /* USER CODE BEGIN 4 */
 
+void SPI_Transmit(uint8_t cmd_data_toSend, uint8_t isCmd)
+{
+	uint16_t data[1];
+
+	data[0] = (uint16_t)cmd_data_toSend | ((uint16_t)isCmd << (sizeof(uint16_t) * 8));
+
+	HAL_SPI_Transmit(&hspi4, (const uint8_t*)data, 1, 1000);
+}
+
+void SPI_WriteComm(uint8_t cmdToSend)
+{
+	SPI_Transmit(cmdToSend, 0);
+}
+
+//------------------------------------------------------------------------------
+
+void SPI_WriteData(uint8_t dataToSend)
+{
+	SPI_Transmit(dataToSend, 1);
+}
+
+//------------------------------------------------------------------------------
+
 /* USER CODE END 4 */
 
Index: ctrl/firmware/Main/CubeMX/Core/Src/spi.c
===================================================================
--- ctrl/firmware/Main/CubeMX/Core/Src/spi.c	(revision 47)
+++ ctrl/firmware/Main/CubeMX/Core/Src/spi.c	(revision 48)
@@ -41,5 +41,5 @@
   hspi4.Instance = SPI4;
   hspi4.Init.Mode = SPI_MODE_MASTER;
-  hspi4.Init.Direction = SPI_DIRECTION_1LINE;
+  hspi4.Init.Direction = SPI_DIRECTION_2LINES_TXONLY;
   hspi4.Init.DataSize = SPI_DATASIZE_9BIT;
   hspi4.Init.CLKPolarity = SPI_POLARITY_LOW;
Index: ctrl/firmware/Main/CubeMX/charger.ioc
===================================================================
--- ctrl/firmware/Main/CubeMX/charger.ioc	(revision 47)
+++ ctrl/firmware/Main/CubeMX/charger.ioc	(revision 48)
@@ -28,5 +28,5 @@
 Dma.SPI4_TX.0.SyncSignalID=NONE
 File.Version=6
-GPIO.groupedBy=
+GPIO.groupedBy=Group By Peripherals
 KeepUserPlacement=false
 MMTAppRegionsCount=0
@@ -35,25 +35,30 @@
 Mcu.Family=STM32H7
 Mcu.IP0=CORTEX_M7
-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.IP1=DEBUG
+Mcu.IP2=DMA
+Mcu.IP3=MEMORYMAP
+Mcu.IP4=NVIC
+Mcu.IP5=RCC
+Mcu.IP6=RTC
+Mcu.IP7=SPI4
+Mcu.IP8=SYS
+Mcu.IPNb=9
 Mcu.Name=STM32H723ZETx
 Mcu.Package=LQFP144
 Mcu.Pin0=PC14-OSC32_IN
 Mcu.Pin1=PC15-OSC32_OUT
+Mcu.Pin10=PA14(JTCK/SWCLK)
+Mcu.Pin11=VP_RTC_VS_RTC_Activate
+Mcu.Pin12=VP_SYS_VS_Systick
+Mcu.Pin13=VP_MEMORYMAP_VS_MEMORYMAP
 Mcu.Pin2=PH0-OSC_IN
 Mcu.Pin3=PH1-OSC_OUT
 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.Pin6=PE13
+Mcu.Pin7=PE14
+Mcu.Pin8=PE15
+Mcu.Pin9=PA13(JTMS/SWDIO)
+Mcu.PinsNb=14
 Mcu.ThirdPartyNb=0
 Mcu.UserConstants=
@@ -74,4 +79,8 @@
 NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
+PA13(JTMS/SWDIO).Mode=Serial_Wire
+PA13(JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO
+PA14(JTCK/SWCLK).Mode=Serial_Wire
+PA14(JTCK/SWCLK).Signal=DEBUG_JTCK-SWCLK
 PC14-OSC32_IN.Mode=LSE-External-Oscillator
 PC14-OSC32_IN.Signal=RCC_OSC32_IN
@@ -86,11 +95,20 @@
 PE12.GPIO_Label=SPI4_SCK_DISPLAY
 PE12.Locked=true
-PE12.Mode=Simplex_Bidirectional_Master
+PE12.Mode=TX_Only_Simplex_Unidirect_Master
 PE12.Signal=SPI4_SCK
+PE13.GPIOParameters=GPIO_Label
+PE13.GPIO_Label=PWM_DISPLAY_LIGHT
+PE13.Locked=true
+PE13.Signal=GPIO_Output
 PE14.GPIOParameters=GPIO_Label
 PE14.GPIO_Label=SPI4_MOSI_DISPLAY
 PE14.Locked=true
-PE14.Mode=Simplex_Bidirectional_Master
+PE14.Mode=TX_Only_Simplex_Unidirect_Master
 PE14.Signal=SPI4_MOSI
+PE15.GPIOParameters=PinState,GPIO_Label
+PE15.GPIO_Label=RST_DISPLAY
+PE15.Locked=true
+PE15.PinState=GPIO_PIN_RESET
+PE15.Signal=GPIO_Output
 PH0-OSC_IN.Mode=HSE-External-Oscillator
 PH0-OSC_IN.Signal=RCC_OSC_IN
@@ -196,5 +214,5 @@
 RCC.Tim1OutputFreq_Value=100000000
 RCC.Tim2OutputFreq_Value=100000000
-RCC.TraceFreq_Value=64000000
+RCC.TraceFreq_Value=100000000
 RCC.USART16Freq_Value=100000000
 RCC.USART234578Freq_Value=100000000
@@ -209,5 +227,5 @@
 SPI4.CalculateBaudRate=15.151515 MBits/s
 SPI4.DataSize=SPI_DATASIZE_9BIT
-SPI4.Direction=SPI_DIRECTION_1LINE
+SPI4.Direction=SPI_DIRECTION_2LINES_TXONLY
 SPI4.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,DataSize,BaudRatePrescaler
 SPI4.Mode=SPI_MODE_MASTER
