blob: d8869e2160a90b843d23e59eb842bb6a2462379f [file] [log] [blame]
/*
* 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 <zephyr/kernel.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
/* Keep it internal until an other interface has been implemented. */
int dap_setup(const struct device *const dev);
uint32_t dap_execute_cmd(const uint8_t *request, uint8_t *response);
#endif /* ZEPHYR_INCLUDE_CMSIS_DAP_H_ */