cmsis-dap-protocol.h (4170B)
1 // Copyright 2023, Brian Swetland <swetland@frotz.net> 2 // Licensed under the Apache License, Version 2.0. 3 4 // see: https://arm-software.github.io/CMSIS_5/DAP/html/index.html 5 6 #pragma once 7 8 #define DAP_Info 0x00 // BYTE(DI_*) 9 // Response LEN BYTES[LEN] 10 11 #define DI_Vendor_Name 0x01 12 #define DI_Product_Name 0x02 13 #define DI_Serial_Number 0x03 14 #define DI_Protocol_Version 0x04 15 #define DI_Target_Device_Vendor 0x05 16 #define DI_Target_Device_Name 0x06 17 #define DI_Target_Board_Vendor 0x07 18 #define DI_Target_Board_Name 0x08 19 #define DI_Product_Firmware_Version 0x09 20 #define DI_Capabilities 0xF0 // BYTE 21 #define DI_Test_Domain_Timer 0xF1 // DWORD 22 #define DI_UART_RX_Buffer_Size 0xFB // WORD 23 #define DI_UART_TX_Buffer_Size 0xFC // WORD 24 #define DI_SWO_Trace_Buffer_Size 0xFD // WORD 25 #define DI_Max_Packet_Count 0xFE // BYTE 26 #define DI_Max_Packet_Size 0xFF // SHORT 27 28 // Capabilities Reply 0x00 LEN I0 I1 29 #define I0_SWD 0x01 30 #define I0_JTAG 0x02 31 #define I0_SWO_UART 0x04 32 #define I0_SWO_Manchester 0x08 33 #define I0_Atomic_Commands 0x10 34 #define I0_Test_Domain_Timer 0x20 35 #define I0_SWO_Streaming_Trace 0x40 36 #define I0_UART_Comm_Port 0x80 37 38 #define I1_USB_COM_Port 0x01 39 40 41 #define DAP_HostStatus 0x01 // BYTE(Type) BYTE(ZeroOffOneOn) 42 // set host status LEDs 43 #define HS_Type_Connected 0 44 #define HS_Type_Running 1 45 46 #define DAP_Connect 0x02 // BYTE(Port) 47 // Reponse BYTE(Port) 48 49 #define PORT_DEFAULT 0 50 #define PORT_SWD 1 51 #define PORT_JTAG 2 52 53 #define DAP_Disconnect 0x03 54 55 #define DAP_WriteABORT 0x08 // BYTE(Index) WORD(value) 56 // Write an abort request to the target 57 58 #define DAP_Delay 0x09 // SHORT(DelayMicros) 59 60 #define DAP_ResetTarget 0x0A 61 // Response BYTE(Status) BYTE(Execute) 62 // Execute 1 = device specific reset sequence implemented 63 64 #define DAP_SWJ_Clock 0x11 // WORD(hz) 65 // Response BYTE(Status) 66 67 #define DAP_SWJ_Pins 0x10 // BYTE(PinOut) BYTE(PinSel) WORD(PinWaitMicros) 68 // Response BYTE(PinInput) 69 // Modify pins (PinOut) where selected (PinSel) 70 71 #define PIN_SWCLK 0x01 72 #define PIN_TCK 0x01 73 #define PIN_SWDIO 0x02 74 #define PIN_TMS 0x02 75 #define PIN_TDI 0x04 76 #define PIN_TDO 0x08 77 #define PIN_nTRST 0x20 78 #define PIN_nRESET 0x80 79 80 #define DAP_SWD_Configure 0x13 // BYTE(Config) 81 #define CFG_Turnaround_1 0x00 82 #define CFG_Turnaround_2 0x01 83 #define CFG_Turnaround_3 0x02 84 #define CFG_Turnaround_4 0x03 85 #define CFG_AlwaysDataPhase 0x04 86 87 #define DAP_SWD_Sequence 0x1D 88 // First Byte is Count 89 // Then one Info byte (and, if output, data) per Count 90 // Data is LSB first, padded to byte boundary 91 #define SEQ_OUTPUT 0x00 92 #define SEQ_INPUT 0x80 93 // Response: BYTE(STATUS) DATA (LSB first) 94 95 96 #define DAP_TransferConfigure 0x04 97 // BYTE(IdleCycles) SHORT(WaitRetry) SHORT(MatchRetry) 98 // idle cycles - number of extra idle cycles after each transfer 99 // wait retry - max number of retries after WAIT response 100 // match retry - max number of retries on reads w/ value match 101 102 #define DAP_Transfer 0x05 103 // BYTE(Index) BYTE(Count) followed by Count instances of 104 // BYTE(XferReq) WORD(Value) WORD(MatchMask) WORD(ValueMatch) 105 #define XFER_DP 0x00 106 #define XFER_AP 0x01 107 #define XFER_WR 0x00 108 #define XFER_RD 0x02 109 #define XFER_00 0x00 110 #define XFER_04 0x04 111 #define XFER_08 0x08 112 #define XFER_0C 0x0C 113 #define XFER_ValueMatch 0x10 114 #define XFER_MatchMask 0x20 115 #define XFER_TimeStamp 0x80 116 117 #define RSP_ACK_MASK 0x07 118 #define RSP_ACK_OK 0x01 119 #define RSP_ACK_WAIT 0x02 120 #define RSP_ACK_FAULT 0x04 121 #define RSP_ProtocolError 0x08 122 #define RSP_ValueMismatch 0x10 123 // Reponse BYTE(Count) BYTE(Response) WORD(TimeStamp)? WORD(Data)* 124 125 #define DAP_TransferBlock 0x06 126 // BYTE(Index) SHORT(Count) BYTE(XferReq) WORD(Data)* 127 // XFER as above but not ValueMatch/MatchMask/TimeStamp 128 // Response SHORT(Count) BYTE(Response) WORD(Data)* 129 130 #define DAP_ExecuteCommands 0x7F 131 // BYTE(Count) Count x Commands 132 // Response BYTE(Count) Count x Responses 133 134 #define DAP_QueueCommands 0x7E 135 // as above but N packets can be sent 136 // first non-queue-commands packet triggers execution 137