pico-debug/README.md

49 wiersze
3.1 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Description
RP2040 has two ARM Cortex-M0+ cores, and the second core normally remains dormant.
pico-debug runs on one core in a RP2040 and provides a USB CMSIS-DAP interface to debug the other core. No hardware is added; it is as if there were a virtual debug pod built-in.
Boot the RP2040 with the BOOTSEL button pressed, copy over pico-debug.uf2, and it immediately reboots as a CMSIS-DAP adapter. pico-debug loads as a RAM only .uf2 image, meaning that it is never written to flash and doesn't replace existing user code.
To cater to different user situations, there are two versions of pico-debug to [download](https://github.com/majbthrd/pico-debug/releases): **MAXRAM** and **GIMMECACHE**
Most users (including all [arduino-pico](https://github.com/earlephilhower/arduino-pico) users) should use the **GIMMECACHE** version.
With **pico-debug-maxram**, *all* 264kBytes of SRAM on the RP2040 is available for running user code; pico-debug shoehorns itself entirely into the 16kBytes of XIP_SRAM (aka flash cache).
With **pico-debug-gimmecache**, 248kBytes (94% of total) of SRAM is available for running user code; pico-debug gives plenty of elbow room by occupying only 6% near the very top of SRAM, and unlike MAXRAM, leaves the flash cache operational.
If viewing this on github, pre-built binaries are available for [download](https://github.com/majbthrd/pico-debug/releases) on the right under "Releases".
## Why pico-debug exists
pico-debug provides a debugger with only one RP2040 board instead of another debuggers approach with two RP2040 boards plus fiddly wiring; this makes this capability more accessible to all users and means that any RP2040-based design can have this latent debug capability without added cost.
pico-debug uses the CMSIS-DAP standard, making it compatible with the considerable amount of software development that has already gone into an array of existing CMSIS-DAP compatible IDEs. This standards-based approach seems far preferable to re-inventing the wheel with yet another proprietary debugger protocol.
## How to use
Please read [howto/README.md](howto/README.md) for instructions on how to start using pico-debug.
## Caveats whilst using pico-debug
The executive summary is:
pico-debug uses the USB port to provide debugging to the user, so the user's app can't be simultaneously using the USB port! :)
The specifics are:
- MAXRAM only: the flash cache cannot be used by the user code, as pico-debug is using this memory
- GIMMECACHE only: SRAM 0x2003C000 to 0x2003FFFF must not be used by user code
- user code cannot reconfigure the PLL_USB, as the USB peripheral needs this
- after loading the pico-debug .uf2 and subsequently starting to run user code, CLK_SYS starts in a configuration where it is being fed by the 48MHz PLL_USB; Pico SDK users shouldn't care, but bare-metal developers might want to know this
- the USB peripheral is used to provide the debugger, so the user code cannot use it as well
## License
TinyUSB and code specific to pico-debug is licensed under the [MIT license](https://opensource.org/licenses/MIT).
ARM's CMSIS_5 code is licensed under the [Apache 2.0 license](https://opensource.org/licenses/Apache-2.0).