Skip to content

Commit aed2dfd

Browse files
Update Raspberry Pi 500 board support for minimal original intent.
- Fix mistake done in pico.h PICO_RP2040_B0_SUPPORTED 0 => 1 - Disable B0 support in pi500_rp2040 - Fix flash size 1M-Bit not 1Mb - Add Matrix pin definition
1 parent 8c2dcc0 commit aed2dfd

File tree

2 files changed

+51
-97
lines changed

2 files changed

+51
-97
lines changed

src/boards/include/boards/pico.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (2 * 1024 * 1024))
8080
#define PICO_SMPS_MODE_PIN 23
8181

8282
#ifndef PICO_RP2040_B0_SUPPORTED
83-
#define PICO_RP2040_B0_SUPPORTED 0
83+
#define PICO_RP2040_B0_SUPPORTED 1
8484
#endif
8585

8686
// The GPIO Pin used to read VBUS to determine if the device is battery powered.

src/boards/include/boards/raspberry_pi_pi500_rp2040.h

Lines changed: 50 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,6 @@
44
* SPDX-License-Identifier: BSD-3-Clause
55
*/
66

7-
// -----------------------------------------------------
8-
// NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO
9-
// SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES
10-
// -----------------------------------------------------
11-
127
#ifndef _BOARDS_RASPBERRY_PI_PI500_RP2040_H
138
#define _BOARDS_RASPBERRY_PI_PI500_RP2040_H
149

@@ -17,50 +12,6 @@ pico_board_cmake_set(PICO_PLATFORM, rp2040)
1712
// For board detection
1813
#define RASPBERRY_PI_PI500_RP2040
1914

20-
// --- UART ---
21-
#ifndef PICO_DEFAULT_UART
22-
#define PICO_DEFAULT_UART 0
23-
#endif
24-
#ifndef PICO_DEFAULT_UART_TX_PIN
25-
#define PICO_DEFAULT_UART_TX_PIN 16 // Pi 500 debug UART on GP16
26-
#endif
27-
#ifndef PICO_DEFAULT_UART_RX_PIN
28-
#define PICO_DEFAULT_UART_RX_PIN 1 // Standard RX pin
29-
#endif
30-
31-
// --- LED ---
32-
#ifndef PICO_DEFAULT_LED_PIN
33-
#define PICO_DEFAULT_LED_PIN 17 // Pi 500 LED on GP17
34-
#endif
35-
36-
// --- I2C ---
37-
#ifndef PICO_DEFAULT_I2C
38-
#define PICO_DEFAULT_I2C 0
39-
#endif
40-
#ifndef PICO_DEFAULT_I2C_SDA_PIN
41-
#define PICO_DEFAULT_I2C_SDA_PIN 4
42-
#endif
43-
#ifndef PICO_DEFAULT_I2C_SCL_PIN
44-
#define PICO_DEFAULT_I2C_SCL_PIN 5
45-
#endif
46-
47-
// --- SPI ---
48-
#ifndef PICO_DEFAULT_SPI
49-
#define PICO_DEFAULT_SPI 0
50-
#endif
51-
#ifndef PICO_DEFAULT_SPI_SCK_PIN
52-
#define PICO_DEFAULT_SPI_SCK_PIN 18
53-
#endif
54-
#ifndef PICO_DEFAULT_SPI_TX_PIN
55-
#define PICO_DEFAULT_SPI_TX_PIN 19
56-
#endif
57-
#ifndef PICO_DEFAULT_SPI_RX_PIN
58-
#define PICO_DEFAULT_SPI_RX_PIN 16
59-
#endif
60-
#ifndef PICO_DEFAULT_SPI_CSN_PIN
61-
#define PICO_DEFAULT_SPI_CSN_PIN 17
62-
#endif
63-
6415
// --- FLASH ---
6516
// Pi 500 uses W25X10CL flash (differs from standard Pico W25Q080)
6617
#define PICO_BOOT_STAGE2_CHOOSE_W25X10CL 1
@@ -69,59 +20,62 @@ pico_board_cmake_set(PICO_PLATFORM, rp2040)
6920
#define PICO_FLASH_SPI_CLKDIV 2
7021
#endif
7122

72-
pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (1 * 1024 * 1024)) // 1MB W25X10CL
23+
pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (128 * 1024))
7324
#ifndef PICO_FLASH_SIZE_BYTES
74-
#define PICO_FLASH_SIZE_BYTES (1 * 1024 * 1024)
25+
#define PICO_FLASH_SIZE_BYTES (128 * 1024)
7526
#endif
7627

77-
// Drive high to force power supply into PWM mode (lower ripple on 3V3 at light loads)
78-
#define PICO_SMPS_MODE_PIN 23
79-
80-
#ifndef PICO_RP2040_B0_SUPPORTED
81-
#define PICO_RP2040_B0_SUPPORTED 1
82-
#endif
8328

84-
// The GPIO Pin used to read VBUS to determine if the device is battery powered.
85-
#ifndef PICO_VBUS_PIN
86-
#define PICO_VBUS_PIN 24
87-
#endif
8829

89-
// The GPIO Pin used to monitor VSYS. Typically you would use this with ADC.
90-
#ifndef PICO_VSYS_PIN
91-
#define PICO_VSYS_PIN 29
30+
#ifndef PICO_RP2040_B0_SUPPORTED
31+
#define PICO_RP2040_B0_SUPPORTED 0
9232
#endif
9333

