1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-12-16 10:03:50 +01:00

boards/rpi-pico*: Update and fix documentation and images

This commit is contained in:
crasbe 2025-02-15 01:24:30 +01:00
parent 4de6aa10e9
commit 1dd5de0cbc
2 changed files with 332 additions and 344 deletions

View File

@ -1,180 +1,174 @@
/** /**
@defgroup boards_rpi_pico_w Raspberry Pi Pico W * @defgroup boards_rpi_pico_w Raspberry Pi Pico W
@ingroup boards * @ingroup boards
@brief Support for the RP2040 based Raspberry Pi Pico W board * @brief Support for the RP2040 based Raspberry Pi Pico W board
*
## Overview * ## Overview
*
The Raspberry Pi Pico W and Pico WH (with headers) is a board with RP2040 MCU, * The Raspberry Pi Pico W and Pico WH (with headers) is a board with RP2040 MCU,
a custom dual core ARM Cortex-M0+ MCU with relatively high CPU clock, plenty of * a custom dual core ARM Cortex-M0+ MCU with relatively high CPU clock, plenty of
RAM, some unique peripheral (the Programmable IO) and the Infineon CYW43439 wireless * RAM, some unique peripheral (the Programmable IO) and the Infineon CYW43439 wireless
chip. * chip.
*
## Hardware * ## Hardware
*
![Raspberry Pi Pico W](https://www.raspberrypi.com/app/uploads/2022/06/Copy-of-PICO-W-HERO-800x533.jpg) * @image html https://www.raspberrypi.com/documentation/computers/images/pico-w.png "Raspberry Pi Pico W" width=50%
*
Raspberry Pi Pico W is provided in two versions - without and with headers, * Raspberry Pi Pico W is provided in two versions - without and with headers,
the second one is called Pico WH. Detailed photos can be found at [Raspberry Pi Pico family](https://www.raspberrypi.com/documentation/microcontrollers/images/four_picos.jpg). * the second one is called Pico WH. Detailed photos can be found at [Raspberry Pi Pico family](https://www.raspberrypi.com/documentation/microcontrollers/images/four_picos.jpg).
*
### MCU * ### MCU
*
The Programmable IO (PIO) peripheral and the SSI/QSPI peripheral that supports execution from * The Programmable IO (PIO) peripheral and the SSI/QSPI peripheral that supports execution from
flash (XIP) are the most distinguishing features of the MCU. The latter is especially important, * flash (XIP) are the most distinguishing features of the MCU. The latter is especially important,
since the RP2040 contains no internal flash. * since the RP2040 contains no internal flash.
*
| MCU | RP2040 | * | MCU | RP2040 |
|:-----------|:------------------------------------------------------------ | * |:-----------|:------------------------------------------------------------ |
| Family | (2x) ARM Cortex-M0+ | * | Family | (2x) ARM Cortex-M0+ |
| Vendor | Raspberry Pi | * | Vendor | Raspberry Pi |
| RAM | 264 KiB | * | RAM | 264 KiB |
| Flash | 2 MiB (up to 16 MiB) | * | Flash | 2 MiB (up to 16 MiB) |
| Frequency | up to 133 MHz | * | Frequency | up to 133 MHz |
| FPU | no | * | FPU | no |
| PIOs | 8 | * | PIOs | 8 |
| Timers | 1 x 64-bit | * | Timers | 1 x 64-bit |
| ADCs | 1x 12-bit (4 channels + temperature sensor) | * | ADCs | 1x 12-bit (4 channels + temperature sensor) |
| UARTs | 2 | * | UARTs | 2 |
| SPIs | 2 | * | SPIs | 2 |
| I2Cs | 2 | * | I2Cs | 2 |
| RTCs | 1 | * | RTCs | 1 |
| USBs | 1 (USB 2.0) | * | USBs | 1 (USB 2.0) |
| Watchdog | 1 | * | Watchdog | 1 |
| SSI/QSPI | 1 (connected to flash, with XIP support) | * | SSI/QSPI | 1 (connected to flash, with XIP support) |
| WiFi | via wireless chip (Infineon CYW43439) (*) | * | WiFi | via wireless chip (Infineon CYW43439) (*) |
| Bluetooth | via wireless chip (Infineon CYW43439) (*) | * | Bluetooth | via wireless chip (Infineon CYW43439) (*) |
| Vcc | 1.62V - 3.63V | * | Vcc | 1.62V - 3.63V |
| Datasheet | [Datasheet](https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf) | * | Datasheet | [Datasheet](https://datasheets.raspberrypi.com/picow/pico-w-datasheet.pdf) |
| Wireless chip | [Infineon CYW43439 Datasheet](https://www.infineon.com/dgdl/Infineon-CYW43439-DataSheet-v03_00-EN.pdf?fileId=8ac78c8c8386267f0183c320336c029f) | * | Wireless chip | [Infineon CYW43439 Datasheet](https://www.infineon.com/dgdl/Infineon-CYW43439-DataSheet-v03_00-EN.pdf?fileId=8ac78c8c8386267f0183c320336c029f) |
*
(*) Currently not implemented in the RIOT OS. * (*) Currently not implemented in the RIOT OS.
*
### User Interface * ### User Interface
*
1 button (also used for boot selection) and 1 LED: * 1 button (also used for boot selection) and 1 LED:
*
| Device | PIN | * | Device | PIN |
|:------ |:---------------- | * |:------ |:---------------- |
| LED0 | WL_GPIO0 (*) | * | LED0 | WL_GPIO0 (*) |
| SW0 | QSPI_SS_N (**) | * | SW0 | QSPI_SS_N (**) |
*
(*) In the Pico W LED0 is directly connected to the Infineon CYW43439 module, * (*) In the Pico W LED0 is directly connected to the Infineon CYW43439 module,
and cannot be directly controlled by MCU. * and cannot be directly controlled by MCU.
*
(**) Since the switch is connected to the chip-select pin of the QSPI interface the flash chip RIOT * (**) Since the switch is connected to the chip-select pin of the QSPI interface the flash chip RIOT
is running from via XIP, the switch is difficult to read out from software. This is currently not * is running from via XIP, the switch is difficult to read out from software. This is currently not
supported. * supported.
*
### Pinout * ### Pinout
*
![Pinout Diagram of RPi Pico W](https://www.raspberrypi.com/documentation/microcontrollers/images/picow-pinout.svg) * ![Pinout Diagram of the RPi Pico W](https://www.raspberrypi.com/documentation/microcontrollers/images/picow-pinout.svg)
*
## Flashing the Board * ## Flashing the Board
*
### Flashing the Board Using the Bootloader * ### Flashing the Board Using the Bootloader
*
Connect the device to your Micro-USB cable while the button (labeled `BOOTSEL` * Connect the device to your Micro-USB cable while the button (labeled `BOOTSEL`
on the silkscreen of the PCB) is pressed to enter the bootloader. The pico * on the silkscreen of the PCB) is pressed to enter the bootloader. The pico
will present itself as a storage medium to the system, to which a UF2 file * will present itself as a storage medium to the system, to which a UF2 file
can be copied perform the flashing of the device. This can be automated by * can be copied perform the flashing of the device. This can be automated by
running: * running:
*
``` * ```
make BOARD=rpi-pico-w flash * make BOARD=rpi-pico-w flash
``` * ```
*
This is default flashing option using elf2uf2 PROGRAMMER. If the storage is * This is default flashing option using elf2uf2 PROGRAMMER. If the storage is
not automatically mounted to `/media/<USER_NAME>/RPI-RP2`, you can overwrite * not automatically mounted to `/media/<USER_NAME>/RPI-RP2`, you can overwrite
the path by exporting the shell environment variable `ELF2UF2_MOUNT_PATH`. * the path by exporting the shell environment variable `ELF2UF2_MOUNT_PATH`.
*
### Flashing the Board Using OpenOCD * ### Flashing the Board Using OpenOCD
*
Currently (June 2021), only two methods for debugging via OpenOCD are supported: * Currently (June 2021), only two methods for debugging via OpenOCD are supported:
*
1. Using a bit-banging low-level adapter, e.g. via the GPIOs of a Raspberry Pi 4B * 1. Using a bit-banging low-level adapter, e.g. via the GPIOs of a Raspberry Pi 4B
2. Using a virtual CMSIS-DAP adapter provided by the second CPU core via * 2. Using a virtual CMSIS-DAP adapter provided by the second CPU core via
https://github.com/majbthrd/pico-debug * https://github.com/majbthrd/pico-debug
*
Option 2 requires no additional hardware however, you need to * Option 2 requires no additional hardware however, you need to
first "flash" the gimme-cache variant of [pico-debug](https://github.com/majbthrd/pico-debug) * first "flash" the gimme-cache variant of [pico-debug](https://github.com/majbthrd/pico-debug)
into RAM using the UF2 bootloader. For this, plug in the USB cable while holding down the BOOTSEL * into RAM using the UF2 bootloader. For this, plug in the USB cable while holding down the BOOTSEL
button of the Pico and copy the `pico-debug-gimmecache.uf2` from the * button of the Pico and copy the `pico-debug-gimmecache.uf2` from the
[latest pico-debug release](https://github.com/majbthrd/pico-debug/releases) into the virtual FAT * [latest pico-debug release](https://github.com/majbthrd/pico-debug/releases) into the virtual FAT
formatted drive the bootloader provides. Once this drive is unmounted again, this will result in * formatted drive the bootloader provides. Once this drive is unmounted again, this will result in
the Raspberry Pi Pico showing up as CMSIS-DAP debugger. Afterwards run: * the Raspberry Pi Pico showing up as CMSIS-DAP debugger. Afterwards run:
*
``` * ```
make BOARD=rpi-pico-w PROGRAMMER=openocd flash * make BOARD=rpi-pico-w PROGRAMMER=openocd flash
``` * ```
*
@warning The `rpi-pico-w` virtual debugger is not persistent and needs to be "flashed" into RAM * @warning The `rpi-pico-w` virtual debugger is not persistent and needs to be "flashed" into RAM
again after each cold boot. * again after each cold boot.
*
@note As of July 2021, the latest stable release of OpenOCD does not yet support the RP2040 * @note The RP2040 MCU is supported from OpenOCD version 0.12.0 onwards.
MCU. Instead, compile the current `master` branch from the upstream OpenOCD source. *
The OpenOCD fork of the Raspberry Pi foundation is incompatible with OpenOCD * ### Flashing the Board Using J-Link
configuration provided, so please stick with upstream OpenOCD. *
* Connect the Board to an Segger J-Link debugger, e.g. the EDU mini debugger is relatively affordable,
### Flashing the Board Using J-Link * but limited to educational purposes. Afterwards run:
*
Connect the Board to an Segger J-Link debugger, e.g. the EDU mini debugger is relatively affordable, * ```
but limited to educational purposes. Afterwards run: * make BOARD=rpi-pico-w PROGRAMMER=jlink flash
* ```
``` *
make BOARD=rpi-pico-w PROGRAMMER=jlink flash * ## Accessing RIOT shell
``` *
* This board's default access to RIOT shell is via UART (UART0 TX - pin 1, UART0 RX - pin 2).
## Accessing RIOT shell *
* The default baud rate is 115 200.
This board's default access to RIOT shell is via UART (UART0 TX - pin 1, UART0 RX - pin 2). *
* The simplest way to connect to the shell is the execution of the command:
The default baud rate is 115 200. *
* ```
The simplest way to connect to the shell is the execution of the command: * make BOARD=rpi-pico-w term
* ```
``` *
make BOARD=rpi-pico-w term * @warning Raspberry Pi Pico board is not 5V tolerant. Use voltage divider or logic level shifter when connecting to 5V UART.
``` *
* ## On-Chip Debugging
@warning Raspberry Pi Pico board is not 5V tolerant. Use voltage divider or logic level shifter when connecting to 5V UART. *
* There are currently (June 2021) few hardware options for debugging the Raspberry Pi Pico:
## On-Chip Debugging *
* 1. Via J-Link using one of Seggers debuggers
There are currently (June 2021) few hardware options for debugging the Raspberry Pi Pico: * 2. Via OpenOCD using a low-level bit-banging debugger (e.g. a Raspberry Pi 4B with the GPIOs
* connected to the Raspberry Pi Pico via jump wires)
1. Via J-Link using one of Seggers debuggers * 3. Via a recently updated [Black Magic Probe](https://github.com/blacksphere/blackmagic)
2. Via OpenOCD using a low-level bit-banging debugger (e.g. a Raspberry Pi 4B with the GPIOs *
connected to the Raspberry Pi Pico via jump wires) * In addition, a software-only option is possible using
3. Via a recently updated [Black Magic Probe](https://github.com/blacksphere/blackmagic) * [pico-debug](https://github.com/majbthrd/pico-debug). The default linker script reserved 16 KiB of
* RAM for this debugger, hence just "flash" the "gimme-cache" flavor into RAM using the UF2
In addition, a software-only option is possible using * bootloader. Once this is done, debugging is as simple as running:
[pico-debug](https://github.com/majbthrd/pico-debug). The default linker script reserved 16 KiB of *
RAM for this debugger, hence just "flash" the "gimme-cache" flavor into RAM using the UF2 * ```
bootloader. Once this is done, debugging is as simple as running: * make BOARD=rpi-pico-w debug
* ```
``` *
make BOARD=rpi-pico-w debug * ***Beware:*** The `rpi-pico-w` virtual debugger is not persistent and needs to be "flashed"
``` * into RAM again after each cold boot. The initialization code of RIOT now seems to play well with the
* debugger, so it remains persistent on soft reboots. If you face issues with losing connection to
***Beware:*** The `rpi-pico-w` virtual debugger is not persistent and needs to be "flashed" into RAM * the debugger on reboot, try `monitor reset init` in GDB to soft-reboot instead.
again after each cold boot. The initialization code of RIOT now seems to play well with the *
debugger, so it remains persistent on soft reboots. If you face issues with losing connection to * ## Known Issues / Problems
the debugger on reboot, try `monitor reset init` in GDB to soft-reboot instead. *
* ### Early State Implementation
## Known Issues / Problems *
* Currently no support for the following peripherals is implemented:
### Early state Implementation *
* - USB
Currently no support for the following peripherals is implemented: * - RTC
* - Watchdog
- Timers * - SMP support (multi CPU support is not implemented in RIOT)
- ADC * - Infineon CYW 43439 wireless chip
- SPI *
- I2C * The I2C peripheral is implemented through the PIO.
- USB
- PIO
- RTC
- Watchdog
- SMP support (multi CPU support is not implemented in RIOT)
- Infineon CYW 43439 wireless chip
*/ */

