Files
zephyr/subsys/dap/cmsis_dap.h
Johann Fischer cfd748fff1 dap: add header and macro to instantiate DAP context
Although we have the three layers, SWDP driver API, DAP stack, and USB
backend, to implement a debug probe, there is no way for the user to
instantiate the DAP context, which would allow it to be used with
different backends or to change the configuration at runtime.

The Debug Access Port (DAP) is an implementation of the ARM Debug
Interface (ADI) that is typically integrated into SoC.
With all three layers, we implement a link to the DAP on the SoC.
Let's call it Zephyr DAP Link and use the dap_link prefix. There is also
a MBED DAPLink project that implements similar functionality, but using
a different name would likely cause more confusion.

Signed-off-by: Johann Fischer <johann.fischer@nordicsemi.no>
2026-01-13 10:16:27 +01:00

137 lines
3.7 KiB
C

/*
* Copyright (c) 2018-2019 PHYTEC Messtechnik GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
/*
* This file is based on DAP.c from CMSIS-DAP Source (Revision: V2.0.0)
* https://github.com/ARM-software/CMSIS_5/tree/develop/CMSIS/DAP/Firmware
* Copyright (c) 2013-2017 ARM Limited. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/**
* @file
* @brief DAP controller private header
*/
#ifndef ZEPHYR_INCLUDE_CMSIS_DAP_H_
#define ZEPHYR_INCLUDE_CMSIS_DAP_H_
#include <stdint.h>
#include <zephyr/dap/dap_link.h>
/* Firmware Version */
#define DAP_FW_VER "2.1.0"
/* DAP Command IDs */
#define ID_DAP_INFO 0x00U
#define ID_DAP_HOST_STATUS 0x01U
#define ID_DAP_CONNECT 0x02U
#define ID_DAP_DISCONNECT 0x03U
#define ID_DAP_TRANSFER_CONFIGURE 0x04U
#define ID_DAP_TRANSFER 0x05U
#define ID_DAP_TRANSFER_BLOCK 0x06U
#define ID_DAP_TRANSFER_ABORT 0x07U
#define ID_DAP_WRITE_ABORT 0x08U
#define ID_DAP_DELAY 0x09U
#define ID_DAP_RESET_TARGET 0x0AU
#define ID_DAP_SWJ_PINS 0x10U
#define ID_DAP_SWJ_CLOCK 0x11U
#define ID_DAP_SWJ_SEQUENCE 0x12U
#define ID_DAP_SWDP_CONFIGURE 0x13U
#define ID_DAP_SWDP_SEQUENCE 0x1DU
#define ID_DAP_JTAG_SEQUENCE 0x14U
#define ID_DAP_JTAG_CONFIGURE 0x15U
#define ID_DAP_JTAG_IDCODE 0x16U
#define ID_DAP_SWO_TRANSPORT 0x17U
#define ID_DAP_SWO_MODE 0x18U
#define ID_DAP_SWO_BAUDRATE 0x19U
#define ID_DAP_SWO_CONTROL 0x1AU
#define ID_DAP_SWO_STATUS 0x1BU
#define ID_DAP_SWO_DATA 0x1CU
#define ID_DAP_UART_TRANSPORT 0x1FU
#define ID_DAP_UART_CONFIGURE 0x20U
#define ID_DAP_UART_CONTROL 0x22U
#define ID_DAP_UART_STATUS 0x23U
#define ID_DAP_UART_TRANSFER 0x21U
#define ID_DAP_QUEUE_COMMANDS 0x7EU
#define ID_DAP_EXECUTE_COMMANDS 0x7FU
/* DAP Vendor Command IDs */
#define ID_DAP_VENDOR0 0x80U
#define ID_DAP_VENDOR31 0x9FU
#define ID_DAP_INVALID 0xFFU
/* DAP Status Code */
#define DAP_OK 0U
#define DAP_ERROR 0xFFU
/* DAP ID */
#define DAP_ID_VENDOR 0x01U
#define DAP_ID_PRODUCT 0x02U
#define DAP_ID_SER_NUM 0x03U
#define DAP_ID_FW_VER 0x04U
#define DAP_ID_DEVICE_VENDOR 0x05U
#define DAP_ID_DEVICE_NAME 0x06U
#define DAP_ID_BOARD_VENDOR 0x07U
#define DAP_ID_BOARD_NAME 0x08U
#define DAP_ID_PRODUCT_FW_VER 0x09U
#define DAP_ID_CAPABILITIES 0xF0U
#define DAP_ID_TIMESTAMP_CLOCK 0xF1U
#define DAP_ID_UART_RX_BUFFER_SIZE 0xFBU
#define DAP_ID_UART_TX_BUFFER_SIZE 0xFCU
#define DAP_ID_SWO_BUFFER_SIZE 0xFDU
#define DAP_ID_PACKET_COUNT 0xFEU
#define DAP_ID_PACKET_SIZE 0xFFU
/* DAP Host Status */
#define DAP_DEBUGGER_CONNECTED 0U
#define DAP_TARGET_RUNNING 1U
/* DAP Port */
#define DAP_PORT_AUTODETECT 0U
#define DAP_PORT_DISABLED 0U
#define DAP_PORT_SWD 1U
#define DAP_PORT_JTAG 2U
/* DAP transfer request bits */
#define DAP_TRANSFER_MATCH_VALUE BIT(4)
#define DAP_TRANSFER_MATCH_MASK BIT(5)
/* DAP transfer response bits */
#define DAP_TRANSFER_MISMATCH BIT(4)
/* DAP controller capabilities */
#define DAP_DP_SUPPORTS_SWD BIT(0)
#define DAP_DP_SUPPORTS_JTAG BIT(1)
#define DAP_SWO_SUPPORTS_UART BIT(2)
#define DAP_SWO_SUPPORTS_MANCHESTER BIT(3)
#define DAP_SUPPORTS_ATOMIC_COMMANDS BIT(4)
#define DAP_SUPPORTS_TIMESTAMP_CLOCK BIT(5)
#define DAP_SWO_SUPPORTS_STREAM BIT(6)
/* DP Register (DPv1) */
#define DP_IDCODE 0x00U
#define DP_ABORT 0x00U
#define DP_CTRL_STAT 0x04U
#define DP_SELECT 0x08U
#define DP_RESEND 0x08U
#define DP_RDBUFF 0x0CU
#define DAP_MBMSG_REGISTER_IFACE 0x0U
#define DAP_MBMSG_FROM_IFACE 0x1U
#define DAP_MBMSG_FROM_CONTROLLER 0x2U
uint32_t dap_link_execute_cmd(struct dap_link_context *const dap_link_ctx,
const uint8_t *request, uint8_t *response);
#endif /* ZEPHYR_INCLUDE_CMSIS_DAP_H_ */