USB composite device example program, drag-and-drop flash writer.
Dependencies: SWD USBDevice mbed BaseDAP
Diff: tests/mydebug.cpp
- Revision:
- 0:2385683c867a
- Child:
- 1:ea8e179320d7
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/mydebug.cpp Tue Sep 17 04:33:44 2013 +0000 @@ -0,0 +1,180 @@ +// mydebug.cpp 2013/4/22 +#include "mydebug.h" +#ifdef MY_DEBUG +#include <string.h> +void debug_hex(uint8_t* buf, int len) +{ + for(int i = 0; i < len; i++) { + if ((i%16) == 0) { + debug("+%04x:", i); + } + debug(" %02x", buf[i]); + if ((i%16) == 15) { + debug("\n"); + } + } + debug("\n"); +} + +void debug_dap_request(uint8_t* buf, int len) +{ + printf("uint8_t req[] = "); + for(int i = 0; i < len; i++) { + printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]); + } + printf("};\n"); + char* cmd; + char* param = ""; + char tmp[128]; + uint32_t count; + int disp_hex = 0; + switch(buf[0]) { + case 0x00: + cmd = "Info"; + switch(buf[1]) { + case 1: param = "VENDOR"; break; + case 2: param = "PRODUCT"; break; + case 3: param = "SER_NUM"; break; + case 4: param = "FW_VER"; break; + case 0xfe: param = "PACKET_COUNT"; break; + case 0xff: param = "PACKET_SIZE"; break; + default: param = "???"; break; + } + break; + case 0x01: + cmd = "LED"; + param = tmp; + switch(buf[1]) { + case 0: strcpy(tmp, "DEBUGGER_CONNECTED"); break; + case 1: strcpy(tmp, "TARGET_RUNNING"); break; + default: strcpy(tmp, "???"); break; + } + strcat(tmp, (buf[2]&0x01) ? " ON" : " OFF"); + break; + case 0x02: + cmd = "Connect"; + switch(buf[1]) { + case 0: param = "AUTODETECT"; break; + case 1: param = "SWD"; break; + case 2: param = "JTAG"; break; + default: param = "???"; break; + } + break; + case 0x03: cmd = "Disconnect"; break; + case 0x04: cmd = "TransferConfigure"; break; + case 0x05: + cmd = "Transfer"; + disp_hex = 16; + break; + case 0x06: + cmd = "TransferBlock"; + disp_hex = 16; + break; + case 0x07: cmd = "TransferAbort"; break; + case 0x08: cmd = "WriteABORT"; break; + case 0x09: cmd = "Delay"; break; + case 0x0a: cmd = "ResetTarget"; break; + case 0x10: + cmd = "SWJ_Pins"; + snprintf(tmp, sizeof(tmp), "wait: %d us", buf[3]|buf[4]<<8|buf[5]<<16|buf[6]<<24); + if (buf[2] & 0x01) { + strcat(tmp, " SWCLK_TCK "); + strcat(tmp, (buf[1] & 0x01) ? "ON" : "OFF"); + } + if (buf[2] & 0x02) { + strcat(tmp, " SWDIO_TMS "); + strcat(tmp, (buf[1] & 0x02) ? "ON" : "OFF"); + } + if (buf[2] & 0x04) { + strcat(tmp, " TDI "); + strcat(tmp, (buf[1] & 0x04) ? "ON" : "OFF"); + } + if (buf[2] & 0x08) { + strcat(tmp, " TDO "); + strcat(tmp, (buf[1] & 0x08) ? "ON" : "OFF"); + } + if (buf[2] & 0x20) { + strcat(tmp, " nTRST "); + strcat(tmp, (buf[1] & 0x20) ? "ON" : "OFF"); + } + if (buf[2] & 0x80) { + strcat(tmp, " nRESET "); + strcat(tmp, (buf[1] & 0x80) ? "ON" : "OFF"); + } + param = tmp; + break; + case 0x11: + cmd = "SWJ_Clock"; + snprintf(tmp, sizeof(tmp), "%d Hz", buf[1]|buf[2]<<8|buf[3]<<16|buf[4]<<24); + param = tmp; + break; + case 0x12: + cmd = "SWJ_Sequence"; + count = buf[1]; + snprintf(tmp, sizeof(tmp), "count: %d", count); + param = tmp; + break; + case 0x13: + cmd = "SWD_Configure"; + snprintf(tmp, sizeof(tmp), "turnaround: %d, data_phase: %d", (buf[1]&0x03)+1, (buf[1]&0x04) ? 1 : 0); + param = tmp; + break; + case 0x14: + cmd = "JTAG_Sequence"; + disp_hex = 16; + break; + default: + cmd = "???"; + disp_hex = 16; + break; + } + debug("DAP: %s %s ", cmd, param); + for(int i = 0; i < disp_hex; i++) { + debug("%02x ", buf[i]); + } + debug("\n"); +} + +void debug_dap_response(uint8_t* buf, int len) +{ + printf("uint8_t res[] = "); + for(int i = 0; i < len; i++) { + printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]); + } + printf("};\n"); +} + +void debug_swd_transfer(uint8_t request, uint32_t wdata, uint32_t rdata, uint8_t ack) +{ + debug("SWD: "); + if (ack != 0x01) { + debug("ERR req=%02x wdata=%08x rdata=%08x ack=%02x\n", request, wdata, rdata, ack); + return; + } + switch(request) { + case 0x00: debug("DP_ABORT %08x", wdata); break; + case 0x01: debug("AP_CSW W %08x", wdata); break; + case 0x02: debug("DP_IDCODE %08x", rdata); break; + case 0x03: debug("AP_CSW R %08x", rdata); break; + case 0x04: debug("DP_CTRL_STAT W %08x", wdata); break; + case 0x05: debug("AP_TAR W %08x", wdata); break; + case 0x06: debug("DP_CTRL_STAT R %08x", rdata); break; + case 0x07: debug("AP_TAR R %08x", rdata); break; + case 0x08: debug("DP_SELECT %08x", wdata); break; + case 0x0a: debug("DP_RESEND %08x", rdata); break; + //case 0x0b: debug("DP_RDBUFF W %08x", wdata); break; + case 0x0d: debug("AP_DRW W %08x", wdata); break; + case 0x0e: debug("DP_RDBUFF %08x", rdata); break; + case 0x0f: debug("AP_DRW R %08x", rdata); break; + default: + debug("request=%02x wdata=%08x rdata=%08x ack=%02x", request, wdata, rdata, ack); + break; + } + debug(" request=%02x(%s %s %x) wdata=%08x rdata=%08x ack=%02x", request, + request&1?"AP":"DP", request&2?"R":"nW", + request&0xfc, + wdata, rdata, ack); + debug("\n"); +} + +#endif