94-
// --- USB CONFIGURATION ---
95-
// Crucial for Pi 500 keyboard function when Pi is off - ignores USB startup check
96-
#define PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE 0
97-
#define PICO_STDIO_USB_RESET_BOOTSEL_ACTIVITY_LED 0
98-
99-
// --- BOOTLOADER CONFIGURATION ---
100-
// Disable double tap reset timeout for Pi 500
101-
#define PICO_BOOTSEL_VIA_DOUBLE_RESET_ACTIVITY_LED 0
102-
103-
// --- PI 500 KEYBOARD MATRIX CONFIGURATION ---
104-
// Complete GPIO pin mapping for 8×18 keyboard matrix
105-
// Rows (8): GP0, GP1, GP2, GP3, GP4, GP5, GP6, GP7
106-
// Cols (18): GP27, GP8, GP9, GP10, GP11, GP12, GP13, GP14, GP23, GP24, GP22, GP20, GP29, GP18, GP15, GP21, GP28, GP26
107-
// Matrix scanning: ROW2COL, no diodes (ghost keys possible with 3+ key combinations)
108-
109-
// --- PI 500 SYSTEM PINS ---
110-
// These pins are reserved for Pi 500 hardware functions:
111-
// GP0-GP7: Keyboard matrix rows
112-
// GP8-GP15: Keyboard matrix columns (partial)
113-
// GP16: Debug UART TX
114-
// GP17: LED (heartbeat/debug)
115-
// GP18: Keyboard matrix column
116-
// GP19: Power button control (PWR_BTN) - CRITICAL for Pi power management
117-
// GP20: Power key detection column (separate from matrix)
118-
// GP21-GP24: Keyboard matrix columns
119-
// GP25: Caps Lock LED
120-
// GP26-GP29: Keyboard matrix columns
121-
122-
// --- POWER MANAGEMENT WARNING ---
123-
// Custom firmware MUST implement power button handling via GP19 or the Pi 500
124-
// power button will stop working, potentially making the device unbootable.
125-
// See QMK pi500.c for reference implementation.
34+
// --- PI 500 KEYBOARD LEDS ---
35+
// LEDs directly connected to RP2040 (not via FFC)
36+
#ifndef PICO_DEFAULT_LED_PIN
37+
#define PICO_DEFAULT_LED_PIN 17 // Power/Status LED
38+
#endif
39+
40+
// Keyboard indicator LEDs
41+
#define PI500_RP2040_CAPS_LOCK_LED_PIN 25
42+
43+
// --- PI 500 POWER MANAGEMENT ---
44+
// Power button control (critical for Pi 500 power management)
45+
#define PI500_RP2040_POWER_BUTTON_PIN 19
46+
// Power key detection (shared with matrix pins but scanned separately)
47+
#define PI500_RP2040_POWER_KEY_COL_PIN 20 // Also matrix col 11
48+
#define PI500_RP2040_POWER_KEY_ROW_PIN 6 // Also matrix row 6
49+
50+
// --- KEYBOARD MATRIX PINS ---
51+
// Matrix row pins (8 pins)
52+
#define PI500_RP2040_MATRIX_ROW_0_PIN 0
53+
#define PI500_RP2040_MATRIX_ROW_1_PIN 1
54+
#define PI500_RP2040_MATRIX_ROW_2_PIN 2
55+
#define PI500_RP2040_MATRIX_ROW_3_PIN 3
56+
#define PI500_RP2040_MATRIX_ROW_4_PIN 4
57+
#define PI500_RP2040_MATRIX_ROW_5_PIN 5
58+
#define PI500_RP2040_MATRIX_ROW_6_PIN 6
59+
#define PI500_RP2040_MATRIX_ROW_7_PIN 7
60+
61+
// Matrix column pins (18 pins)
62+
#define PI500_RP2040_MATRIX_COL_0_PIN 27
63+
#define PI500_RP2040_MATRIX_COL_1_PIN 8
64+
#define PI500_RP2040_MATRIX_COL_2_PIN 9
65+
#define PI500_RP2040_MATRIX_COL_3_PIN 10
66+
#define PI500_RP2040_MATRIX_COL_4_PIN 11
67+
#define PI500_RP2040_MATRIX_COL_5_PIN 12
68+
#define PI500_RP2040_MATRIX_COL_6_PIN 13
69+
#define PI500_RP2040_MATRIX_COL_7_PIN 14
70+
#define PI500_RP2040_MATRIX_COL_8_PIN 23
71+
#define PI500_RP2040_MATRIX_COL_9_PIN 24
72+
#define PI500_RP2040_MATRIX_COL_10_PIN 22
73+
#define PI500_RP2040_MATRIX_COL_11_PIN 20
74+
#define PI500_RP2040_MATRIX_COL_12_PIN 29
75+
#define PI500_RP2040_MATRIX_COL_13_PIN 18
76+
#define PI500_RP2040_MATRIX_COL_14_PIN 15
77+
#define PI500_RP2040_MATRIX_COL_15_PIN 21
78+
#define PI500_RP2040_MATRIX_COL_16_PIN 28
79+
#define PI500_RP2040_MATRIX_COL_17_PIN 26
12680

12781
#endif

0 commit comments

Comments
 (0)