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 = (1u << 28);
100inline constexpr uint32_t DP_CTRLSTAT_CDBGPWRUPACK = (1u << 29);
101inline constexpr uint32_t DP_CTRLSTAT_CSYSPWRUPREQ = (1u << 30);
102inline constexpr uint32_t DP_CTRLSTAT_CSYSPWRUPACK = (1u << 31);
113constexpr uint32_t make_select(uint8_t apsel, uint8_t apbanksel, uint8_t dpbanksel = 0)
115 return (
static_cast<uint32_t
>(apsel) << 24) |
116 ((
static_cast<uint32_t
>(apbanksel) & 0x0Fu) << 4) |
117 (
static_cast<uint32_t
>(dpbanksel) & 0x0Fu);
126constexpr Request make_dp_read_req(DpReadReg reg)
128 return Request{Port::DP,
true,
static_cast<uint8_t
>(reg), 0u};
138constexpr Request make_dp_write_req(DpWriteReg reg, uint32_t wdata)
140 return Request{Port::DP,
false,
static_cast<uint8_t
>(reg), wdata};
149constexpr Request make_ap_read_req(uint8_t addr2b)
151 return Request{Port::AP,
true,
static_cast<uint8_t
>(addr2b & 0x03u), 0u};
161constexpr Request make_ap_write_req(uint8_t addr2b, uint32_t wdata)
163 return Request{Port::AP,
false,
static_cast<uint8_t
>(addr2b & 0x03u), wdata};
@ OK
操作成功 / Operation successful
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)