It allows for multiple SWD transfers in the same request, masked polling for some bits, multiple pending requests. I have not looked at the picoprobe, no idea how it is different from CMSIS-DAP.
CMSIS DAP commands are much higher level than the PP ones, as you say, the DAP_Transfer command can read or write a number of registers in APs and DPs, the interface can be configured with the number of retries etc. etc.
The pico probe command set is:
- Write the following
n bits to SWD.
- Read
n bits.
- Set SWD frequency to
f.
Don't push it, though, signal integrity is meh, and the DS for RP2040 does not even tell us what the expected rise and fall times are.
There is no notion
in the probe of APs, DPs, and registers.
As said: the debug server/driver just bitbangs the SWD using USB as a transport.
A single write transaction command (with USB direction):
- Write the command word (OUT)
- Read 5 bits: 1 turnaround, ACK, 1 turnaround (OUT)
- Wait to receive the 5 bits (IN)
- If ACK was OK, Write 32 bits data + 1 bit parity (OUT)
- If ACK was not OK, handle the fault
Slow, as the host needs to wait for the ACK bits before sending the data*.
And if it gets confused it will hang indefinitely.
* I cheat in pyocd, and just assume unicorns and rainbows. I provided an option to be a good boy, but it's painfully slow.