diff --git a/.github/workflows/micropython.yml b/.github/workflows/micropython.yml index 20efd39..e302db9 100644 --- a/.github/workflows/micropython.yml +++ b/.github/workflows/micropython.yml @@ -21,6 +21,9 @@ jobs: include: - name: pico2_rp2350 board: RPI_PICO2 + - name: pico2_rp2350_wireless + board: RPI_PICO2 + variant: WIRELESS - name: pico2b_rp2350 board: RPI_PICO2B - name: plasma2350 diff --git a/micropython/board/RPI_PICO2/manifest-wireless.py b/micropython/board/RPI_PICO2/manifest-wireless.py new file mode 100644 index 0000000..b34f473 --- /dev/null +++ b/micropython/board/RPI_PICO2/manifest-wireless.py @@ -0,0 +1,8 @@ +require("bundle-networking") + +# Bluetooth +require("aioble") + +include("manifest.py") + +freeze("$(BOARD_DIR)/../../modules_py", "lte.py") \ No newline at end of file diff --git a/micropython/board/RPI_PICO2/mpconfigboard.h b/micropython/board/RPI_PICO2/mpconfigboard.h index a50d66b..4815a99 100644 --- a/micropython/board/RPI_PICO2/mpconfigboard.h +++ b/micropython/board/RPI_PICO2/mpconfigboard.h @@ -1,3 +1,52 @@ // Board and hardware specific configuration -#define MICROPY_HW_BOARD_NAME "Raspberry Pi Pico" -#define MICROPY_HW_FLASH_STORAGE_BYTES (PICO_FLASH_SIZE_BYTES - 1024 * 1024) \ No newline at end of file +#define MICROPY_HW_FLASH_STORAGE_BYTES (PICO_FLASH_SIZE_BYTES - (2 * 1024 * 1024)) + +// Set up networking. +#define MICROPY_PY_NETWORK_HOSTNAME_DEFAULT "Pico2" + +#if defined(MICROPY_PY_NETWORK_CYW43) + +// CYW43 driver configuration. +#define CYW43_USE_SPI (1) +#define CYW43_LWIP (1) +#define CYW43_GPIO (1) +#define CYW43_SPI_PIO (1) + +#define MICROPY_HW_PIN_EXT_COUNT CYW43_WL_GPIO_COUNT + +#if defined(CYW43_PIN_WL_DYNAMIC) + +#define CYW43_PIO_CLOCK_DIV_DYNAMIC (1) + +// Defined by pimoroni_pico_plus2w_rp2350.h +//#define CYW43_DEFAULT_PIN_WL_HOST_WAKE SPICE_RESET_MOSI_PIN +//#define CYW43_DEFAULT_PIN_WL_REG_ON SPICE_TX_MISO_PIN +#define CYW43_DEFAULT_PIN_WL_DATA_OUT CYW43_DEFAULT_PIN_WL_HOST_WAKE +#define CYW43_DEFAULT_PIN_WL_DATA_IN CYW43_DEFAULT_PIN_WL_HOST_WAKE +#define CYW43_DEFAULT_PIN_WL_CLOCK 29u +#define CYW43_DEFAULT_PIN_WL_CS 25u + +// Slow down the wireless clock, since we'll be running +// comms through wiring spaghetti! +#define CYW43_PIO_CLOCK_DIV_INT 50 +#define CYW43_PIO_CLOCK_DIV_FRAC 0 +#define CYW43_SPI_PROGRAM_NAME spi_gap0_sample1 + +#endif + +#endif + +// Might be defined in mpconfigvariant_PPP.cmake +// This is not checked by mpconfigport.h so we must set up networking below +#if defined(MICROPY_PY_NETWORK_PPP_LWIP) + +// Nothing to do here? + +#endif + +// If a variant is not used, define a fallback board name +#ifndef MICROPY_HW_BOARD_NAME + +#define MICROPY_HW_BOARD_NAME "Raspberry Pi Pico 2" + +#endif \ No newline at end of file diff --git a/micropython/board/RPI_PICO2/mpconfigvariant_WIRELESS.cmake b/micropython/board/RPI_PICO2/mpconfigvariant_WIRELESS.cmake new file mode 100644 index 0000000..c40812c --- /dev/null +++ b/micropython/board/RPI_PICO2/mpconfigvariant_WIRELESS.cmake @@ -0,0 +1,40 @@ +# Override the MicroPython board name +# And set basic options which are expanded upon in mpconfigboard.h +list(APPEND MICROPY_DEF_BOARD + "MICROPY_HW_BOARD_NAME=\"Raspberry Pi Pico 2 (LTE + WiFi)\"" + "MICROPY_PY_NETWORK=1" + "CYW43_PIN_WL_DYNAMIC=1" + "MICROPY_PY_NETWORK_PPP_LWIP=1" +) + +# Links micropy_lib_lwip and sets MICROPY_PY_LWIP = 1 +# Picked up and expanded upon in mpconfigboard.h +set(MICROPY_PY_LWIP ON) + +# Links cyw43-driver and sets: +# MICROPY_PY_NETWORK_CYW43 = 1, +# MICROPY_PY_SOCKET_DEFAULT_TIMEOUT_MS = 30000 +set(MICROPY_PY_NETWORK_CYW43 ON) + +# Adds mpbthciport.c +# And sets: +# MICROPY_PY_BLUETOOTH = 1, +# MICROPY_PY_BLUETOOTH_USE_SYNC_EVENTS = 1, +# MICROPY_PY_BLUETOOTH_ENABLE_CENTRAL_MODE = 1 +set(MICROPY_PY_BLUETOOTH ON) + +# Links pico_btstack_hci_transport_cyw43 +# And sets: +# MICROPY_BLUETOOTH_BTSTACK = 1, +# MICROPY_BLUETOOTH_BTSTACK_CONFIG_FILE = +set(MICROPY_BLUETOOTH_BTSTACK ON) + +# Sets: +# CYW43_ENABLE_BLUETOOTH = 1, +# MICROPY_PY_BLUETOOTH_CYW43 = 1 +set(MICROPY_PY_BLUETOOTH_CYW43 ON) + +set(MICROPY_FROZEN_MANIFEST ${MICROPY_BOARD_DIR}/manifest-wireless.py) + +set(PICO_BOARD "pico2_w.h") +set(PICO_BOARD_HEADER_DIRS ${CMAKE_CURRENT_LIST_DIR}) diff --git a/micropython/board/RPI_PICO2/pico2_w.h b/micropython/board/RPI_PICO2/pico2_w.h new file mode 100644 index 0000000..68d5191 --- /dev/null +++ b/micropython/board/RPI_PICO2/pico2_w.h @@ -0,0 +1,116 @@ +/* + * 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 +// ----------------------------------------------------- + +// This header may be included by other board headers as "boards/pico2_w.h" + +// pico_cmake_set PICO_PLATFORM=rp2350 +// pico_cmake_set PICO_CYW43_SUPPORTED = 1 + +#ifndef _BOARDS_PICO2_W_H +#define _BOARDS_PICO2_W_H + +// For board detection +#define RASPBERRYPI_PICO2_W + +// --- RP2350 VARIANT --- +#define PICO_RP2350A 1 + +// --- UART --- +#ifndef PICO_DEFAULT_UART +#define PICO_DEFAULT_UART 0 +#endif +#ifndef PICO_DEFAULT_UART_TX_PIN +#define PICO_DEFAULT_UART_TX_PIN 0 +#endif +#ifndef PICO_DEFAULT_UART_RX_PIN +#define PICO_DEFAULT_UART_RX_PIN 1 +#endif + +// --- LED --- +// no PICO_DEFAULT_LED_PIN - LED is on Wireless chip +// no PICO_DEFAULT_WS2812_PIN + +// --- 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 --- + +#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 = (4 * 1024 * 1024) +#ifndef PICO_FLASH_SIZE_BYTES +#define PICO_FLASH_SIZE_BYTES (4 * 1024 * 1024) +#endif +// Drive high to force power supply into PWM mode (lower ripple on 3V3 at light loads) +// note the SMSP mode pin is on WL_GPIO1 + +#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 + +// If CYW43_WL_GPIO_VBUS_PIN is defined then a CYW43 GPIO has to be used to read VBUS. +// This can be passed to cyw43_arch_gpio_get to determine if the device is battery powered. +// PICO_VBUS_PIN and CYW43_WL_GPIO_VBUS_PIN should not both be defined. +#ifndef CYW43_WL_GPIO_VBUS_PIN +#define CYW43_WL_GPIO_VBUS_PIN 2 +#endif + +// If CYW43_USES_VSYS_PIN is defined then CYW43 uses the VSYS GPIO (defined by PICO_VSYS_PIN) for other purposes. +// If this is the case, to use the VSYS GPIO it's necessary to ensure CYW43 is not using it. +// This can be achieved by wrapping the use of the VSYS GPIO in cyw43_thread_enter / cyw43_thread_exit. +#ifndef CYW43_USES_VSYS_PIN +#define CYW43_USES_VSYS_PIN 1 +#endif + +// The GPIO Pin used to monitor VSYS. Typically you would use this with ADC. +// There is an example in adc/read_vsys in pico-examples. +#ifndef PICO_VSYS_PIN +#define PICO_VSYS_PIN 29 +#endif + +#ifndef PICO_RP2350_A2_SUPPORTED +#define PICO_RP2350_A2_SUPPORTED 1 +#endif + +#endif \ No newline at end of file