rp2/boards/SPARKFUN_XRP_CONTROLLER: Add SparkFun XRP Controller.

Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
This commit is contained in:
Dryw Wade
2025-03-10 17:34:47 -06:00
committed by Damien George
parent 8dcf9290f8
commit ac30dcb20c
6 changed files with 320 additions and 0 deletions

View File

@@ -0,0 +1,25 @@
{
"deploy": [
"../deploy.md"
],
"docs": "",
"features": [
"BLE",
"Dual-core",
"External Flash",
"External RAM",
"IMU",
"JST-SH",
"RGB LED",
"USB-C",
"WiFi"
],
"images": [
"26619-XRP-Controller-Board-Feature.jpg"
],
"mcu": "rp2350",
"product": "XRP Controller",
"thumbnail": "",
"url": "https://www.sparkfun.com/sparkfun-experiential-robotics-platform-xrp-controller.html",
"vendor": "Sparkfun"
}

View File

@@ -0,0 +1,6 @@
include("$(PORT_DIR)/boards/manifest.py")
require("bundle-networking")
# Bluetooth
require("aioble")

View File

@@ -0,0 +1,20 @@
# cmake file for SparkFun XRP Controller
# TODO: DELETE THIS LINE WHEN SUBMODULED PICO-SDK INCLUDES THIS BOARD
set(PICO_BOARD_HEADER_DIRS ${MICROPY_PORT_DIR}/boards/${MICROPY_BOARD})
set(PICO_BOARD "sparkfun_xrp_controller")
set(PICO_PLATFORM "rp2350")
set(PICO_NUM_GPIOS 48)
set(MICROPY_PY_LWIP ON)
set(MICROPY_PY_NETWORK_CYW43 ON)
# Bluetooth
set(MICROPY_PY_BLUETOOTH ON)
set(MICROPY_BLUETOOTH_BTSTACK ON)
set(MICROPY_PY_BLUETOOTH_CYW43 ON)
# Board specific version of the frozen manifest
set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest.py)

View File

@@ -0,0 +1,52 @@
// Board and hardware specific configuration
#define MICROPY_HW_BOARD_NAME "SparkFun XRP Controller"
#define MICROPY_HW_FLASH_STORAGE_BYTES (PICO_FLASH_SIZE_BYTES - 1536 * 1024)
// Enable networking.
#define MICROPY_PY_NETWORK 1
#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "XRP"
// CYW43 driver configuration.
#define CYW43_USE_SPI (1)
#define CYW43_LWIP (1)
#define CYW43_GPIO (1)
#define CYW43_SPI_PIO (1)
// For debugging mbedtls - also set
// Debug level (0-4) 1=warning, 2=info, 3=debug, 4=verbose
// #define MODUSSL_MBEDTLS_DEBUG_LEVEL 1
#define MICROPY_HW_PIN_EXT_COUNT CYW43_WL_GPIO_COUNT
int mp_hal_is_pin_reserved(int n);
#define MICROPY_HW_PIN_RESERVED(i) mp_hal_is_pin_reserved(i)
#define MICROPY_HW_USB_VID (0x1B4F)
#define MICROPY_HW_USB_PID (0x0046)
#define MICROPY_HW_I2C0_SDA (4)
#define MICROPY_HW_I2C0_SCL (5)
#define MICROPY_HW_I2C1_SDA (38)
#define MICROPY_HW_I2C1_SCL (39)
#define MICROPY_HW_SPI0_SCK (18)
#define MICROPY_HW_SPI0_MOSI (19)
#define MICROPY_HW_SPI0_MISO (16)
#define MICROPY_HW_SPI1_SCK (14)
#define MICROPY_HW_SPI1_MOSI (15)
#define MICROPY_HW_SPI1_MISO (12)
#define MICROPY_HW_UART0_TX (12)
#define MICROPY_HW_UART0_RX (13)
#define MICROPY_HW_UART0_CTS (14)
#define MICROPY_HW_UART0_RTS (15)
#define MICROPY_HW_UART1_TX (8)
#define MICROPY_HW_UART1_RX (9)
#define MICROPY_HW_UART1_CTS (10)
#define MICROPY_HW_UART1_RTS (11)
#define MICROPY_HW_PSRAM_CS_PIN (47)
#define MICROPY_HW_ENABLE_PSRAM (1)

View File

