Skip to content

Commit 2cd53b0

Browse files
authored
Merge pull request #8798 from lovrojakic/board-support-for-vidi-x
Add support for VIDI X board
2 parents 758c60c + 39b44c7 commit 2cd53b0

File tree

5 files changed

+306
-0
lines changed

5 files changed

+306
-0
lines changed

ports/espressif/boards/vidi_x/board.c

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "supervisor/board.h"
8+
#include "mpconfigboard.h"
9+
#include "shared-bindings/busio/SPI.h"
10+
#include "shared-bindings/fourwire/FourWire.h"
11+
#include "shared-module/displayio/__init__.h"
12+
#include "shared-module/displayio/mipi_constants.h"
13+
14+
#include "common-hal/microcontroller/Pin.h"
15+
16+
#define DELAY 0x80
17+
18+
// ILI9341 init sequence from:
19+
// https://github.com/hardkernel/ODROID-GO-MicroPython/blob/loboris/odroid_go/utils/lcd/lcd.py#L55
20+
uint8_t display_init_sequence[] = {
21+
0x0f, 3, 0x03, 0x80, 0x02, // RDDSDR
22+
0xcf, 3, 0x00, 0xcf, 0x30, // PWCRTLB
23+
0xed, 4, 0x64, 0x03, 0x12, 0x81, // PWRONCTRL
24+
0xe8, 3, 0x85, 0x00, 0x78, // DTCTRLA
25+
0xcb, 5, 0x39, 0x2c, 0x00, 0x34, 0x02, // PWCTRLA
26+
0xf7, 1, 0x20, // PRCTRL
27+
0xea, 2, 0x00, 0x00, // DTCTRLB
28+
0xc0, 1, 0x1b, // PWCTRL1
29+
0xc1, 1, 0x12, // PWCTRL2
30+
0xc5, 2, 0x3e, 0x3c, // VMCTRL1
31+
0xc7, 1, 0x91, // VMCTRL2
32+
0x36, 1, 0xa8, // MADCTL
33+
0x3a, 1, 0x55, // PIXSET
34+
0xb1, 2, 0x00, 0x1b, // FRMCTR1
35+
0xb6, 3, 0x0a, 0xa2, 0x27, // DISCTRL
36+
0xf6, 2, 0x01, 0x30, // INTFACE
37+
0xf2, 1, 0x00, // ENA3G
38+
0x26, 1, 0x01, // GAMSET
39+
0xe0, 15, 0x0f, 0x31, 0x2b, 0x0c, 0x0e, 0x08, 0x4e, 0xf1, 0x37, 0x07, 0x10, 0x03, 0x0e, 0x09, 0x00, // PGAMCTRL
40+
0xe1, 15, 0x00, 0x0e, 0x14, 0x03, 0x11, 0x07, 0x31, 0xc1, 0x48, 0x08, 0x0f, 0x0c, 0x31, 0x36, 0x0f, // NGAMCTRL
41+
0x11, 0 | DELAY, 10, // SLPOUT
42+
0x29, 0 | DELAY, 100, // DISPON
43+
};
44+
45+
void board_init(void) {
46+
fourwire_fourwire_obj_t *bus = &allocate_display_bus()->fourwire_bus;
47+
busio_spi_obj_t *spi = &bus->inline_bus;
48+
common_hal_busio_spi_construct(spi, &pin_GPIO18, &pin_GPIO23, NULL, false);
49+
common_hal_busio_spi_never_reset(spi);
50+
51+
bus->base.type = &fourwire_fourwire_type;
52+
common_hal_fourwire_fourwire_construct(bus,
53+
spi,
54+
&pin_GPIO21, // TFT_DC Command or data
55+
&pin_GPIO5, // TFT_CS Chip select
56+
NULL, // TFT_RST Reset
57+
40000000, // Baudrate
58+
0, // Polarity
59+
0); // Phase
60+
61+
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
62+
display->base.type = &busdisplay_busdisplay_type;
63+
common_hal_busdisplay_busdisplay_construct(display,
64+
bus,
65+
320, // Width (after rotation)
66+
240, // Height (after rotation)
67+
0, // column start
68+
0, // row start
69+
0, // rotation
70+
16, // Color depth
71+
false, // grayscale
72+
false, // pixels in byte share row. only used for depth < 8
73+
1, // bytes per cell. Only valid for depths < 8
74+
false, // reverse_pixels_in_byte. Only valid for depths < 8
75+
true, // reverse_pixels_in_word
76+
MIPI_COMMAND_SET_COLUMN_ADDRESS, // Set column command
77+
MIPI_COMMAND_SET_PAGE_ADDRESS, // Set row command
78+
MIPI_COMMAND_WRITE_MEMORY_START, // Write memory command
79+
display_init_sequence,
80+
sizeof(display_init_sequence),
81+
NULL, // backlight pin
82+
NO_BRIGHTNESS_COMMAND,
83+
1.0f, // brightness
84+
false, // single_byte_bounds
85+
false, // data_as_commands
86+
true, // auto_refresh
87+
60, // native_frames_per_second
88+
true, // backlight_on_high
89+
false, // SH1107_addressing
90+
50000); // backlight pwm frequency
91+
}
92+
93+
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
94+
// Pull LED down on reset rather than the default up
95+
if (pin_number == 2) {
96+
gpio_config_t cfg = {
97+
.pin_bit_mask = BIT64(pin_number),
98+
.mode = GPIO_MODE_DISABLE,
99+
.pull_up_en = false,
100+
.pull_down_en = true,
101+
.intr_type = GPIO_INTR_DISABLE,
102+
};
103+
gpio_config(&cfg);
104+
return true;
105+
}
106+
return false;
107+
}
108+
109+
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2022 Dan Halbert for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#pragma once
8+
9+
#define MICROPY_HW_BOARD_NAME "VIDI X"
10+
#define MICROPY_HW_MCU_NAME "ESP32"
11+
12+
#define MICROPY_HW_LED_STATUS (&pin_GPIO2)
13+
14+
#define CIRCUITPY_BOARD_SPI (1)
15+
#define CIRCUITPY_BOARD_SPI_PIN {{.clock = &pin_GPIO18, .mosi = &pin_GPIO23, .miso = &pin_GPIO19}}
16+
17+
#define CIRCUITPY_BOARD_I2C (1)
18+
#define CIRCUITPY_BOARD_I2C_PIN {{.scl = &pin_GPIO32, .sda = &pin_GPIO33}}
19+
20+
#define CIRCUITPY_BOOT_BUTTON (&pin_GPIO0)
21+
22+
// Explanation of how a user got into safe mode
23+
#define BOARD_USER_SAFE_MODE_ACTION MP_ERROR_TEXT("You pressed the VOLUME button at start up.")
24+
25+
// UART pins attached to the USB-serial converter chip
26+
#define CIRCUITPY_CONSOLE_UART_TX (&pin_GPIO1)
27+
#define CIRCUITPY_CONSOLE_UART_RX (&pin_GPIO3)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
CIRCUITPY_CREATOR_ID = 0x0D10C000
2+
CIRCUITPY_CREATION_ID = 0x00320001
3+
4+
IDF_TARGET = esp32
5+
6+
CIRCUITPY_ESP_FLASH_SIZE = 8MB
7+
CIRCUITPY_ESP_FLASH_MODE = qio
8+
CIRCUITPY_ESP_FLASH_FREQ = 80m
9+
10+
CIRCUITPY_ESP_PSRAM_SIZE = 8MB
11+
CIRCUITPY_ESP_PSRAM_MODE = qio
12+
CIRCUITPY_ESP_PSRAM_FREQ = 80m

