3333#include "shared-bindings/framebufferio/FramebufferDisplay.h"
3434#include "shared-bindings/microcontroller/Pin.h"
3535#include "shared-module/displayio/__init__.h"
36+ #include "boards/espressif_esp32s3_lcd_ev/board.h"
37+
38+ #define MP_DEFINE_BYTES_OBJ (obj_name , bin ) mp_obj_str_t obj_name = {{&mp_type_bytes}, 0, sizeof(bin) - 1, (const byte *)bin}
3639
3740static const uint8_t display_init_sequence [] = {
3841 0xf0 , 5 , 0x55 , 0xaa , 0x52 , 0x08 , 0x00 ,
@@ -80,8 +83,17 @@ static const uint8_t display_init_sequence[] = {
8083 0x3a , 1 , 0x66 ,
8184 0x3a , 1 , 0x66 ,
8285 0x11 , 0x80 , 120 ,
83- 0x29 , 0x0
86+ 0x29 , 0x0 ,
87+ 0 , // trailing NUL for Python bytes() representation
88+ };
89+ MP_DEFINE_BYTES_OBJ (display_init_byte_obj , display_init_sequence );
90+
91+ static const char i2c_bus_init_sequence [] = {
92+ 2 , 3 , 0xf1 , // set GPIO direction
93+ 2 , 2 , 0 , // disable all output inversion
94+ 0 , // trailing NUL for Python bytes() representation
8495};
96+ MP_DEFINE_BYTES_OBJ (i2c_init_byte_obj , i2c_bus_init_sequence );
8597
8698static const mcu_pin_obj_t * red_pins [] = {
8799 & pin_GPIO1 , & pin_GPIO2 , & pin_GPIO42 , & pin_GPIO41 , & pin_GPIO40
@@ -103,7 +115,7 @@ void board_init(void) {
103115 /* hsync */ & pin_GPIO46 ,
104116 /* dclk */ & pin_GPIO9 ,
105117 /* data */ red_pins , MP_ARRAY_SIZE (red_pins ), green_pins , MP_ARRAY_SIZE (green_pins ), blue_pins , MP_ARRAY_SIZE (blue_pins ),
106- /* frequency */ 6500000 ,
118+ /* frequency */ 12000000 ,
107119 /* width x height */ 480 , 480 ,
108120 /* horizontal: pulse, back & front porch, idle */ 13 , 20 , 40 , false,
109121 /* vertical: pulse, back & front porch, idle */ 15 , 20 , 40 , false,
@@ -127,20 +139,6 @@ void board_init(void) {
127139 common_hal_busio_i2c_construct (& i2c , DEFAULT_I2C_BUS_SCL , DEFAULT_I2C_BUS_SDA , 400000 , 255 );
128140 const int i2c_device_address = 32 ;
129141
130- common_hal_busio_i2c_try_lock (& i2c );
131-
132- {
133- uint8_t buf [2 ] = {3 , 0xf1 }; // set GPIO direction
134- common_hal_busio_i2c_write (& i2c , i2c_device_address , buf , sizeof (buf ));
135- }
136-
137- {
138- uint8_t buf [2 ] = {2 , 0 }; // set all output pins low initially
139- common_hal_busio_i2c_write (& i2c , i2c_device_address , buf , sizeof (buf ));
140- }
141-
142- common_hal_busio_i2c_unlock (& i2c );
143-
144142 dotclockframebuffer_ioexpander_spi_bus spibus = {
145143 .bus = & i2c ,
146144 .i2c_device_address = i2c_device_address ,
@@ -151,7 +149,9 @@ void board_init(void) {
151149 .clk_mask = 0x100 << 2 ,
152150 };
153151
154- dotclockframebuffer_ioexpander_send_init_sequence (& spibus , display_init_sequence , sizeof (display_init_sequence ));
152+ static const mp_buffer_info_t bufinfo_display_init = { (void * )display_init_sequence , sizeof (display_init_sequence ) - 1 };
153+ static const mp_buffer_info_t bufinfo_i2c_bus_init = { (void * )i2c_bus_init_sequence , sizeof (i2c_bus_init_sequence ) - 1 };
154+ dotclockframebuffer_ioexpander_send_init_sequence (& spibus , & bufinfo_i2c_bus_init , & bufinfo_display_init );
155155
156156 common_hal_busio_i2c_deinit (& i2c );
157157}
0 commit comments