USB composite device example program, drag-and-drop flash writer.
Dependencies: SWD USBDevice mbed BaseDAP
mydebug.cpp
00001 // mydebug.cpp 2013/4/22 00002 #include "mydebug.h" 00003 00004 #include <string.h> 00005 void debug_hex(uint8_t* buf, int len) 00006 { 00007 for(int i = 0; i < len; i++) { 00008 if ((i%16) == 0) { 00009 debug("+%04x:", i); 00010 } 00011 debug(" %02x", buf[i]); 00012 if ((i%16) == 15) { 00013 debug("\n"); 00014 } 00015 } 00016 debug("\n"); 00017 } 00018 00019 void debug_dap_request(uint8_t* buf, int len) 00020 { 00021 printf("uint8_t req[] = "); 00022 for(int i = 0; i < len; i++) { 00023 printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]); 00024 } 00025 printf("};\n"); 00026 char* cmd; 00027 char* param = ""; 00028 char tmp[128]; 00029 uint32_t count; 00030 int disp_hex = 0; 00031 switch(buf[0]) { 00032 case 0x00: 00033 cmd = "Info"; 00034 switch(buf[1]) { 00035 case 1: param = "VENDOR"; break; 00036 case 2: param = "PRODUCT"; break; 00037 case 3: param = "SER_NUM"; break; 00038 case 4: param = "FW_VER"; break; 00039 case 0xfe: param = "PACKET_COUNT"; break; 00040 case 0xff: param = "PACKET_SIZE"; break; 00041 default: param = "???"; break; 00042 } 00043 break; 00044 case 0x01: 00045 cmd = "LED"; 00046 param = tmp; 00047 switch(buf[1]) { 00048 case 0: strcpy(tmp, "DEBUGGER_CONNECTED"); break; 00049 case 1: strcpy(tmp, "TARGET_RUNNING"); break; 00050 default: strcpy(tmp, "???"); break; 00051 } 00052 strcat(tmp, (buf[2]&0x01) ? " ON" : " OFF"); 00053 break; 00054 case 0x02: 00055 cmd = "Connect"; 00056 switch(buf[1]) { 00057 case 0: param = "AUTODETECT"; break; 00058 case 1: param = "SWD"; break; 00059 case 2: param = "JTAG"; break; 00060 default: param = "???"; break; 00061 } 00062 break; 00063 case 0x03: cmd = "Disconnect"; break; 00064 case 0x04: cmd = "TransferConfigure"; break; 00065 case 0x05: 00066 cmd = "Transfer"; 00067 disp_hex = 16; 00068 break; 00069 case 0x06: 00070 cmd = "TransferBlock"; 00071 disp_hex = 16; 00072 break; 00073 case 0x07: cmd = "TransferAbort"; break; 00074 case 0x08: cmd = "WriteABORT"; break; 00075 case 0x09: cmd = "Delay"; break; 00076 case 0x0a: cmd = "ResetTarget"; break; 00077 case 0x10: 00078 cmd = "SWJ_Pins"; 00079 snprintf(tmp, sizeof(tmp), "wait: %d us", buf[3]|buf[4]<<8|buf[5]<<16|buf[6]<<24); 00080 if (buf[2] & 0x01) { 00081 strcat(tmp, " SWCLK_TCK "); 00082 strcat(tmp, (buf[1] & 0x01) ? "ON" : "OFF"); 00083 } 00084 if (buf[2] & 0x02) { 00085 strcat(tmp, " SWDIO_TMS "); 00086 strcat(tmp, (buf[1] & 0x02) ? "ON" : "OFF"); 00087 } 00088 if (buf[2] & 0x04) { 00089 strcat(tmp, " TDI "); 00090 strcat(tmp, (buf[1] & 0x04) ? "ON" : "OFF"); 00091 } 00092 if (buf[2] & 0x08) { 00093 strcat(tmp, " TDO "); 00094 strcat(tmp, (buf[1] & 0x08) ? "ON" : "OFF"); 00095 } 00096 if (buf[2] & 0x20) { 00097 strcat(tmp, " nTRST "); 00098 strcat(tmp, (buf[1] & 0x20) ? "ON" : "OFF"); 00099 } 00100 if (buf[2] & 0x80) { 00101 strcat(tmp, " nRESET "); 00102 strcat(tmp, (buf[1] & 0x80) ? "ON" : "OFF"); 00103 } 00104 param = tmp; 00105 break; 00106 case 0x11: 00107 cmd = "SWJ_Clock"; 00108 snprintf(tmp, sizeof(tmp), "%d Hz", buf[1]|buf[2]<<8|buf[3]<<16|buf[4]<<24); 00109 param = tmp; 00110 break; 00111 case 0x12: 00112 cmd = "SWJ_Sequence"; 00113 count = buf[1]; 00114 snprintf(tmp, sizeof(tmp), "count: %d", count); 00115 param = tmp; 00116 break; 00117 case 0x13: 00118 cmd = "SWD_Configure"; 00119 snprintf(tmp, sizeof(tmp), "turnaround: %d, data_phase: %d", (buf[1]&0x03)+1, (buf[1]&0x04) ? 1 : 0); 00120 param = tmp; 00121 break; 00122 case 0x14: 00123 cmd = "JTAG_Sequence"; 00124 disp_hex = 16; 00125 break; 00126 default: 00127 cmd = "???"; 00128 disp_hex = 16; 00129 break; 00130 } 00131 debug("DAP: %s %s ", cmd, param); 00132 for(int i = 0; i < disp_hex; i++) { 00133 debug("%02x ", buf[i]); 00134 } 00135 debug("\n"); 00136 } 00137 00138 void debug_dap_response(uint8_t* buf, int len) 00139 { 00140 printf("uint8_t res[] = "); 00141 for(int i = 0; i < len; i++) { 00142 printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]); 00143 } 00144 printf("};\n"); 00145 } 00146 00147 void debug_swd_transfer(uint8_t request, uint32_t wdata, uint32_t rdata, uint8_t ack) 00148 { 00149 debug("SWD: "); 00150 if (ack != 0x01) { 00151 debug("ERR req=%02x wdata=%08x rdata=%08x ack=%02x\n", request, wdata, rdata, ack); 00152 return; 00153 } 00154 switch(request) { 00155 case 0x00: debug("DP_ABORT %08x", wdata); break; 00156 case 0x01: debug("AP_CSW W %08x", wdata); break; 00157 case 0x02: debug("DP_IDCODE %08x", rdata); break; 00158 case 0x03: debug("AP_CSW R %08x", rdata); break; 00159 case 0x04: debug("DP_CTRL_STAT W %08x", wdata); break; 00160 case 0x05: debug("AP_TAR W %08x", wdata); break; 00161 case 0x06: debug("DP_CTRL_STAT R %08x", rdata); break; 00162 case 0x07: debug("AP_TAR R %08x", rdata); break; 00163 case 0x08: debug("DP_SELECT %08x", wdata); break; 00164 case 0x0a: debug("DP_RESEND %08x", rdata); break; 00165 //case 0x0b: debug("DP_RDBUFF W %08x", wdata); break; 00166 case 0x0d: debug("AP_DRW W %08x", wdata); break; 00167 case 0x0e: debug("DP_RDBUFF %08x", rdata); break; 00168 case 0x0f: debug("AP_DRW R %08x", rdata); break; 00169 default: 00170 debug("request=%02x wdata=%08x rdata=%08x ack=%02x", request, wdata, rdata, ack); 00171 break; 00172 } 00173 debug(" request=%02x(%s %s %x) wdata=%08x rdata=%08x ack=%02x", request, 00174 request&1?"AP":"DP", request&2?"R":"nW", 00175 request&0xfc, 00176 wdata, rdata, ack); 00177 debug("\n"); 00178 }
Generated on Wed Jul 13 2022 08:08:25 by 1.7.2