Skip to content

Add SparkFun XRP Controller #16900

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
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
25 changes: 25 additions & 0 deletions ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/board.json
Original file line number Diff line number Diff line change
@@ -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"
}
6 changes: 6 additions & 0 deletions ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/manifest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
include("$(PORT_DIR)/boards/manifest.py")

require("bundle-networking")

# Bluetooth
require("aioble")
20 changes: 20 additions & 0 deletions ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.cmake
Original file line number Diff line number Diff line change
@@ -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)
52 changes: 52 additions & 0 deletions ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.h
Original file line number Diff line number Diff line change
@@ -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)
84 changes: 84 additions & 0 deletions ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/pins.csv
Original file line number Diff line number Diff line change
@@ -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
133 changes: 133 additions & 0 deletions ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/sparkfun_xrp_controller.h
Original file line number Diff line number Diff line change
@@ -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
2 changes: 1 addition & 1 deletion ports/rp2/boards/SPARKFUN_XRP_CONTROLLER_BETA/board.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@
"mcu": "rp2040",
"product": "XRP Controller (Beta)",
"thumbnail": "",
"url": "https://www.sparkfun.com/sparkfun-experiential-robotics-platform-xrp-controller.html",
"url": "https://www.sparkfun.com/sparkfun-experiential-robotics-platform-xrp-controller-beta.html",
"vendor": "Sparkfun"
}
Loading