Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
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
  • Loading branch information
jhordiesluminus committed Sep 12, 2025
commit aed2dfd16551ebe69963d2a61bd8e4e890539217
2 changes: 1 addition & 1 deletion src/boards/include/boards/pico.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (2 * 1024 * 1024))
#define PICO_SMPS_MODE_PIN 23

#ifndef PICO_RP2040_B0_SUPPORTED
#define PICO_RP2040_B0_SUPPORTED 0
#define PICO_RP2040_B0_SUPPORTED 1
#endif

// The GPIO Pin used to read VBUS to determine if the device is battery powered.
Expand Down
146 changes: 50 additions & 96 deletions src/boards/include/boards/raspberry_pi_pi500_rp2040.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,6 @@
* SPDX-License-Identifier: BSD-3-Clause
*/

// -----------------------------------------------------
// NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO
// SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES
// -----------------------------------------------------

#ifndef _BOARDS_RASPBERRY_PI_PI500_RP2040_H
#define _BOARDS_RASPBERRY_PI_PI500_RP2040_H

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

// --- UART ---
#ifndef PICO_DEFAULT_UART
#define PICO_DEFAULT_UART 0
#endif
#ifndef PICO_DEFAULT_UART_TX_PIN
#define PICO_DEFAULT_UART_TX_PIN 16 // Pi 500 debug UART on GP16
#endif
#ifndef PICO_DEFAULT_UART_RX_PIN
#define PICO_DEFAULT_UART_RX_PIN 1 // Standard RX pin
#endif

// --- LED ---
#ifndef PICO_DEFAULT_LED_PIN
#define PICO_DEFAULT_LED_PIN 17 // Pi 500 LED on GP17
#endif

// --- I2C ---
#ifndef PICO_DEFAULT_I2C
#define PICO_DEFAULT_I2C 0
#endif
#ifndef PICO_DEFAULT_I2C_SDA_PIN
#define PICO_DEFAULT_I2C_SDA_PIN 4
#endif
#ifndef PICO_DEFAULT_I2C_SCL_PIN
#define PICO_DEFAULT_I2C_SCL_PIN 5
#endif

// --- SPI ---
#ifndef PICO_DEFAULT_SPI
#define PICO_DEFAULT_SPI 0
#endif
#ifndef PICO_DEFAULT_SPI_SCK_PIN
#define PICO_DEFAULT_SPI_SCK_PIN 18
#endif
#ifndef PICO_DEFAULT_SPI_TX_PIN
#define PICO_DEFAULT_SPI_TX_PIN 19
#endif
#ifndef PICO_DEFAULT_SPI_RX_PIN
#define PICO_DEFAULT_SPI_RX_PIN 16
#endif
#ifndef PICO_DEFAULT_SPI_CSN_PIN
#define PICO_DEFAULT_SPI_CSN_PIN 17
#endif

// --- FLASH ---
// Pi 500 uses W25X10CL flash (differs from standard Pico W25Q080)
#define PICO_BOOT_STAGE2_CHOOSE_W25X10CL 1
Expand All @@ -69,59 +20,62 @@ pico_board_cmake_set(PICO_PLATFORM, rp2040)
#define PICO_FLASH_SPI_CLKDIV 2
#endif

pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (1 * 1024 * 1024)) // 1MB W25X10CL
pico_board_cmake_set_default(PICO_FLASH_SIZE_BYTES, (128 * 1024))
#ifndef PICO_FLASH_SIZE_BYTES
#define PICO_FLASH_SIZE_BYTES (1 * 1024 * 1024)
#define PICO_FLASH_SIZE_BYTES (128 * 1024)
#endif

// Drive high to force power supply into PWM mode (lower ripple on 3V3 at light loads)
#define PICO_SMPS_MODE_PIN 23

#ifndef PICO_RP2040_B0_SUPPORTED
#define PICO_RP2040_B0_SUPPORTED 1
#endif

// The GPIO Pin used to read VBUS to determine if the device is battery powered.
#ifndef PICO_VBUS_PIN
#define PICO_VBUS_PIN 24
#endif

// The GPIO Pin used to monitor VSYS. Typically you would use this with ADC.
#ifndef PICO_VSYS_PIN
#define PICO_VSYS_PIN 29
#ifndef PICO_RP2040_B0_SUPPORTED
#define PICO_RP2040_B0_SUPPORTED 0
#endif

