6namespace LibXR::Debug::SwdProtocol
11enum class Port : uint8_t
20enum class Pin : uint8_t
32enum class Ack : uint8_t
58 Ack
ack = Ack::PROTOCOL;
66enum class DpReadReg : uint8_t
77enum class DpWriteReg : uint8_t
90inline constexpr uint32_t DP_ABORT_DAPABORT = (1u << 0);
91inline constexpr uint32_t DP_ABORT_STKCMPCLR = (1u << 1);
92inline constexpr uint32_t DP_ABORT_STKERRCLR = (1u << 2);
93inline constexpr uint32_t DP_ABORT_WDERRCLR = (1u << 3);
94inline constexpr uint32_t DP_ABORT_ORUNERRCLR = (1u << 4);
99inline constexpr uint32_t DP_CTRLSTAT_CDBGPWRUPREQ =
101inline constexpr uint32_t DP_CTRLSTAT_CDBGPWRUPACK =
103inline constexpr uint32_t DP_CTRLSTAT_CSYSPWRUPREQ =
105inline constexpr uint32_t DP_CTRLSTAT_CSYSPWRUPACK =
117constexpr uint32_t make_select(uint8_t apsel, uint8_t apbanksel, uint8_t dpbanksel = 0)
119 return (
static_cast<uint32_t
>(apsel) << 24) |
120 ((
static_cast<uint32_t
>(apbanksel) & 0x0Fu) << 4) |
121 (
static_cast<uint32_t
>(dpbanksel) & 0x0Fu);
130constexpr Request make_dp_read_req(DpReadReg reg)
132 return Request{Port::DP,
true,
static_cast<uint8_t
>(reg), 0u};
142constexpr Request make_dp_write_req(DpWriteReg reg, uint32_t wdata)
144 return Request{Port::DP,
false,
static_cast<uint8_t
>(reg), wdata};
153constexpr Request make_ap_read_req(uint8_t addr2b)
155 return Request{Port::AP,
true,
static_cast<uint8_t
>(addr2b & 0x03u), 0u};
165constexpr Request make_ap_write_req(uint8_t addr2b, uint32_t wdata)
167 return Request{Port::AP,
false,
static_cast<uint8_t
>(addr2b & 0x03u), wdata};
SWD 传输请求 / SWD transfer request.
bool rnw
读写标志:true=读,false=写 / Read-not-write: true=read, false=write
uint32_t wdata
写数据(仅写请求有效)/ Write data (valid for write requests)
uint8_t addr2b
A[3:2] 两位地址编码(0..3)/ A[3:2] encoded as 0..3.
Port port
目标端口(DP/AP)/ Target port (DP/AP)
SWD 传输响应 / SWD transfer response.
bool parity_ok
奇偶校验是否正确 / Whether parity is OK
uint32_t rdata
读数据(仅读响应有效)/ Read data (valid for read responses)