ports/espressif/boards/vidi_x/pins.c

Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
// This file is part of the CircuitPython project: https://circuitpython.org
2+
//
3+
// SPDX-FileCopyrightText: Copyright (c) 2020 Scott Shawcroft for Adafruit Industries
4+
//
5+
// SPDX-License-Identifier: MIT
6+
7+
#include "py/objtuple.h"
8+
#include "shared-bindings/board/__init__.h"
9+
#include "shared-module/displayio/__init__.h"
10+
11+
static const mp_rom_map_elem_t board_module_globals_table[] = {
12+
CIRCUITPYTHON_BOARD_DICT_STANDARD_ITEMS
13+
14+
{ MP_ROM_QSTR(MP_QSTR_VOLUME), MP_ROM_PTR(&pin_GPIO0) },
15+
{ MP_ROM_QSTR(MP_QSTR_EXP9), MP_ROM_PTR(&pin_GPIO0) },
16+
{ MP_ROM_QSTR(MP_QSTR_GPIO0), MP_ROM_PTR(&pin_GPIO0) },
17+
18+
{ MP_ROM_QSTR(MP_QSTR_TX), MP_ROM_PTR(&pin_GPIO1) },
19+
{ MP_ROM_QSTR(MP_QSTR_EXP16), MP_ROM_PTR(&pin_GPIO1) },
20+
{ MP_ROM_QSTR(MP_QSTR_GPIO1), MP_ROM_PTR(&pin_GPIO1) },
21+
22+
{ MP_ROM_QSTR(MP_QSTR_STATUS), MP_ROM_PTR(&pin_GPIO2) },
23+
{ MP_ROM_QSTR(MP_QSTR_EXP8), MP_ROM_PTR(&pin_GPIO2) },
24+
{ MP_ROM_QSTR(MP_QSTR_GPIO2), MP_ROM_PTR(&pin_GPIO2) },
25+
26+
{ MP_ROM_QSTR(MP_QSTR_RX), MP_ROM_PTR(&pin_GPIO3) },
27+
{ MP_ROM_QSTR(MP_QSTR_EXP14), MP_ROM_PTR(&pin_GPIO3) },
28+
{ MP_ROM_QSTR(MP_QSTR_GPIO3), MP_ROM_PTR(&pin_GPIO3) },
29+
30+
{ MP_ROM_QSTR(MP_QSTR_VSPI_CS2), MP_ROM_PTR(&pin_GPIO4) },
31+
{ MP_ROM_QSTR(MP_QSTR_EXP10), MP_ROM_PTR(&pin_GPIO4) },
32+
{ MP_ROM_QSTR(MP_QSTR_TOUCH_CS), MP_ROM_PTR(&pin_GPIO4) },
33+
{ MP_ROM_QSTR(MP_QSTR_GPIO4), MP_ROM_PTR(&pin_GPIO4) },
34+
35+
{ MP_ROM_QSTR(MP_QSTR_VSPI_CS0), MP_ROM_PTR(&pin_GPIO5) },
36+
{ MP_ROM_QSTR(MP_QSTR_EXP11), MP_ROM_PTR(&pin_GPIO5) },
37+
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO5) },
38+
{ MP_ROM_QSTR(MP_QSTR_GPIO5), MP_ROM_PTR(&pin_GPIO5) },
39+
40+
// GPIOs 6-11 are connected to the module's integrated SPI flash and PSRAM
41+
42+
{ MP_ROM_QSTR(MP_QSTR_TOUCH_IRQ), MP_ROM_PTR(&pin_GPIO12) },
43+
{ MP_ROM_QSTR(MP_QSTR_EXP20), MP_ROM_PTR(&pin_GPIO12) },
44+
{ MP_ROM_QSTR(MP_QSTR_GPIO12), MP_ROM_PTR(&pin_GPIO12) },
45+
46+
{ MP_ROM_QSTR(MP_QSTR_MENU), MP_ROM_PTR(&pin_GPIO13) },
47+
{ MP_ROM_QSTR(MP_QSTR_EXP17), MP_ROM_PTR(&pin_GPIO13) },
48+
{ MP_ROM_QSTR(MP_QSTR_GPIO13), MP_ROM_PTR(&pin_GPIO13) },
49+
50+
{ MP_ROM_QSTR(MP_QSTR_MIC), MP_ROM_PTR(&pin_GPIO14) },
51+
{ MP_ROM_QSTR(MP_QSTR_EXP19), MP_ROM_PTR(&pin_GPIO14) },
52+
{ MP_ROM_QSTR(MP_QSTR_GPIO14), MP_ROM_PTR(&pin_GPIO14) },
53+
54+
{ MP_ROM_QSTR(MP_QSTR_IRTX), MP_ROM_PTR(&pin_GPIO15) },
55+
{ MP_ROM_QSTR(MP_QSTR_EXP7), MP_ROM_PTR(&pin_GPIO15) },
56+
{ MP_ROM_QSTR(MP_QSTR_GPIO15), MP_ROM_PTR(&pin_GPIO15) },
57+
58+
// GPIOs 16 and 17 are connected to the module’s integrated PSRAM
59+
60+
{ MP_ROM_QSTR(MP_QSTR_VSPI_SCK), MP_ROM_PTR(&pin_GPIO18) },
61+
{ MP_ROM_QSTR(MP_QSTR_EXP12), MP_ROM_PTR(&pin_GPIO18) },
62+
{ MP_ROM_QSTR(MP_QSTR_TOUCH_SCK), MP_ROM_PTR(&pin_GPIO18) },
63+
{ MP_ROM_QSTR(MP_QSTR_LCD_SCK), MP_ROM_PTR(&pin_GPIO18) },
64+
{ MP_ROM_QSTR(MP_QSTR_SD_SCK), MP_ROM_PTR(&pin_GPIO18) },
65+
{ MP_ROM_QSTR(MP_QSTR_GPIO18), MP_ROM_PTR(&pin_GPIO18) },
66+
67+
{ MP_ROM_QSTR(MP_QSTR_VSPI_MISO), MP_ROM_PTR(&pin_GPIO19) },
68+
{ MP_ROM_QSTR(MP_QSTR_EXP13), MP_ROM_PTR(&pin_GPIO19) },
69+
{ MP_ROM_QSTR(MP_QSTR_TOUCH_MISO), MP_ROM_PTR(&pin_GPIO19) },
70+
{ MP_ROM_QSTR(MP_QSTR_LCD_MISO), MP_ROM_PTR(&pin_GPIO19) },
71+
{ MP_ROM_QSTR(MP_QSTR_SD_MISO), MP_ROM_PTR(&pin_GPIO19) },
72+
{ MP_ROM_QSTR(MP_QSTR_GPIO19), MP_ROM_PTR(&pin_GPIO19) },
73+
74+
// GPIO 20 is only available on ESP32-PICO-V3 chip package
75+
76+
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO21) },
77+
{ MP_ROM_QSTR(MP_QSTR_EXP15), MP_ROM_PTR(&pin_GPIO21) },
78+
{ MP_ROM_QSTR(MP_QSTR_GPIO21), MP_ROM_PTR(&pin_GPIO21) },
79+
80+
{ MP_ROM_QSTR(MP_QSTR_VSPI_CS1), MP_ROM_PTR(&pin_GPIO22) },
81+
{ MP_ROM_QSTR(MP_QSTR_EXP18), MP_ROM_PTR(&pin_GPIO22) },
82+
{ MP_ROM_QSTR(MP_QSTR_SD_CS), MP_ROM_PTR(&pin_GPIO22) },
83+
{ MP_ROM_QSTR(MP_QSTR_GPIO22), MP_ROM_PTR(&pin_GPIO22) },
84+
85+
{ MP_ROM_QSTR(MP_QSTR_VSPI_MOSI), MP_ROM_PTR(&pin_GPIO23) },
86+
{ MP_ROM_QSTR(MP_QSTR_EXP28), MP_ROM_PTR(&pin_GPIO23) },
87+
{ MP_ROM_QSTR(MP_QSTR_GPIO23), MP_ROM_PTR(&pin_GPIO23) },
88+
89+
{ MP_ROM_QSTR(MP_QSTR_TOUCH_MOSI), MP_ROM_PTR(&pin_GPIO19) },
90+
{ MP_ROM_QSTR(MP_QSTR_LCD_MOSI), MP_ROM_PTR(&pin_GPIO19) },
91+
{ MP_ROM_QSTR(MP_QSTR_SD_MOSI), MP_ROM_PTR(&pin_GPIO19) },
92+
{ MP_ROM_QSTR(MP_QSTR_GPIO19), MP_ROM_PTR(&pin_GPIO19) },
93+
94+
// 24 not connected
95+
96+
{ MP_ROM_QSTR(MP_QSTR_IRRX), MP_ROM_PTR(&pin_GPIO25) },
97+
{ MP_ROM_QSTR(MP_QSTR_SPEAKER_IN), MP_ROM_PTR(&pin_GPIO25) },
98+
{ MP_ROM_QSTR(MP_QSTR_GPIO25), MP_ROM_PTR(&pin_GPIO25) },
99+
100+
{ MP_ROM_QSTR(MP_QSTR_TEMP), MP_ROM_PTR(&pin_GPIO26) },
101+
{ MP_ROM_QSTR(MP_QSTR_RGB_LED), MP_ROM_PTR(&pin_GPIO26) },
102+
{ MP_ROM_QSTR(MP_QSTR_GPIO26), MP_ROM_PTR(&pin_GPIO26) },
103+
104+
{ MP_ROM_QSTR(MP_QSTR_SELECT), MP_ROM_PTR(&pin_GPIO27) },
105+
{ MP_ROM_QSTR(MP_QSTR_EXP22), MP_ROM_PTR(&pin_GPIO27) },
106+
{ MP_ROM_QSTR(MP_QSTR_GPIO27), MP_ROM_PTR(&pin_GPIO27) },
107+
108+
// 28-31 not connected
109+
110+
{ MP_ROM_QSTR(MP_QSTR_BTN_A), MP_ROM_PTR(&pin_GPIO32) },
111+
{ MP_ROM_QSTR(MP_QSTR_EXP23), MP_ROM_PTR(&pin_GPIO32) },
112+
{ MP_ROM_QSTR(MP_QSTR_GPIO32), MP_ROM_PTR(&pin_GPIO32) },
113+
114+
{ MP_ROM_QSTR(MP_QSTR_BTN_B), MP_ROM_PTR(&pin_GPIO33) },
115+
{ MP_ROM_QSTR(MP_QSTR_EXP21), MP_ROM_PTR(&pin_GPIO33) },
116+
{ MP_ROM_QSTR(MP_QSTR_GPIO33), MP_ROM_PTR(&pin_GPIO33) },
117+
118+
{ MP_ROM_QSTR(MP_QSTR_BTN_L_R), MP_ROM_PTR(&pin_GPIO34) },
119+
{ MP_ROM_QSTR(MP_QSTR_EXP25), MP_ROM_PTR(&pin_GPIO34) },
120+
{ MP_ROM_QSTR(MP_QSTR_GPIO34), MP_ROM_PTR(&pin_GPIO34) },
121+
122+
{ MP_ROM_QSTR(MP_QSTR_BTN_UP_DOWN), MP_ROM_PTR(&pin_GPIO35) },
123+
{ MP_ROM_QSTR(MP_QSTR_EXP24), MP_ROM_PTR(&pin_GPIO35) },
124+
{ MP_ROM_QSTR(MP_QSTR_GPIO35), MP_ROM_PTR(&pin_GPIO35) },
125+
126+
{ MP_ROM_QSTR(MP_QSTR_ADC_BAT), MP_ROM_PTR(&pin_GPIO36) },
127+
{ MP_ROM_QSTR(MP_QSTR_EXP27), MP_ROM_PTR(&pin_GPIO36) },
128+
{ MP_ROM_QSTR(MP_QSTR_GPIO36), MP_ROM_PTR(&pin_GPIO36) },
129+
130+
// 37-38 not connected
131+
132+
{ MP_ROM_QSTR(MP_QSTR_START), MP_ROM_PTR(&pin_GPIO39) },
133+
{ MP_ROM_QSTR(MP_QSTR_EXP26), MP_ROM_PTR(&pin_GPIO39) },
134+
{ MP_ROM_QSTR(MP_QSTR_GPIO39), MP_ROM_PTR(&pin_GPIO39) },
135+
136+
{ MP_ROM_QSTR(MP_QSTR_SPI), MP_ROM_PTR(&board_spi_obj) },
137+
{ MP_ROM_QSTR(MP_QSTR_I2C), MP_ROM_PTR(&board_i2c_obj) },
138+
{ MP_ROM_QSTR(MP_QSTR_STEMMA_I2C), MP_ROM_PTR(&board_i2c_obj) },
139+
{ MP_ROM_QSTR(MP_QSTR_VIDIIC), MP_ROM_PTR(&board_i2c_obj) },
140+
141+
{ MP_ROM_QSTR(MP_QSTR_DISPLAY), MP_ROM_PTR(&displays[0].display)},
142+
};
143+
MP_DEFINE_CONST_DICT(board_module_globals, board_module_globals_table);
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#
2+
# Espressif IoT Development Framework Configuration
3+
#
4+
#
5+
# Component config
6+
#
7+
#
8+
# LWIP
9+
#
10+
CONFIG_LWIP_LOCAL_HOSTNAME="vidi-x"
11+
# end of LWIP
12+
13+
# end of Component config
14+
15+
# end of Espressif IoT Development Framework Configuration

0 commit comments

Comments
 (0)