summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDryw Wade <dryw.wade@sparkfun.com>2025-03-10 17:34:47 -0600
committerDamien George <damien@micropython.org>2025-03-13 15:00:42 +1100
commitac30dcb20cbe3cab73133623adc3a0dfff77dd20 (patch)
tree4df7e1c272b39ee9222ff8a0aacca1a6a658de48
parent8dcf9290f85c98695866e6656bf9a2653c490828 (diff)
rp2/boards/SPARKFUN_XRP_CONTROLLER: Add SparkFun XRP Controller.
Signed-off-by: Dryw Wade <dryw.wade@sparkfun.com>
-rw-r--r--ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/board.json25
-rw-r--r--ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/manifest.py6
-rw-r--r--ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.cmake20
-rw-r--r--ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.h52
-rw-r--r--ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/pins.csv84
-rw-r--r--ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/sparkfun_xrp_controller.h133
6 files changed, 320 insertions, 0 deletions
diff --git a/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/board.json b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/board.json
new file mode 100644
index 000000000..92486564b
--- /dev/null
+++ b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/board.json
@@ -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"
+}
diff --git a/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/manifest.py b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/manifest.py
new file mode 100644
index 000000000..4e38f09cd
--- /dev/null
+++ b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/manifest.py
@@ -0,0 +1,6 @@
+include("$(PORT_DIR)/boards/manifest.py")
+
+require("bundle-networking")
+
+# Bluetooth
+require("aioble")
diff --git a/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.cmake b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.cmake
new file mode 100644
index 000000000..2af12f813
--- /dev/null
+++ b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.cmake
@@ -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)
diff --git a/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.h b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.h
new file mode 100644
index 000000000..13f04b92d
--- /dev/null
+++ b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/mpconfigboard.h
@@ -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)
diff --git a/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/pins.csv b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/pins.csv
new file mode 100644
index 000000000..abf77af56
--- /dev/null
+++ b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/pins.csv
@@ -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
diff --git a/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/sparkfun_xrp_controller.h b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/sparkfun_xrp_controller.h
new file mode 100644
index 000000000..70c2f13c7
--- /dev/null
+++ b/ports/rp2/boards/SPARKFUN_XRP_CONTROLLER/sparkfun_xrp_controller.h
@@ -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