USB composite device example program, drag-and-drop flash writer.

Dependencies:   SWD USBDevice mbed BaseDAP

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers mydebug.cpp Source File

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 }