summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Shawcroft <scott@adafruit.com>2021-02-08 16:35:27 -0800
committerGitHub <noreply@github.com>2021-02-08 16:35:27 -0800
commit6efd87b3c6641847b6c5bd403f569ea4ddab2d4f (patch)
treefca0ba6b51578c919ce03198603e97f89a15f7d7
parent0ceac79dfb1bc1df9e0c25f1eebc9ab1074cf905 (diff)
parent54bd79a51ad588104211493d628ebd93968ee864 (diff)
Merge pull request #4124 from m4tk/main
Add display init code for Lilygo TTGO T8 ESP32-S2
-rw-r--r--ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/board.c106
-rw-r--r--ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/pins.c3
2 files changed, 108 insertions, 1 deletions
diff --git a/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/board.c b/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/board.c
index aaef97c7d..4aa7b3b24 100644
--- a/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/board.c
+++ b/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/board.c
@@ -27,6 +27,109 @@
#include "supervisor/board.h"
#include "mpconfigboard.h"
#include "shared-bindings/microcontroller/Pin.h"
+#include "shared-module/displayio/__init__.h"
+#include "shared-module/displayio/mipi_constants.h"
+
+#define DELAY 0x80
+
+// display init sequence according to LilyGO example app
+uint8_t display_init_sequence[] = {
+ // sw reset
+ 0x01, 0 | DELAY, 150,
+ // sleep out
+ 0x11, 0 | DELAY, 255,
+ // normal display mode on
+ 0x13, 0,
+ // display and color format settings
+ 0x36, 1, 0x08,
+ 0xB6, 2, 0x0A, 0x82,
+ 0x3A, 1 | DELAY, 0x55, 10,
+ // ST7789V frame rate setting
+ 0xB2, 5, 0x0C, 0x0C, 0x00, 0x33, 0x33,
+ // voltages: VGH / VGL
+ 0xB7, 1, 0x35,
+ // ST7789V power setting
+ 0xBB, 1, 0x28,
+ 0xC0, 1, 0x0C,
+ 0xC2, 2, 0x01, 0xFF,
+ 0xC3, 1, 0x10,
+ 0xC4, 1, 0x20,
+ 0xC6, 1, 0x0F,
+ 0xD0, 2, 0xA4, 0xA1,
+ // ST7789V gamma setting
+ 0xE0, 14, 0xD0, 0x00, 0x02, 0x07, 0x0A, 0x28, 0x32, 0x44, 0x42, 0x06, 0x0E, 0x12, 0x14, 0x17,
+ 0xE1, 14, 0xD0, 0x00, 0x02, 0x07, 0x0A, 0x28, 0x31, 0x54, 0x47, 0x0E, 0x1C, 0x17, 0x1B, 0x1E,
+ 0x21, 0,
+ // display on
+ 0x29, 0 | DELAY, 255,
+ };
+
+static void display_init(void) {
+ busio_spi_obj_t* spi = &displays[0].fourwire_bus.inline_bus;
+
+ common_hal_busio_spi_construct(
+ spi,
+ &pin_GPIO36, // CLK
+ &pin_GPIO35, // MOSI
+ NULL // MISO not connected
+ );
+
+ common_hal_busio_spi_never_reset(spi);
+
+ displayio_fourwire_obj_t* bus = &displays[0].fourwire_bus;
+ bus->base.type = &displayio_fourwire_type;
+
+ common_hal_displayio_fourwire_construct(
+ bus,
+ spi,
+ &pin_GPIO37, // DC
+ &pin_GPIO34, // CS
+ &pin_GPIO38, // RST
+ 40000000, // baudrate
+ 0, // polarity
+ 0 // phase
+ );
+
+ displayio_display_obj_t* display = &displays[0].display;
+ display->base.type = &displayio_display_type;
+
+ // workaround as board_init() is called before reset_port() in main.c
+ pwmout_reset();
+
+ common_hal_displayio_display_construct(
+ display,
+ bus,
+ 240, // width (after rotation)
+ 135, // height (after rotation)
+ 52, // column start
+ 40, // row start
+ 90, // rotation
+ 16, // color depth
+ false, // grayscale
+ false, // pixels in a byte share a row. Only valid for depths < 8
+ 1, // bytes per cell. Only valid for depths < 8
+ false, // reverse_pixels_in_byte. Only valid for depths < 8
+ true, // reverse_pixels_in_word
+ MIPI_COMMAND_SET_COLUMN_ADDRESS, // set column command
+ MIPI_COMMAND_SET_PAGE_ADDRESS, // set row command
+ MIPI_COMMAND_WRITE_MEMORY_START, // write memory command
+ 0x37, // set vertical scroll command
+ display_init_sequence,
+ sizeof(display_init_sequence),
+ &pin_GPIO33, // backlight pin
+ NO_BRIGHTNESS_COMMAND,
+ 1.0f, // brightness (ignored)
+ false, // auto_brightness
+ false, // single_byte_bounds
+ false, // data_as_commands
+ true, // auto_refresh
+ 60, // native_frames_per_second
+ true, // backlight_on_high
+ false // SH1107_addressing
+ );
+
+ common_hal_never_reset_pin(&pin_GPIO33); // backlight pin
+}
void board_init(void) {
// USB
@@ -38,6 +141,9 @@ void board_init(void) {
common_hal_never_reset_pin(&pin_GPIO43);
common_hal_never_reset_pin(&pin_GPIO44);
#endif /* DEBUG */
+
+ // Display
+ display_init();
}
bool board_requests_safe_mode(void) {
diff --git a/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/pins.c b/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/pins.c
index bda0fd227..a30c6797a 100644
--- a/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/pins.c
+++ b/ports/esp32s2/boards/lilygo_ttgo_t8_s2_st7789/pins.c
@@ -1,4 +1,5 @@
#include "shared-bindings/board/__init__.h"
+#include "shared-module/displayio/__init__.h"
STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_IO0), MP_ROM_PTR(&pin_GPIO0) },
@@ -41,13 +42,13 @@ STATIC const mp_rom_map_elem_t board_global_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO10) },
// 1.14 inch LCD ST7789
- { MP_ROM_QSTR(MP_QSTR_LCD_MISO), MP_ROM_PTR(&pin_GPIO4) },
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO35) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CLK), MP_ROM_PTR(&pin_GPIO36) },
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO34) },
{ MP_ROM_QSTR(MP_QSTR_LCD_RST), MP_ROM_PTR(&pin_GPIO38) },
{ MP_ROM_QSTR(MP_QSTR_LCD_BCKL), MP_ROM_PTR(&pin_GPIO33) },
{ MP_ROM_QSTR(MP_QSTR_LCD_D_C), MP_ROM_PTR(&pin_GPIO37) },
+ { MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display) },
// Peripheral Power control
{ MP_ROM_QSTR(MP_QSTR_PE_POWER), MP_ROM_PTR(&pin_GPIO14) },