From 52ecfef0f6b92b6fe3427f05ba16c5f2068af02a Mon Sep 17 00:00:00 2001 From: Liu Zhongwei Date: Tue, 18 Jun 2024 08:50:50 +0800 Subject: [PATCH] fix(board): fix m5stack coreS3 power issue (#54) Closes https://github.com/esp-arduino-libs/ESP32_Display_Panel/issues/54 --- CHANGELOG.md | 1 + src/board/m5stack/M5CORES3.h | 235 ++++++----------------------------- 2 files changed, 42 insertions(+), 194 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 080a1bf9..06be4cf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ * fix(conf): fix error when include inside file (#52) * fix(docs): switch M5Stack doc links to english by @lboue (#50) +* fix(board): fix m5stack coreS3 power issue (#54) ## v0.1.3 - 2024-06-14 diff --git a/src/board/m5stack/M5CORES3.h b/src/board/m5stack/M5CORES3.h index d44cb007..06e4f6a5 100644 --- a/src/board/m5stack/M5CORES3.h +++ b/src/board/m5stack/M5CORES3.h @@ -17,13 +17,7 @@ #if ESP_PANEL_USE_LCD /** - * LCD Controller Name. Choose one of the following: - * - GC9A01, GC9B71, GC9503 - * - ILI9341 - * - NV3022B - * - SH8601 - * - SPD2010 - * - ST7262, ST7701, ST7789, ST7796, ST77916, ST77922 + * LCD Controller Name. * LCD Controller of M5CoreS3 is ILI9342C, but the driver is compatible with ILI9341. */ #define ESP_PANEL_LCD_NAME ILI9341 @@ -41,12 +35,7 @@ */ #define ESP_PANEL_LCD_BUS_SKIP_INIT_HOST (0) // 0/1 /** - * LCD Bus Type. Choose one of the following: - * - ESP_PANEL_BUS_TYPE_I2C (not ready) - * - ESP_PANEL_BUS_TYPE_SPI - * - ESP_PANEL_BUS_TYPE_QSPI - * - ESP_PANEL_BUS_TYPE_I80 (not ready) - * - ESP_PANEL_BUS_TYPE_RGB (only supported for ESP32-S3) + * LCD Bus Type. */ #define ESP_PANEL_LCD_BUS_TYPE (ESP_PANEL_BUS_TYPE_SPI) /** @@ -73,83 +62,6 @@ #define ESP_PANEL_LCD_SPI_CMD_BITS (8) // Typically set to 8 #define ESP_PANEL_LCD_SPI_PARAM_BITS (8) // Typically set to 8 -#elif ESP_PANEL_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_QSPI - - #define ESP_PANEL_LCD_BUS_HOST_ID (1) // Typically set to 1 - #define ESP_PANEL_LCD_SPI_IO_CS (5) -#if !ESP_PANEL_LCD_BUS_SKIP_INIT_HOST - #define ESP_PANEL_LCD_SPI_IO_SCK (9) - #define ESP_PANEL_LCD_SPI_IO_DATA0 (10) - #define ESP_PANEL_LCD_SPI_IO_DATA1 (11) - #define ESP_PANEL_LCD_SPI_IO_DATA2 (12) - #define ESP_PANEL_LCD_SPI_IO_DATA3 (13) -#endif - #define ESP_PANEL_LCD_SPI_MODE (0) // 0/1/2/3, typically set to 0 - #define ESP_PANEL_LCD_SPI_CLK_HZ (40 * 1000 * 1000) - // Should be an integer divisor of 80M, typically set to 40M - #define ESP_PANEL_LCD_SPI_TRANS_QUEUE_SZ (10) // Typically set to 10 - #define ESP_PANEL_LCD_SPI_CMD_BITS (32) // Typically set to 32 - #define ESP_PANEL_LCD_SPI_PARAM_BITS (8) // Typically set to 8 - -#elif ESP_PANEL_LCD_BUS_TYPE == ESP_PANEL_BUS_TYPE_RGB - - #define ESP_PANEL_LCD_RGB_CLK_HZ (16 * 1000 * 1000) - #define ESP_PANEL_LCD_RGB_HPW (10) - #define ESP_PANEL_LCD_RGB_HBP (10) - #define ESP_PANEL_LCD_RGB_HFP (20) - #define ESP_PANEL_LCD_RGB_VPW (10) - #define ESP_PANEL_LCD_RGB_VBP (10) - #define ESP_PANEL_LCD_RGB_VFP (10) - #define ESP_PANEL_LCD_RGB_PCLK_ACTIVE_NEG (0) // 0: rising edge, 1: falling edge - #define ESP_PANEL_LCD_RGB_DATA_WIDTH (16) // 8 | 16 - #define ESP_PANEL_LCD_RGB_PIXEL_BITS (16) // 24 | 16 - #define ESP_PANEL_LCD_RGB_FRAME_BUF_NUM (1) // 1/2/3 - #define ESP_PANEL_LCD_RGB_BOUNCE_BUF_SIZE (0) // Bounce buffer size in bytes. This function is used to avoid screen drift. - // To enable the bounce buffer, set it to a non-zero value. Typically set to `ESP_PANEL_LCD_WIDTH * 10` - // The size of the Bounce Buffer must satisfy `width_of_lcd * height_of_lcd = size_of_buffer * N`, - // where N is an even number. - #define ESP_PANEL_LCD_RGB_IO_HSYNC (46) - #define ESP_PANEL_LCD_RGB_IO_VSYNC (3) - #define ESP_PANEL_LCD_RGB_IO_DE (17) // -1 if not used - #define ESP_PANEL_LCD_RGB_IO_PCLK (9) - #define ESP_PANEL_LCD_RGB_IO_DISP (-1) // -1 if not used - #define ESP_PANEL_LCD_RGB_IO_DATA0 (10) - #define ESP_PANEL_LCD_RGB_IO_DATA1 (11) - #define ESP_PANEL_LCD_RGB_IO_DATA2 (12) - #define ESP_PANEL_LCD_RGB_IO_DATA3 (13) - #define ESP_PANEL_LCD_RGB_IO_DATA4 (14) - #define ESP_PANEL_LCD_RGB_IO_DATA5 (21) - #define ESP_PANEL_LCD_RGB_IO_DATA6 (47) - #define ESP_PANEL_LCD_RGB_IO_DATA7 (48) -#if ESP_PANEL_LCD_RGB_DATA_WIDTH > 8 - #define ESP_PANEL_LCD_RGB_IO_DATA8 (45) - #define ESP_PANEL_LCD_RGB_IO_DATA9 (38) - #define ESP_PANEL_LCD_RGB_IO_DATA10 (39) - #define ESP_PANEL_LCD_RGB_IO_DATA11 (40) - #define ESP_PANEL_LCD_RGB_IO_DATA12 (41) - #define ESP_PANEL_LCD_RGB_IO_DATA13 (42) - #define ESP_PANEL_LCD_RGB_IO_DATA14 (2) - #define ESP_PANEL_LCD_RGB_IO_DATA15 (1) -#endif -#if !ESP_PANEL_LCD_BUS_SKIP_INIT_HOST - #define ESP_PANEL_LCD_3WIRE_SPI_IO_CS (0) - #define ESP_PANEL_LCD_3WIRE_SPI_IO_SCK (1) - #define ESP_PANEL_LCD_3WIRE_SPI_IO_SDA (2) - #define ESP_PANEL_LCD_3WIRE_SPI_CS_USE_EXPNADER (0) // 0/1 - #define ESP_PANEL_LCD_3WIRE_SPI_SCL_USE_EXPNADER (0) // 0/1 - #define ESP_PANEL_LCD_3WIRE_SPI_SDA_USE_EXPNADER (0) // 0/1 - #define ESP_PANEL_LCD_3WIRE_SPI_SCL_ACTIVE_EDGE (0) // 0: rising edge, 1: falling edge - #define ESP_PANEL_LCD_FLAGS_AUTO_DEL_PANEL_IO (0) // Delete the panel IO instance automatically if set to 1. - // If the 3-wire SPI pins are sharing other pins of the RGB interface to save GPIOs, - // Please set it to 1 to release the panel IO and its pins (except CS signal). - #define ESP_PANEL_LCD_FLAGS_MIRROR_BY_CMD (!ESP_PANEL_LCD_FLAGS_AUTO_DEL_PANEL_IO) - // The `mirror()` function will be implemented by LCD command if set to 1. -#endif - -#else - -#error "The function is not ready and will be implemented in the future." - #endif /* ESP_PANEL_LCD_BUS_TYPE */ /** @@ -207,13 +119,7 @@ #define ESP_PANEL_USE_TOUCH (1) // 0/1 #if ESP_PANEL_USE_TOUCH /** - * Touch controller name. Choose one of the following: - * - CST816S - * - FT5x06 - * - GT911, GT1151 - * - ST1633, ST7123 - * - TT21100 - * - XPT2046 + * Touch controller name. * Touch Controller of M5CoreS3 is FT6336U, but the driver is compatible with FT5x06. */ #define ESP_PANEL_TOUCH_NAME FT5x06 @@ -229,9 +135,7 @@ */ #define ESP_PANEL_TOUCH_BUS_SKIP_INIT_HOST (0) // 0/1 /** - * Touch panel bus type. Choose one of the following: - * - ESP_PANEL_BUS_TYPE_I2C - * - ESP_PANEL_BUS_TYPE_SPI + * Touch panel bus type. */ #define ESP_PANEL_TOUCH_BUS_TYPE (ESP_PANEL_BUS_TYPE_I2C) /* Touch panel bus parameters */ @@ -248,22 +152,6 @@ #define ESP_PANEL_TOUCH_I2C_IO_SDA (12) #endif -#elif ESP_PANEL_TOUCH_BUS_TYPE == ESP_PANEL_BUS_TYPE_SPI - - #define ESP_PANEL_TOUCH_BUS_HOST_ID (1) // Typically set to 1 - #define ESP_PANEL_TOUCH_SPI_IO_CS (5) -#if !ESP_PANEL_TOUCH_BUS_SKIP_INIT_HOST - #define ESP_PANEL_TOUCH_SPI_IO_SCK (7) - #define ESP_PANEL_TOUCH_SPI_IO_MOSI (6) - #define ESP_PANEL_TOUCH_SPI_IO_MISO (9) -#endif - #define ESP_PANEL_TOUCH_SPI_CLK_HZ (1 * 1000 * 1000) - // Should be an integer divisor of 80M, typically set to 1M - -#else - -#error "The function is not ready and will be implemented in the future." - #endif /* ESP_PANEL_TOUCH_BUS_TYPE */ /* Touch Transformation Flags */ @@ -285,94 +173,53 @@ ///////////////////////////// Please update the following macros to configure the backlight //////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define ESP_PANEL_USE_BACKLIGHT (0) // 0/1 -#if ESP_PANEL_USE_BACKLIGHT -/* IO num of backlight pin */ -#define ESP_PANEL_BACKLIGHT_IO (45) -#define ESP_PANEL_BACKLIGHT_ON_LEVEL (1) // 0: low level, 1: high level - -/* Set to 1 if you want to turn off the backlight after initializing the panel; otherwise, set it to turn on */ -#define ESP_PANEL_BACKLIGHT_IDLE_OFF (0) // 0: on, 1: off - -/* Set to 1 if use PWM for brightness control */ -#define ESP_PANEL_LCD_BL_USE_PWM (1) // 0/1 -#endif /* ESP_PANEL_USE_BACKLIGHT */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////// Please update the following macros to configure the IO expander ////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* Set to 0 if not using IO Expander */ #define ESP_PANEL_USE_EXPANDER (0) // 0/1 -#if ESP_PANEL_USE_EXPANDER -/** - * IO expander name. Choose one of the following: - * - CH422G - * - HT8574 - * - TCA95xx_8bit - * - TCA95xx_16bit - */ -#define ESP_PANEL_EXPANDER_NAME TCA95xx_8bit - -/* IO expander Settings */ -/** - * If set to 1, the driver will skip to initialize the corresponding host. Users need to initialize the host in advance. - * It is useful if other devices use the same host. Please ensure that the host is initialized only once. - */ -#define ESP_PANEL_EXPANDER_SKIP_INIT_HOST (0) // 0/1 -/* IO expander parameters */ -#define ESP_PANEL_EXPANDER_I2C_ADDRESS (0x20) // The actual I2C address. Even for the same model of IC, - // the I2C address may be different, and confirmation based on - // the actual hardware connection is required -#if !ESP_PANEL_EXPANDER_SKIP_INIT_HOST - #define ESP_PANEL_EXPANDER_HOST_ID (0) // Typically set to 0 - #define ESP_PANEL_EXPANDER_I2C_CLK_HZ (400 * 1000) - // Typically set to 400K - #define ESP_PANEL_EXPANDER_I2C_SCL_PULLUP (1) // 0/1 - #define ESP_PANEL_EXPANDER_I2C_SDA_PULLUP (1) // 0/1 - #define ESP_PANEL_EXPANDER_I2C_IO_SCL (18) - #define ESP_PANEL_EXPANDER_I2C_IO_SDA (8) -#endif -#endif /* ESP_PANEL_USE_EXPANDER */ //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////// Please utilize the following macros to execute any additional code if required. ////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define ESP_PANEL_BEGIN_START_FUNCTION( panel ) \ - { \ - Serial.println("in function ESP_PANEL_BEGIN_END_FUNCTION\n"); \ - static const uint8_t AXP_ADDR = 0x34; \ - static const uint8_t I2C_MASTER_TIMEOUT_MS = 0; \ - static i2c_port_t i2c_master_port = I2C_NUM_0; \ - \ - uint8_t read_value = 0; \ - uint8_t write_value = 0; \ - uint8_t reg_addr = 0; \ - uint8_t write_buf[2] = {0}; \ - \ - write_buf[0] = 0x90; \ - write_buf[1] = 0xBF; \ - i2c_master_write_to_device(i2c_master_port, AXP_ADDR, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x02; \ - write_buf[1] = 0b00000101; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x03; \ - write_buf[1] = 0b00000011; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x04; \ - write_buf[1] = 0b00011000; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x05; \ - write_buf[1] = 0b00001100; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x11; \ - write_buf[1] = 0b00010000; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x12; \ - write_buf[1] = 0b11111111; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - write_buf[0] = 0x13; \ - write_buf[1] = 0b11111111; \ - i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), I2C_MASTER_TIMEOUT_MS / portTICK_PERIOD_MS); \ - \ +#define ESP_PANEL_BEGIN_START_FUNCTION( panel ) \ + { \ + const uint8_t AXP_ADDR = 0x34; \ + const uint8_t I2C_MASTER_TIMEOUT_MS = 1000; \ + const i2c_port_t i2c_master_port = I2C_NUM_0; \ + \ + uint8_t read_value = 0; \ + uint8_t write_value = 0; \ + uint8_t reg_addr = 0; \ + uint8_t write_buf[2] = {0}; \ + \ + ESP_LOGD(TAG, "Start AXP2101 Power"); \ + write_buf[0] = 0x90; \ + write_buf[1] = 0xBF; \ + i2c_master_write_to_device(i2c_master_port, AXP_ADDR, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x02; \ + write_buf[1] = 0b00000101; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x03; \ + write_buf[1] = 0b00000011; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x04; \ + write_buf[1] = 0b00011000; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x05; \ + write_buf[1] = 0b00001100; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x11; \ + write_buf[1] = 0b00010000; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x12; \ + write_buf[1] = 0b11111111; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + write_buf[0] = 0x13; \ + write_buf[1] = 0b11111111; \ + i2c_master_write_to_device(i2c_master_port, 0x58, write_buf, sizeof(write_buf), pdMS_TO_TICKS(I2C_MASTER_TIMEOUT_MS)); \ + \ } // #define ESP_PANEL_BEGIN_EXPANDER_START_FUNCTION( panel ) // #define ESP_PANEL_BEGIN_EXPANDER_END_FUNCTION( panel )