// --- USB CONFIGURATION ---
// Crucial for Pi 500 keyboard function when Pi is off - ignores USB startup check
#define PICO_STDIO_USB_ENABLE_RESET_VIA_VENDOR_INTERFACE 0
#define PICO_STDIO_USB_RESET_BOOTSEL_ACTIVITY_LED 0

// --- BOOTLOADER CONFIGURATION ---
// Disable double tap reset timeout for Pi 500
#define PICO_BOOTSEL_VIA_DOUBLE_RESET_ACTIVITY_LED 0

// --- PI 500 KEYBOARD MATRIX CONFIGURATION ---
// Complete GPIO pin mapping for 8×18 keyboard matrix
// Rows (8): GP0, GP1, GP2, GP3, GP4, GP5, GP6, GP7
// Cols (18): GP27, GP8, GP9, GP10, GP11, GP12, GP13, GP14, GP23, GP24, GP22, GP20, GP29, GP18, GP15, GP21, GP28, GP26
// Matrix scanning: ROW2COL, no diodes (ghost keys possible with 3+ key combinations)

// --- PI 500 SYSTEM PINS ---
// These pins are reserved for Pi 500 hardware functions:
// GP0-GP7: Keyboard matrix rows
// GP8-GP15: Keyboard matrix columns (partial)
// GP16: Debug UART TX
// GP17: LED (heartbeat/debug)
// GP18: Keyboard matrix column
// GP19: Power button control (PWR_BTN) - CRITICAL for Pi power management
// GP20: Power key detection column (separate from matrix)
// GP21-GP24: Keyboard matrix columns
// GP25: Caps Lock LED
// GP26-GP29: Keyboard matrix columns

// --- POWER MANAGEMENT WARNING ---
// Custom firmware MUST implement power button handling via GP19 or the Pi 500
// power button will stop working, potentially making the device unbootable.
// See QMK pi500.c for reference implementation.
// --- PI 500 KEYBOARD LEDS ---
// LEDs directly connected to RP2040 (not via FFC)
#ifndef PICO_DEFAULT_LED_PIN
#define PICO_DEFAULT_LED_PIN 17 // Power/Status LED
#endif

// Keyboard indicator LEDs
#define PI500_RP2040_CAPS_LOCK_LED_PIN 25

// --- PI 500 POWER MANAGEMENT ---
// Power button control (critical for Pi 500 power management)
#define PI500_RP2040_POWER_BUTTON_PIN 19
// Power key detection (shared with matrix pins but scanned separately)
#define PI500_RP2040_POWER_KEY_COL_PIN 20 // Also matrix col 11
#define PI500_RP2040_POWER_KEY_ROW_PIN 6 // Also matrix row 6

// --- KEYBOARD MATRIX PINS ---
// Matrix row pins (8 pins)
#define PI500_RP2040_MATRIX_ROW_0_PIN 0
#define PI500_RP2040_MATRIX_ROW_1_PIN 1
#define PI500_RP2040_MATRIX_ROW_2_PIN 2
#define PI500_RP2040_MATRIX_ROW_3_PIN 3
#define PI500_RP2040_MATRIX_ROW_4_PIN 4
#define PI500_RP2040_MATRIX_ROW_5_PIN 5
#define PI500_RP2040_MATRIX_ROW_6_PIN 6
#define PI500_RP2040_MATRIX_ROW_7_PIN 7

// Matrix column pins (18 pins)
#define PI500_RP2040_MATRIX_COL_0_PIN 27
#define PI500_RP2040_MATRIX_COL_1_PIN 8
#define PI500_RP2040_MATRIX_COL_2_PIN 9
#define PI500_RP2040_MATRIX_COL_3_PIN 10
#define PI500_RP2040_MATRIX_COL_4_PIN 11
#define PI500_RP2040_MATRIX_COL_5_PIN 12
#define PI500_RP2040_MATRIX_COL_6_PIN 13
#define PI500_RP2040_MATRIX_COL_7_PIN 14
#define PI500_RP2040_MATRIX_COL_8_PIN 23
#define PI500_RP2040_MATRIX_COL_9_PIN 24
#define PI500_RP2040_MATRIX_COL_10_PIN 22
#define PI500_RP2040_MATRIX_COL_11_PIN 20
#define PI500_RP2040_MATRIX_COL_12_PIN 29
#define PI500_RP2040_MATRIX_COL_13_PIN 18
#define PI500_RP2040_MATRIX_COL_14_PIN 15
#define PI500_RP2040_MATRIX_COL_15_PIN 21
#define PI500_RP2040_MATRIX_COL_16_PIN 28
#define PI500_RP2040_MATRIX_COL_17_PIN 26

#endif
Loading