@@ -0,0 +1,84 @@
# XRP default pin names
MOTOR_L_IN_1,GPIO34
MOTOR_L_IN_2,GPIO35
MOTOR_R_IN_1,GPIO32
MOTOR_R_IN_2,GPIO33
MOTOR_3_IN_1,GPIO20
MOTOR_3_IN_2,GPIO21
MOTOR_4_IN_1,GPIO10
MOTOR_4_IN_2,GPIO11
MOTOR_L_ENCODER_A,GPIO30
MOTOR_L_ENCODER_B,GPIO31
MOTOR_R_ENCODER_A,GPIO24
MOTOR_R_ENCODER_B,GPIO25
MOTOR_3_ENCODER_A,GPIO22
MOTOR_3_ENCODER_B,GPIO23
MOTOR_4_ENCODER_A,GPIO2
MOTOR_4_ENCODER_B,GPIO3
MOTOR_L_CURRENT,GPIO40
MOTOR_R_CURRENT,GPIO43
MOTOR_3_CURRENT,GPIO41
MOTOR_4_CURRENT,GPIO42
SERVO_1,GPIO6
SERVO_2,GPIO9
SERVO_3,GPIO7
SERVO_4,GPIO8
I2C_SDA_0,GPIO4
I2C_SCL_0,GPIO5
I2C_SDA_1,GPIO38
I2C_SCL_1,GPIO39
DISTANCE_TRIGGER,GPIO0
DISTANCE_ECHO,GPIO1
LINE_L,GPIO44
LINE_R,GPIO45
BOARD_VIN_MEASURE,GPIO46
BOARD_USER_BUTTON,GPIO36
BOARD_NEOPIXEL,GPIO37
BOARD_LED,EXT_GPIO0
# XRP alternate pin names
ML_IN_1,GPIO34
ML_IN_2,GPIO35
MR_IN_1,GPIO32
MR_IN_2,GPIO33
M3_IN_1,GPIO20
M3_IN_2,GPIO21
M4_IN_1,GPIO10
M4_IN_2,GPIO11
ML_ENC_A,GPIO30
ML_ENC_B,GPIO31
MR_ENC_A,GPIO24
MR_ENC_B,GPIO25
M3_ENC_A,GPIO22
M3_ENC_B,GPIO23
M4_ENC_A,GPIO2
M4_ENC_B,GPIO3
ML_CUR,GPIO40
MR_CUR,GPIO43
M3_CUR,GPIO41
M4_CUR,GPIO42
S1,GPIO6
S2,GPIO9
S3,GPIO7
S4,GPIO8
SDA_0,GPIO4
SCL_0,GPIO5
SDA_1,GPIO38
SCL_1,GPIO39
RANGE_TRIGGER,GPIO0
RANGE_ECHO,GPIO1
REFLECTANCE_L,GPIO44
REFLECTANCE_R,GPIO45
BRD_VIN,GPIO46
BRD_USR_BTN,GPIO36
BRD_RGB_LED,GPIO37
BRD_LED,EXT_GPIO0
# LED default names
LED,EXT_GPIO0
NEOPIXEL,GPIO37
# Radio GPIO pins
WL_GPIO0,EXT_GPIO0
WL_GPIO1,EXT_GPIO1
WL_GPIO2,EXT_GPIO2
1 # XRP default pin names
2 MOTOR_L_IN_1,GPIO34
3 MOTOR_L_IN_2,GPIO35
4 MOTOR_R_IN_1,GPIO32
5 MOTOR_R_IN_2,GPIO33
6 MOTOR_3_IN_1,GPIO20
7 MOTOR_3_IN_2,GPIO21
8 MOTOR_4_IN_1,GPIO10
9 MOTOR_4_IN_2,GPIO11
10 MOTOR_L_ENCODER_A,GPIO30
11 MOTOR_L_ENCODER_B,GPIO31
12 MOTOR_R_ENCODER_A,GPIO24
13 MOTOR_R_ENCODER_B,GPIO25
14 MOTOR_3_ENCODER_A,GPIO22
15 MOTOR_3_ENCODER_B,GPIO23
16 MOTOR_4_ENCODER_A,GPIO2
17 MOTOR_4_ENCODER_B,GPIO3
18 MOTOR_L_CURRENT,GPIO40
19 MOTOR_R_CURRENT,GPIO43
20 MOTOR_3_CURRENT,GPIO41
21 MOTOR_4_CURRENT,GPIO42
22 SERVO_1,GPIO6
23 SERVO_2,GPIO9
24 SERVO_3,GPIO7
25 SERVO_4,GPIO8
26 I2C_SDA_0,GPIO4
27 I2C_SCL_0,GPIO5
28 I2C_SDA_1,GPIO38
29 I2C_SCL_1,GPIO39
30 DISTANCE_TRIGGER,GPIO0
31 DISTANCE_ECHO,GPIO1
32 LINE_L,GPIO44
33 LINE_R,GPIO45
34 BOARD_VIN_MEASURE,GPIO46
35 BOARD_USER_BUTTON,GPIO36
36 BOARD_NEOPIXEL,GPIO37
37 BOARD_LED,EXT_GPIO0
38 # XRP alternate pin names
39 ML_IN_1,GPIO34
40 ML_IN_2,GPIO35
41 MR_IN_1,GPIO32
42 MR_IN_2,GPIO33
43 M3_IN_1,GPIO20
44 M3_IN_2,GPIO21
45 M4_IN_1,GPIO10
46 M4_IN_2,GPIO11
47 ML_ENC_A,GPIO30
48 ML_ENC_B,GPIO31
49 MR_ENC_A,GPIO24
50 MR_ENC_B,GPIO25
51 M3_ENC_A,GPIO22
52 M3_ENC_B,GPIO23
53 M4_ENC_A,GPIO2
54 M4_ENC_B,GPIO3
55 ML_CUR,GPIO40
56 MR_CUR,GPIO43
57 M3_CUR,GPIO41
58 M4_CUR,GPIO42
59 S1,GPIO6
60 S2,GPIO9
61 S3,GPIO7
62 S4,GPIO8
63 SDA_0,GPIO4
64 SCL_0,GPIO5
65 SDA_1,GPIO38
66 SCL_1,GPIO39
67 RANGE_TRIGGER,GPIO0
68 RANGE_ECHO,GPIO1
69 REFLECTANCE_L,GPIO44
70 REFLECTANCE_R,GPIO45
71 BRD_VIN,GPIO46
72 BRD_USR_BTN,GPIO36
73 BRD_RGB_LED,GPIO37
74 BRD_LED,EXT_GPIO0
75 # LED default names
76 LED,EXT_GPIO0
77 NEOPIXEL,GPIO37
78 # Radio GPIO pins
79 WL_GPIO0,EXT_GPIO0
80 WL_GPIO1,EXT_GPIO1
81 WL_GPIO2,EXT_GPIO2

