Skip to content

Commit a060ae6

Browse files
committed
WIP: display pin changes
1 parent 77d199a commit a060ae6

2 files changed

Lines changed: 57 additions & 22 deletions

File tree

ports/raspberrypi/boards/pimoroni_explorer2350/board.c

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,18 @@
77
#include "supervisor/board.h"
88
#include "mpconfigboard.h"
99
#include "shared-bindings/microcontroller/Pin.h"
10+
#include "shared-bindings/paralleldisplaybus/ParallelBus.h"
1011
#include "shared-module/displayio/__init__.h"
1112
#include "shared-module/displayio/mipi_constants.h"
13+
#include "hardware/gpio.h"
14+
15+
// Display pins from Pimoroni Explorer parallel bus: {cs=27, dc=28, wr=30, rd=31, d0=32, bl=26}
16+
#define LCD_BACKLIGHT_PIN 26
17+
#define LCD_CS_PIN 27
18+
#define LCD_DC_PIN 28
19+
#define LCD_WR_PIN 30
20+
#define LCD_RD_PIN 31
21+
#define LCD_D0_PIN 32 // Data pins are GPIO32-39 (8 consecutive pins)
1222

1323
#define DELAY 0x80
1424

@@ -35,12 +45,12 @@ static void display_init(void) {
3545
bus->base.type = &paralleldisplaybus_parallelbus_type;
3646

3747
common_hal_paralleldisplaybus_parallelbus_construct(bus,
38-
&pin_GPIO29, // Data0 (DB0) - data pins must be sequential GPIO29-36
39-
&pin_GPIO26, // Command/Data (DC)
40-
&pin_GPIO11, // Chip select (CS)
41-
&pin_GPIO27, // Write (WR)
42-
&pin_GPIO28, // Read (RD)
43-
NULL, // Reset (directly connected to board reset or not exposed)
48+
&pin_GPIO32, // Data0 (D0) - data pins are sequential GPIO32-39
49+
&pin_GPIO28, // Command/Data (DC)
50+
&pin_GPIO27, // Chip select (CS)
51+
&pin_GPIO30, // Write (WR)
52+
&pin_GPIO31, // Read (RD)
53+
NULL, // Reset (directly connected to board reset)
4454
15000000); // Frequency - ST7789 min clock cycle ~66ns = ~15MHz
4555

4656
busdisplay_busdisplay_obj_t *display = &allocate_display()->display;
@@ -64,7 +74,7 @@ static void display_init(void) {
6474
MIPI_COMMAND_WRITE_MEMORY_START, // write memory command
6575
display_init_sequence,
6676
sizeof(display_init_sequence),
67-
&pin_GPIO10, // Backlight pin (LCD_BL)
77+
&pin_GPIO26, // Backlight pin (BL)
6878
NO_BRIGHTNESS_COMMAND,
6979
1.0f, // brightness
7080
false, // single_byte_bounds
@@ -78,7 +88,30 @@ static void display_init(void) {
7888
}
7989

8090
void board_init(void) {
91+
// Ensure backlight is on before display init
92+
board_reset_pin_number(LCD_BACKLIGHT_PIN);
8193
display_init();
8294
}
8395

96+
// Prevent the backlight pin from being reset, keeping display visible across soft resets
97+
bool board_reset_pin_number(uint8_t pin_number) {
98+
if (pin_number == LCD_BACKLIGHT_PIN) {
99+
// Keep backlight on - set high output without glitching
100+
gpio_put(pin_number, 1);
101+
gpio_set_dir(pin_number, GPIO_OUT);
102+
gpio_set_function(pin_number, GPIO_FUNC_SIO);
103+
return true;
104+
}
105+
return false;
106+
}
107+
108+
void reset_board(void) {
109+
// Keep backlight on during reset
110+
board_reset_pin_number(LCD_BACKLIGHT_PIN);
111+
}
112+
113+
void board_deinit(void) {
114+
// Backlight will be handled by board_reset_pin_number
115+
}
116+
84117
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

ports/raspberrypi/boards/pimoroni_explorer2350/pins.c

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -71,32 +71,34 @@ static const mp_rom_map_elem_t board_module_globals_table[] = {
7171
{ MP_ROM_QSTR(MP_QSTR_LED), MP_ROM_PTR(&pin_GPIO25) },
7272

7373
// Display parallel bus pins (ST7789V 320x240)
74-
{ MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_GPIO10) },
75-
{ MP_ROM_QSTR(MP_QSTR_GP10), MP_ROM_PTR(&pin_GPIO10) },
76-
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO11) },
77-
{ MP_ROM_QSTR(MP_QSTR_GP11), MP_ROM_PTR(&pin_GPIO11) },
78-
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO26) },
74+
// Pins from Pimoroni: {cs=27, dc=28, wr=30, rd=31, d0=32, bl=26}
75+
{ MP_ROM_QSTR(MP_QSTR_LCD_BL), MP_ROM_PTR(&pin_GPIO26) },
7976
{ MP_ROM_QSTR(MP_QSTR_GP26), MP_ROM_PTR(&pin_GPIO26) },
80-
{ MP_ROM_QSTR(MP_QSTR_LCD_WR), MP_ROM_PTR(&pin_GPIO27) },
77+
{ MP_ROM_QSTR(MP_QSTR_LCD_CS), MP_ROM_PTR(&pin_GPIO27) },
8178
{ MP_ROM_QSTR(MP_QSTR_GP27), MP_ROM_PTR(&pin_GPIO27) },
82-
{ MP_ROM_QSTR(MP_QSTR_LCD_RD), MP_ROM_PTR(&pin_GPIO28) },
79+
{ MP_ROM_QSTR(MP_QSTR_LCD_DC), MP_ROM_PTR(&pin_GPIO28) },
8380
{ MP_ROM_QSTR(MP_QSTR_GP28), MP_ROM_PTR(&pin_GPIO28) },
84-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB0), MP_ROM_PTR(&pin_GPIO29) },
8581
{ MP_ROM_QSTR(MP_QSTR_GP29), MP_ROM_PTR(&pin_GPIO29) },
86-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB1), MP_ROM_PTR(&pin_GPIO30) },
82+
{ MP_ROM_QSTR(MP_QSTR_LCD_WR), MP_ROM_PTR(&pin_GPIO30) },
8783
{ MP_ROM_QSTR(MP_QSTR_GP30), MP_ROM_PTR(&pin_GPIO30) },
88-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB2), MP_ROM_PTR(&pin_GPIO31) },
84+
{ MP_ROM_QSTR(MP_QSTR_LCD_RD), MP_ROM_PTR(&pin_GPIO31) },
8985
{ MP_ROM_QSTR(MP_QSTR_GP31), MP_ROM_PTR(&pin_GPIO31) },
90-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB3), MP_ROM_PTR(&pin_GPIO32) },
86+
{ MP_ROM_QSTR(MP_QSTR_LCD_D0), MP_ROM_PTR(&pin_GPIO32) },
9187
{ MP_ROM_QSTR(MP_QSTR_GP32), MP_ROM_PTR(&pin_GPIO32) },
92-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB4), MP_ROM_PTR(&pin_GPIO33) },
88+
{ MP_ROM_QSTR(MP_QSTR_LCD_D1), MP_ROM_PTR(&pin_GPIO33) },
9389
{ MP_ROM_QSTR(MP_QSTR_GP33), MP_ROM_PTR(&pin_GPIO33) },
94-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB5), MP_ROM_PTR(&pin_GPIO34) },
90+
{ MP_ROM_QSTR(MP_QSTR_LCD_D2), MP_ROM_PTR(&pin_GPIO34) },
9591
{ MP_ROM_QSTR(MP_QSTR_GP34), MP_ROM_PTR(&pin_GPIO34) },
96-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB6), MP_ROM_PTR(&pin_GPIO35) },
92+
{ MP_ROM_QSTR(MP_QSTR_LCD_D3), MP_ROM_PTR(&pin_GPIO35) },
9793
{ MP_ROM_QSTR(MP_QSTR_GP35), MP_ROM_PTR(&pin_GPIO35) },
98-
{ MP_ROM_QSTR(MP_QSTR_LCD_DB7), MP_ROM_PTR(&pin_GPIO36) },
94+
{ MP_ROM_QSTR(MP_QSTR_LCD_D4), MP_ROM_PTR(&pin_GPIO36) },
9995
{ MP_ROM_QSTR(MP_QSTR_GP36), MP_ROM_PTR(&pin_GPIO36) },
96+
{ MP_ROM_QSTR(MP_QSTR_LCD_D5), MP_ROM_PTR(&pin_GPIO37) },
97+
{ MP_ROM_QSTR(MP_QSTR_GP37), MP_ROM_PTR(&pin_GPIO37) },
98+
{ MP_ROM_QSTR(MP_QSTR_LCD_D6), MP_ROM_PTR(&pin_GPIO38) },
99+
{ MP_ROM_QSTR(MP_QSTR_GP38), MP_ROM_PTR(&pin_GPIO38) },
100+
{ MP_ROM_QSTR(MP_QSTR_LCD_D7), MP_ROM_PTR(&pin_GPIO39) },
101+
{ MP_ROM_QSTR(MP_QSTR_GP39), MP_ROM_PTR(&pin_GPIO39) },
100102

101103
// ADC pins (RP2350B extended GPIOs)
102104
{ MP_ROM_QSTR(MP_QSTR_GP40), MP_ROM_PTR(&pin_GPIO40) },

0 commit comments

Comments
 (0)