View File

@ -1,168 +1,162 @@
/** /**
@defgroup boards_rpi_pico Raspberry Pi Pico * @defgroup boards_rpi_pico Raspberry Pi Pico
@ingroup boards * @ingroup boards
@brief Support for the RP2040 based Raspberry Pi Pico board * @brief Support for the RP2040 based Raspberry Pi Pico board
*
## Overview * ## Overview
*
The Raspberry Pi Pico is sold by the Raspberry Pi foundation for about 4 USD. It features the * The Raspberry Pi Pico is sold by the Raspberry Pi foundation for about 4 USD. It features the
RP2040 MCU, a custom dual core ARM Cortex-M0+ MCU with relatively high CPU clock, plenty of RAM and * RP2040 MCU, a custom dual core ARM Cortex-M0+ MCU with relatively high CPU clock, plenty of RAM and
some unique peripheral (the Programmable IO). * some unique peripheral (the Programmable IO).
*
## Hardware * ## Hardware
*
![Raspberry Pi Pico](https://www.raspberrypi.org/homepage-9df4b/static/rp2040@2x-d1b9dae9345ad2bd15a23c6a567edb5c.jpg) * @image html https://www.raspberrypi.com/documentation/computers/images/pico.png "Raspberry Pi Pico" width=50%
*
### MCU * ### MCU
*
The Programmable IO (PIO) peripheral and the SSI/QSPI peripheral that supports execution from * The Programmable IO (PIO) peripheral and the SSI/QSPI peripheral that supports execution from
flash (XIP) are the most distinguishing features of the MCU. The latter is especially important, * flash (XIP) are the most distinguishing features of the MCU. The latter is especially important,
since the RP2040 contains no internal flash. * since the RP2040 contains no internal flash.
*
| MCU | RP2040 | * | MCU | RP2040 |
|:-----------|:------------------------------------------------------------ | * |:-----------|:------------------------------------------------------------ |
| Family | (2x) ARM Cortex-M0+ | * | Family | (2x) ARM Cortex-M0+ |
| Vendor | Raspberry Pi | * | Vendor | Raspberry Pi |
| RAM | 264 KiB | * | RAM | 264 KiB |
| Flash | 2 MiB (up to 16 MiB) | * | Flash | 2 MiB (up to 16 MiB) |
| Frequency | up to 133 MHz | * | Frequency | up to 133 MHz |
| FPU | no | * | FPU | no |
| PIOs | 8 | * | PIOs | 8 |
| Timers | 1 x 64-bit | * | Timers | 1 x 64-bit |
| ADCs | 1x 12-bit (4 channels + temperature sensor) | * | ADCs | 1x 12-bit (4 channels + temperature sensor) |
| UARTs | 2 | * | UARTs | 2 |
| SPIs | 2 | * | SPIs | 2 |
| I2Cs | 2 | * | I2Cs | 2 |
| RTCs | 1 | * | RTCs | 1 |
| USBs | 1 (USB 2.0) | * | USBs | 1 (USB 2.0) |
| Watchdog | 1 | * | Watchdog | 1 |
| SSI/QSPI | 1 (connected to flash, with XIP support) | * | SSI/QSPI | 1 (connected to flash, with XIP support) |
| Vcc | 1.62V - 3.63V | * | Vcc | 1.62V - 3.63V |
| Datasheet | [Datasheet](https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf) | * | Datasheet | [Datasheet](https://datasheets.raspberrypi.com/pico/pico-datasheet.pdf) |
*
### User Interface * ### User Interface
*
1 button (also used for boot selection) and 1 LED: * 1 button (also used for boot selection) and 1 LED:
*
| Device | PIN | * | Device | PIN |
|:------ |:---------------- | * |:------ |:---------------- |
| LED0 | 25 | * | LED0 | 25 |
| SW0 | QSPI_SS_N (*) | * | SW0 | QSPI_SS_N (*) |
*
(*) Since the switch is connected to the chip-select pin of the QSPI interface the flash chip RIOT * (*) Since the switch is connected to the chip-select pin of the QSPI interface the flash chip RIOT
is running from via XIP, the switch is difficult to read out from software. This is currently not * is running from via XIP, the switch is difficult to read out from software. This is currently not
supported. * supported.
*
### Pinout * ### Pinout
*
![Pinout Diagram of RPi Pico](https://projects-static.raspberrypi.org/projects/getting-started-with-the-pico/f009ad94826c2f0cd7573a295897e76955301096/en/images/Pico-R3-Pinout.png) * ![Pinout Diagram of RPi Pico](https://www.raspberrypi.com/documentation/microcontrollers/images/pico-pinout.svg)
*
## Flashing the Board * ## Flashing the Board
*
### Flashing the Board Using the Bootloader * ### Flashing the Board Using the Bootloader
*
Connect the device to your Micro-USB cable while the button (labeled `BOOTSEL` * Connect the device to your Micro-USB cable while the button (labeled `BOOTSEL`
on the silkscreen of the PCB) is pressed to enter the bootloader. The pico * on the silkscreen of the PCB) is pressed to enter the bootloader. The pico
will present itself as a storage medium to the system, to which a UF2 file * will present itself as a storage medium to the system, to which a UF2 file
can be copied perform the flashing of the device. This can be automated by * can be copied perform the flashing of the device. This can be automated by
running: * running:
*
``` * ```
make BOARD=rpi-pico flash * make BOARD=rpi-pico flash
``` * ```
*
This is default flashing option using elf2uf2 PROGRAMMER. If the storage is * This is default flashing option using elf2uf2 PROGRAMMER. If the storage is
not automatically mounted to `/media/<USER_NAME>/RPI-RP2`, you can overwrite * not automatically mounted to `/media/<USER_NAME>/RPI-RP2`, you can overwrite
the path by exporting the shell environment variable `ELF2UF2_MOUNT_PATH`. * the path by exporting the shell environment variable `ELF2UF2_MOUNT_PATH`.
*
### Flashing the Board Using OpenOCD * ### Flashing the Board Using OpenOCD
*
Currently (June 2021), only two methods for debugging via OpenOCD are supported: * Currently (June 2021), only two methods for debugging via OpenOCD are supported:
*
1. Using a bit-banging low-level adapter, e.g. via the GPIOs of a Raspberry Pi 4B * 1. Using a bit-banging low-level adapter, e.g. via the GPIOs of a Raspberry Pi 4B
2. Using a virtual CMSIS-DAP adapter provided by the second CPU core via * 2. Using a virtual CMSIS-DAP adapter provided by the second CPU core via
https://github.com/majbthrd/pico-debug * https://github.com/majbthrd/pico-debug
*
Option 2 requires no additional hardware however, you need to * Option 2 requires no additional hardware however, you need to
first "flash" the gimme-cache variant of [pico-debug](https://github.com/majbthrd/pico-debug) * first "flash" the gimme-cache variant of [pico-debug](https://github.com/majbthrd/pico-debug)
into RAM using the UF2 bootloader. For this, plug in the USB cable while holding down the BOOTSEL * into RAM using the UF2 bootloader. For this, plug in the USB cable while holding down the BOOTSEL
button of the Pico and copy the `pico-debug-gimmecache.uf2` from the * button of the Pico and copy the `pico-debug-gimmecache.uf2` from the
[latest pico-debug release](https://github.com/majbthrd/pico-debug/releases) into the virtual FAT * [latest pico-debug release](https://github.com/majbthrd/pico-debug/releases) into the virtual FAT
formatted drive the bootloader provides. Once this drive is unmounted again, this will result in * formatted drive the bootloader provides. Once this drive is unmounted again, this will result in
the Raspberry Pi Pico showing up as CMSIS-DAP debugger. Afterwards run: * the Raspberry Pi Pico showing up as CMSIS-DAP debugger. Afterwards run:
*
``` * ```
make BOARD=rpi-pico PROGRAMMER=openocd flash * make BOARD=rpi-pico PROGRAMMER=openocd flash
``` * ```
*
@warning The `rpi-pico` virtual debugger is not persistent and needs to be "flashed" into RAM * @warning The `rpi-pico` virtual debugger is not persistent and needs to be "flashed" into RAM
again after each cold boot. * again after each cold boot.
*
@note As of July 2021, the latest stable release of OpenOCD does not yet support the RP2040 * @note The RP2040 MCU is supported from OpenOCD version 0.12.0 onwards.
MCU. Instead, compile the current `master` branch from the upstream OpenOCD source. *
The OpenOCD fork of the Raspberry Pi foundation is incompatible with OpenOCD * ### Flashing the Board Using J-Link
configuration provided, so please stick with upstream OpenOCD. *
* Connect the Board to an Segger J-Link debugger, e.g. the EDU mini debugger is relatively affordable,
### Flashing the Board Using J-Link * but limited to educational purposes. Afterwards run:
*
Connect the Board to an Segger J-Link debugger, e.g. the EDU mini debugger is relatively affordable, * ```
but limited to educational purposes. Afterwards run: * make BOARD=rpi-pico PROGRAMMER=jlink flash
* ```
``` *
make BOARD=rpi-pico PROGRAMMER=jlink flash * ## Accessing RIOT shell
``` *
* This board's default access to RIOT shell is via UART (UART0 TX - pin 1, UART0 RX - pin 2).
## Accessing RIOT shell *
* The default baud rate is 115 200.
This board's default access to RIOT shell is via UART (UART0 TX - pin 1, UART0 RX - pin 2). *
* The simplest way to connect to the shell is the execution of the command:
The default baud rate is 115 200. *
* ```
The simplest way to connect to the shell is the execution of the command: * make BOARD=rpi-pico term
* ```
``` *
make BOARD=rpi-pico term * @warning Raspberry Pi Pico board is not 5V tolerant. Use voltage divider or logic level shifter when connecting to 5V UART.
``` *
* ## On-Chip Debugging
@warning Raspberry Pi Pico board is not 5V tolerant. Use voltage divider or logic level shifter when connecting to 5V UART. *
* There are currently (June 2021) few hardware options for debugging the Raspberry Pi Pico:
## On-Chip Debugging *
* 1. Via J-Link using one of Seggers debuggers
There are currently (June 2021) few hardware options for debugging the Raspberry Pi Pico: * 2. Via OpenOCD using a low-level bit-banging debugger (e.g. a Raspberry Pi 4B with the GPIOs
* connected to the Raspberry Pi Pico via jump wires)
1. Via J-Link using one of Seggers debuggers * 3. Via a recently updated [Black Magic Probe](https://github.com/blacksphere/blackmagic)
2. Via OpenOCD using a low-level bit-banging debugger (e.g. a Raspberry Pi 4B with the GPIOs *
connected to the Raspberry Pi Pico via jump wires) * In addition, a software-only option is possible using
3. Via a recently updated [Black Magic Probe](https://github.com/blacksphere/blackmagic) * [pico-debug](https://github.com/majbthrd/pico-debug). The default linker script reserved 16 KiB of
* RAM for this debugger, hence just "flash" the "gimme-cache" flavor into RAM using the UF2
In addition, a software-only option is possible using * bootloader. Once this is done, debugging is as simple as running:
[pico-debug](https://github.com/majbthrd/pico-debug). The default linker script reserved 16 KiB of *
RAM for this debugger, hence just "flash" the "gimme-cache" flavor into RAM using the UF2 * ```
bootloader. Once this is done, debugging is as simple as running: * make BOARD=rpi-pico debug
* ```
``` *
make BOARD=rpi-pico debug * ***Beware:*** The `rpi-pico` virtual debugger is not persistent and needs to be "flashed"
``` * into RAM again after each cold boot. The initialization code of RIOT now seems to play well with the
* debugger, so it remains persistent on soft reboots. If you face issues with losing connection to
***Beware:*** The `rpi-pico` virtual debugger is not persistent and needs to be "flashed" into RAM * the debugger on reboot, try `monitor reset init` in GDB to soft-reboot instead.
again after each cold boot. The initialization code of RIOT now seems to play well with the *
debugger, so it remains persistent on soft reboots. If you face issues with losing connection to * ## Known Issues / Problems
the debugger on reboot, try `monitor reset init` in GDB to soft-reboot instead. *
* ### Early State Implementation
## Known Issues / Problems *
* Currently no support for the following peripherals is implemented:
### Early state Implementation *
* - USB
Currently no support for the following peripherals is implemented: * - RTC
* - Watchdog
- Timers * - SMP support (multi CPU support is not implemented in RIOT)
- ADC *
- SPI * The I2C peripheral is implemented through the PIO.
- I2C *
- USB
- PIO
- RTC
- Watchdog
- SMP support (multi CPU support is not implemented in RIOT)
*/ */