Skip to content

Commit

Permalink
boards: arm: sparkfun_pro_micro_rp2040: Support JTAG
Browse files Browse the repository at this point in the history
Add SWD debugger support for this board.  Although there is not a debug
header, the SWD pins are accessible and the adaptor is not that difficult
to wire up.  This will allow for debugging beyond just flashing, that the
UF2 programming setup allows for.

Signed-off-by: David Brown <[email protected]>
  • Loading branch information
d3zd3z authored and dleach02 committed Apr 3, 2024
1 parent bba8641 commit a747470
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 6 deletions.
39 changes: 39 additions & 0 deletions boards/sparkfun/pro_micro_rp2040/board.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# SPDX-License-Identifier: Apache-2.0

# This configuration allows selecting what debug adapter debugging to use
# for the SparkFun Pro Micro RP2040 by a command-line argument.
# It is mainly intended to support both the 'picoprobe' and 'raspberrypi-swd'
# adapter described in "Getting started with Raspberry Pi Pico".
# And any other SWD debug adapter might also be usable with this configuration.

# Note that the Pro Micro RP2040 SWD pins are test points on the underside
# of the board.

# Set RPI_PICO_DEBUG_ADAPTER to select debug adapter by command-line arguments.
# e.g.) west build -b rpi_pico -- -DRPI_PICO_DEBUG_ADAPTER=raspberrypi-swd
# The value is treated as a part of an interface file name that
# the debugger's configuration file.
# The value must be the 'stem' part of the name of one of the files
# in the openocd interface configuration file.
# The setting is store to CMakeCache.txt.
if ("${RPI_PICO_DEBUG_ADAPTER}" STREQUAL "")
set(RPI_PICO_DEBUG_ADAPTER "cmsis-dap")
endif()

board_runner_args(openocd --cmd-pre-init "source [find interface/${RPI_PICO_DEBUG_ADAPTER}.cfg]")
board_runner_args(openocd --cmd-pre-init "transport select swd")
board_runner_args(openocd --cmd-pre-init "source [find target/rp2040.cfg]")

# The adapter speed is expected to be set by interface configuration.
# But if not so, set 2000 to adapter speed.
board_runner_args(openocd --cmd-pre-init "set_adapter_speed_if_not_set 2000")

board_runner_args(jlink "--device=RP2040_M0_0")
board_runner_args(uf2 "--board-id=RPI-RP2")
board_runner_args(pyocd "--target=rp2040")

include(${ZEPHYR_BASE}/boards/common/uf2.board.cmake)
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
14 changes: 8 additions & 6 deletions boards/sparkfun/pro_micro_rp2040/doc/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,14 @@ Flashing
Using UF2
---------

Since it doesn't expose the SWD pins, you must flash the SparkFun Pro Micro
RP2040 with a UF2 file. By default, building an app for this board will
generate a `build/zephyr/zephyr.uf2` file. If the Pro Micro RP2040 is powered
on with the `BOOTSEL` button pressed, it will appear on the host as a mass
storage device. The UF2 file should be drag-and-dropped to the device, which
will flash the Pro Micro RP2040.
The Pro Micro board does make the SWD pins available on pads on the
underside of the board. You can solder to these pins, and use a JTag
debugger. You can also flash the SparkFun ProMicro RP2040 with a UF2 file.
By default, building an app for this board will generate a
`build/zephyr/zephyr.uf2` file. If the Pro Micro RP2040 is powered on with
the `BOOTSEL` button pressed, it will appear on the host as a mass storage
device. The UF2 file should be copied to the device, which will
flash the Pro Micro RP2040.

.. target-notes::

Expand Down
11 changes: 11 additions & 0 deletions boards/sparkfun/pro_micro_rp2040/support/openocd.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Copyright (c) 2022 Tokita, Hiroshi <[email protected]>
# SPDX-License-Identifier: Apache-2.0

# Checking and set 'adapter speed'.
# Set adapter speed that assigned by argument if not be seted.
proc set_adapter_speed_if_not_set { speed } {
puts "checking adapter speed..."
if { [catch {adapter speed} ret] } {
adapter speed $speed
}
}

0 comments on commit a747470

Please sign in to comment.