# 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" )