xdebug

next generation of mdebug (work in progress)
git clone http://frotz.net/git/xdebug.git
Log | Files | Refs | README

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