mbed-os/tools/cmake/upload_methods/UploadMethodREDLINK.cmake

92 lines
2.9 KiB
CMake

# Copyright (c) 2022 ARM Limited. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
### Redlink Upload Method
# This method needs the following parameters:
# REDLINK_PART_NUMBER - Part number (-p) argument to pass to the upload tool
# REDLINK_PART_XML_DIR - Directory where the XML files for this MCU can be found.
# REDLINK_CLOCK_SPEED - JTAG/SWD clock speed to talk to the target at.
# REDLINK_CONNECT_ARGS - Extra connect arguments to pass to Redlink tool. These can be gotten by watching the command that MCUXpresso IDE executes when you start a debug session.
# This method creates the following options:
# REDLINK_PROBE_SN - Serial number of the debug probe to connect to. If blank, will connect to any probe.
set(UPLOAD_SUPPORTS_DEBUG TRUE)
### Handle options
set(REDLINK_PROBE_SN "" CACHE STRING "Serial number of the debug probe to connect to for Redlink. Set to empty to detect any matching adapter.")
if("${REDLINK_PROBE_SN}" STREQUAL "")
# This argument causes Redlink to connect to the first available debug probe
set(REDLINK_PROBE_ARGS --probehandle 1 CACHE INTERNAL "" FORCE)
else()
set(REDLINK_PROBE_ARGS --probeserial ${REDLINK_PROBE_SN} CACHE INTERNAL "" FORCE)
endif()
if("${REDLINK_PART_NUMBER}" STREQUAL "")
message(FATAL_ERROR "You must set REDLINK_PART_NUMBER in your CMake scripts to use REDLINK")
endif()
if("${REDLINK_PART_XML_DIR}" STREQUAL "")
message(FATAL_ERROR "You must set REDLINK_PART_XML_DIR in your CMake scripts to use REDLINK")
endif()
if("${REDLINK_CLOCK_SPEED}" STREQUAL "")
message(FATAL_ERROR "You must set REDLINK_CLOCK_SPEED in your CMake scripts to use REDLINK")
endif()
### Check if upload method can be enabled on this machine
find_package(Redlink)
set(UPLOAD_REDLINK_FOUND ${Redlink_FOUND})
### Function to generate upload target
function(gen_upload_target TARGET_NAME BIN_FILE HEX_FILE)
add_custom_target(flash-${TARGET_NAME}
COMMENT "Flashing ${TARGET_NAME} with Redlink..."
COMMAND ${crt_emu_cm_redlink_PATH}
-p ${REDLINK_PART_NUMBER}
--flash-hashing
-x ${REDLINK_PART_XML_DIR}
--flash-dir ${REDLINK_FLASH_LOADER_PATH}
-g
-s ${REDLINK_CLOCK_SPEED}
${REDLINK_CONNECT_ARGS}
${REDLINK_PROBE_ARGS}
--flash-load-exec $<TARGET_FILE:${TARGET_NAME}>)
add_dependencies(flash-${TARGET_NAME} ${TARGET_NAME})
endfunction(gen_upload_target)
### Commands to run the debug server.
set(UPLOAD_GDBSERVER_DEBUG_COMMAND
${crt_emu_cm_redlink_PATH}
-p ${REDLINK_PART_NUMBER}
--flash-hashing
-x ${REDLINK_PART_XML_DIR}
--flash-dir ${REDLINK_FLASH_LOADER_PATH}
-g
-s ${REDLINK_CLOCK_SPEED}
-2
${REDLINK_CONNECT_ARGS}
${REDLINK_PROBE_ARGS}
--server :${GDB_PORT}
--vc
--connect-reset system
--kill-server # Close Redlink when GDB exits
)
# request extended-remote GDB sessions
set(UPLOAD_WANTS_EXTENDED_REMOTE TRUE)
set(UPLOAD_LAUNCH_COMMANDS
"monitor reset" # undocumented, but works
"load"
"break main"
"monitor reset"
)
set(UPLOAD_RESTART_COMMANDS
"monitor reset"
)