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

Dependencies:   SWD USBDevice mbed BaseDAP

Committer:
va009039
Date:
Sat Sep 28 03:21:14 2013 +0000
Revision:
1:ea8e179320d7
Parent:
0:2385683c867a
add USBMSD_Drop class. add CDC(Virtual COM) and HID(for example CMSIS-DAP), but KL25Z not work.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:2385683c867a 1 // mydebug.cpp 2013/4/22
va009039 0:2385683c867a 2 #include "mydebug.h"
va009039 1:ea8e179320d7 3
va009039 0:2385683c867a 4 #include <string.h>
va009039 0:2385683c867a 5 void debug_hex(uint8_t* buf, int len)
va009039 0:2385683c867a 6 {
va009039 0:2385683c867a 7 for(int i = 0; i < len; i++) {
va009039 0:2385683c867a 8 if ((i%16) == 0) {
va009039 0:2385683c867a 9 debug("+%04x:", i);
va009039 0:2385683c867a 10 }
va009039 0:2385683c867a 11 debug(" %02x", buf[i]);
va009039 0:2385683c867a 12 if ((i%16) == 15) {
va009039 0:2385683c867a 13 debug("\n");
va009039 0:2385683c867a 14 }
va009039 0:2385683c867a 15 }
va009039 0:2385683c867a 16 debug("\n");
va009039 0:2385683c867a 17 }
va009039 0:2385683c867a 18
va009039 0:2385683c867a 19 void debug_dap_request(uint8_t* buf, int len)
va009039 0:2385683c867a 20 {
va009039 0:2385683c867a 21 printf("uint8_t req[] = ");
va009039 0:2385683c867a 22 for(int i = 0; i < len; i++) {
va009039 0:2385683c867a 23 printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]);
va009039 0:2385683c867a 24 }
va009039 0:2385683c867a 25 printf("};\n");
va009039 0:2385683c867a 26 char* cmd;
va009039 0:2385683c867a 27 char* param = "";
va009039 0:2385683c867a 28 char tmp[128];
va009039 0:2385683c867a 29 uint32_t count;
va009039 0:2385683c867a 30 int disp_hex = 0;
va009039 0:2385683c867a 31 switch(buf[0]) {
va009039 0:2385683c867a 32 case 0x00:
va009039 0:2385683c867a 33 cmd = "Info";
va009039 0:2385683c867a 34 switch(buf[1]) {
va009039 0:2385683c867a 35 case 1: param = "VENDOR"; break;
va009039 0:2385683c867a 36 case 2: param = "PRODUCT"; break;
va009039 0:2385683c867a 37 case 3: param = "SER_NUM"; break;
va009039 0:2385683c867a 38 case 4: param = "FW_VER"; break;
va009039 0:2385683c867a 39 case 0xfe: param = "PACKET_COUNT"; break;
va009039 0:2385683c867a 40 case 0xff: param = "PACKET_SIZE"; break;
va009039 0:2385683c867a 41 default: param = "???"; break;
va009039 0:2385683c867a 42 }
va009039 0:2385683c867a 43 break;
va009039 0:2385683c867a 44 case 0x01:
va009039 0:2385683c867a 45 cmd = "LED";
va009039 0:2385683c867a 46 param = tmp;
va009039 0:2385683c867a 47 switch(buf[1]) {
va009039 0:2385683c867a 48 case 0: strcpy(tmp, "DEBUGGER_CONNECTED"); break;
va009039 0:2385683c867a 49 case 1: strcpy(tmp, "TARGET_RUNNING"); break;
va009039 0:2385683c867a 50 default: strcpy(tmp, "???"); break;
va009039 0:2385683c867a 51 }
va009039 0:2385683c867a 52 strcat(tmp, (buf[2]&0x01) ? " ON" : " OFF");
va009039 0:2385683c867a 53 break;
va009039 0:2385683c867a 54 case 0x02:
va009039 0:2385683c867a 55 cmd = "Connect";
va009039 0:2385683c867a 56 switch(buf[1]) {
va009039 0:2385683c867a 57 case 0: param = "AUTODETECT"; break;
va009039 0:2385683c867a 58 case 1: param = "SWD"; break;
va009039 0:2385683c867a 59 case 2: param = "JTAG"; break;
va009039 0:2385683c867a 60 default: param = "???"; break;
va009039 0:2385683c867a 61 }
va009039 0:2385683c867a 62 break;
va009039 0:2385683c867a 63 case 0x03: cmd = "Disconnect"; break;
va009039 0:2385683c867a 64 case 0x04: cmd = "TransferConfigure"; break;
va009039 0:2385683c867a 65 case 0x05:
va009039 0:2385683c867a 66 cmd = "Transfer";
va009039 0:2385683c867a 67 disp_hex = 16;
va009039 0:2385683c867a 68 break;
va009039 0:2385683c867a 69 case 0x06:
va009039 0:2385683c867a 70 cmd = "TransferBlock";
va009039 0:2385683c867a 71 disp_hex = 16;
va009039 0:2385683c867a 72 break;
va009039 0:2385683c867a 73 case 0x07: cmd = "TransferAbort"; break;
va009039 0:2385683c867a 74 case 0x08: cmd = "WriteABORT"; break;
va009039 0:2385683c867a 75 case 0x09: cmd = "Delay"; break;
va009039 0:2385683c867a 76 case 0x0a: cmd = "ResetTarget"; break;
va009039 0:2385683c867a 77 case 0x10:
va009039 0:2385683c867a 78 cmd = "SWJ_Pins";
va009039 0:2385683c867a 79 snprintf(tmp, sizeof(tmp), "wait: %d us", buf[3]|buf[4]<<8|buf[5]<<16|buf[6]<<24);
va009039 0:2385683c867a 80 if (buf[2] & 0x01) {
va009039 0:2385683c867a 81 strcat(tmp, " SWCLK_TCK ");
va009039 0:2385683c867a 82 strcat(tmp, (buf[1] & 0x01) ? "ON" : "OFF");
va009039 0:2385683c867a 83 }
va009039 0:2385683c867a 84 if (buf[2] & 0x02) {
va009039 0:2385683c867a 85 strcat(tmp, " SWDIO_TMS ");
va009039 0:2385683c867a 86 strcat(tmp, (buf[1] & 0x02) ? "ON" : "OFF");
va009039 0:2385683c867a 87 }
va009039 0:2385683c867a 88 if (buf[2] & 0x04) {
va009039 0:2385683c867a 89 strcat(tmp, " TDI ");
va009039 0:2385683c867a 90 strcat(tmp, (buf[1] & 0x04) ? "ON" : "OFF");
va009039 0:2385683c867a 91 }
va009039 0:2385683c867a 92 if (buf[2] & 0x08) {
va009039 0:2385683c867a 93 strcat(tmp, " TDO ");
va009039 0:2385683c867a 94 strcat(tmp, (buf[1] & 0x08) ? "ON" : "OFF");
va009039 0:2385683c867a 95 }
va009039 0:2385683c867a 96 if (buf[2] & 0x20) {
va009039 0:2385683c867a 97 strcat(tmp, " nTRST ");
va009039 0:2385683c867a 98 strcat(tmp, (buf[1] & 0x20) ? "ON" : "OFF");
va009039 0:2385683c867a 99 }
va009039 0:2385683c867a 100 if (buf[2] & 0x80) {
va009039 0:2385683c867a 101 strcat(tmp, " nRESET ");
va009039 0:2385683c867a 102 strcat(tmp, (buf[1] & 0x80) ? "ON" : "OFF");
va009039 0:2385683c867a 103 }
va009039 0:2385683c867a 104 param = tmp;
va009039 0:2385683c867a 105 break;
va009039 0:2385683c867a 106 case 0x11:
va009039 0:2385683c867a 107 cmd = "SWJ_Clock";
va009039 0:2385683c867a 108 snprintf(tmp, sizeof(tmp), "%d Hz", buf[1]|buf[2]<<8|buf[3]<<16|buf[4]<<24);
va009039 0:2385683c867a 109 param = tmp;
va009039 0:2385683c867a 110 break;
va009039 0:2385683c867a 111 case 0x12:
va009039 0:2385683c867a 112 cmd = "SWJ_Sequence";
va009039 0:2385683c867a 113 count = buf[1];
va009039 0:2385683c867a 114 snprintf(tmp, sizeof(tmp), "count: %d", count);
va009039 0:2385683c867a 115 param = tmp;
va009039 0:2385683c867a 116 break;
va009039 0:2385683c867a 117 case 0x13:
va009039 0:2385683c867a 118 cmd = "SWD_Configure";
va009039 0:2385683c867a 119 snprintf(tmp, sizeof(tmp), "turnaround: %d, data_phase: %d", (buf[1]&0x03)+1, (buf[1]&0x04) ? 1 : 0);
va009039 0:2385683c867a 120 param = tmp;
va009039 0:2385683c867a 121 break;
va009039 0:2385683c867a 122 case 0x14:
va009039 0:2385683c867a 123 cmd = "JTAG_Sequence";
va009039 0:2385683c867a 124 disp_hex = 16;
va009039 0:2385683c867a 125 break;
va009039 0:2385683c867a 126 default:
va009039 0:2385683c867a 127 cmd = "???";
va009039 0:2385683c867a 128 disp_hex = 16;
va009039 0:2385683c867a 129 break;
va009039 0:2385683c867a 130 }
va009039 0:2385683c867a 131 debug("DAP: %s %s ", cmd, param);
va009039 0:2385683c867a 132 for(int i = 0; i < disp_hex; i++) {
va009039 0:2385683c867a 133 debug("%02x ", buf[i]);
va009039 0:2385683c867a 134 }
va009039 0:2385683c867a 135 debug("\n");
va009039 0:2385683c867a 136 }
va009039 0:2385683c867a 137
va009039 0:2385683c867a 138 void debug_dap_response(uint8_t* buf, int len)
va009039 0:2385683c867a 139 {
va009039 0:2385683c867a 140 printf("uint8_t res[] = ");
va009039 0:2385683c867a 141 for(int i = 0; i < len; i++) {
va009039 0:2385683c867a 142 printf("%c0x%02x", i == 0 ? '{' : ',', buf[i]);
va009039 0:2385683c867a 143 }
va009039 0:2385683c867a 144 printf("};\n");
va009039 0:2385683c867a 145 }
va009039 0:2385683c867a 146
va009039 0:2385683c867a 147 void debug_swd_transfer(uint8_t request, uint32_t wdata, uint32_t rdata, uint8_t ack)
va009039 0:2385683c867a 148 {
va009039 0:2385683c867a 149 debug("SWD: ");
va009039 0:2385683c867a 150 if (ack != 0x01) {
va009039 0:2385683c867a 151 debug("ERR req=%02x wdata=%08x rdata=%08x ack=%02x\n", request, wdata, rdata, ack);
va009039 0:2385683c867a 152 return;
va009039 0:2385683c867a 153 }
va009039 0:2385683c867a 154 switch(request) {
va009039 0:2385683c867a 155 case 0x00: debug("DP_ABORT %08x", wdata); break;
va009039 0:2385683c867a 156 case 0x01: debug("AP_CSW W %08x", wdata); break;
va009039 0:2385683c867a 157 case 0x02: debug("DP_IDCODE %08x", rdata); break;
va009039 0:2385683c867a 158 case 0x03: debug("AP_CSW R %08x", rdata); break;
va009039 0:2385683c867a 159 case 0x04: debug("DP_CTRL_STAT W %08x", wdata); break;
va009039 0:2385683c867a 160 case 0x05: debug("AP_TAR W %08x", wdata); break;
va009039 0:2385683c867a 161 case 0x06: debug("DP_CTRL_STAT R %08x", rdata); break;
va009039 0:2385683c867a 162 case 0x07: debug("AP_TAR R %08x", rdata); break;
va009039 0:2385683c867a 163 case 0x08: debug("DP_SELECT %08x", wdata); break;
va009039 0:2385683c867a 164 case 0x0a: debug("DP_RESEND %08x", rdata); break;
va009039 0:2385683c867a 165 //case 0x0b: debug("DP_RDBUFF W %08x", wdata); break;
va009039 0:2385683c867a 166 case 0x0d: debug("AP_DRW W %08x", wdata); break;
va009039 0:2385683c867a 167 case 0x0e: debug("DP_RDBUFF %08x", rdata); break;
va009039 0:2385683c867a 168 case 0x0f: debug("AP_DRW R %08x", rdata); break;
va009039 0:2385683c867a 169 default:
va009039 0:2385683c867a 170 debug("request=%02x wdata=%08x rdata=%08x ack=%02x", request, wdata, rdata, ack);
va009039 0:2385683c867a 171 break;
va009039 0:2385683c867a 172 }
va009039 0:2385683c867a 173 debug(" request=%02x(%s %s %x) wdata=%08x rdata=%08x ack=%02x", request,
va009039 0:2385683c867a 174 request&1?"AP":"DP", request&2?"R":"nW",
va009039 0:2385683c867a 175 request&0xfc,
va009039 0:2385683c867a 176 wdata, rdata, ack);
va009039 0:2385683c867a 177 debug("\n");
va009039 0:2385683c867a 178 }