View File

@@ -0,0 +1,133 @@
/*
* Copyright (c) 2024 Raspberry Pi (Trading) Ltd.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
// -----------------------------------------------------
// NOTE: THIS HEADER IS ALSO INCLUDED BY ASSEMBLER SO
// SHOULD ONLY CONSIST OF PREPROCESSOR DIRECTIVES
// -----------------------------------------------------
// Board definition for the SparkFun XRP Controller
//
// This header may be included by other board headers as "boards/sparkfun_xrp_controller.h"
// pico_cmake_set PICO_PLATFORM=rp2350
// pico_cmake_set PICO_CYW43_SUPPORTED = 1
#ifndef _BOARDS_SPARKFUN_XRP_CONTROLLER_H
#define _BOARDS_SPARKFUN_XRP_CONTROLLER_H
// For board detection
#define SPARKFUN_XRP_CONTROLLER
// --- RP2350 VARIANT ---
#define PICO_RP2350A 0
// --- UART ---
#ifndef PICO_DEFAULT_UART
#define PICO_DEFAULT_UART 0
#endif
#ifndef PICO_DEFAULT_UART_TX_PIN
#define PICO_DEFAULT_UART_TX_PIN 12
#endif
#ifndef PICO_DEFAULT_UART_RX_PIN
#define PICO_DEFAULT_UART_RX_PIN 13
#endif
// --- LED ---
// no PICO_DEFAULT_LED_PIN - LED is on Wireless chip
#ifndef PICO_DEFAULT_WS2812_PIN
#define PICO_DEFAULT_WS2812_PIN 37
#endif
// --- I2C --- Qwiic connector is on these pins
#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 ---
#define PICO_BOOT_STAGE2_CHOOSE_W25Q080 1
#ifndef PICO_FLASH_SPI_CLKDIV
#define PICO_FLASH_SPI_CLKDIV 2
#endif
// pico_cmake_set_default PICO_FLASH_SIZE_BYTES = (16 * 1024 * 1024)
#ifndef PICO_FLASH_SIZE_BYTES
#define PICO_FLASH_SIZE_BYTES (16 * 1024 * 1024)
#endif
#ifndef CYW43_WL_GPIO_COUNT
#define CYW43_WL_GPIO_COUNT 3
#endif
#ifndef CYW43_WL_GPIO_LED_PIN
#define CYW43_WL_GPIO_LED_PIN 0
#endif
// pico_cmake_set_default PICO_RP2350_A2_SUPPORTED = 1
#ifndef PICO_RP2350_A2_SUPPORTED
#define PICO_RP2350_A2_SUPPORTED 1
#endif
// cyw43 SPI pins can't be changed at runtime
#ifndef CYW43_PIN_WL_DYNAMIC
#define CYW43_PIN_WL_DYNAMIC 0
#endif
// gpio pin to power up the cyw43 chip
#ifndef CYW43_DEFAULT_PIN_WL_REG_ON
#define CYW43_DEFAULT_PIN_WL_REG_ON 26u
#endif
// gpio pin for spi data out to the cyw43 chip
#ifndef CYW43_DEFAULT_PIN_WL_DATA_OUT
#define CYW43_DEFAULT_PIN_WL_DATA_OUT 29u
#endif
// gpio pin for spi data in from the cyw43 chip
#ifndef CYW43_DEFAULT_PIN_WL_DATA_IN
#define CYW43_DEFAULT_PIN_WL_DATA_IN 29u
#endif
// gpio (irq) pin for the irq line from the cyw43 chip
#ifndef CYW43_DEFAULT_PIN_WL_HOST_WAKE
#define CYW43_DEFAULT_PIN_WL_HOST_WAKE 29u
#endif
// gpio pin for the spi clock line to the cyw43 chip
#ifndef CYW43_DEFAULT_PIN_WL_CLOCK
#define CYW43_DEFAULT_PIN_WL_CLOCK 28u
#endif
// gpio pin for the spi chip select to the cyw43 chip
#ifndef CYW43_DEFAULT_PIN_WL_CS
#define CYW43_DEFAULT_PIN_WL_CS 27u
#endif
#endif