semihost server example program
Dependencies: SWD mbed USBLocalFileSystem BaseDAP USBDAP
LPCXpresso LPC11U68 | LPCXpresso LPC1549 | FRDM-KL46Z | EA LPC4088 QSB app-board | LPC1768 app-board | LPC810 | LPC1114FN28 | |
---|---|---|---|---|---|---|---|
server | server | server | server | server | client | client | |
SWDIO | D12 | D12 | D12 | p25 | p21 | p4(P0_2) | p12 |
SWCLK | D10 | D10 | D10 | p26 | p22 | p3(P0_3) | p3 |
nRESET *option | D6 | D6 | D6 | p34 | p30 | p1(P0_5) | p23 |
GND | GND | GND | GND | p1 | p1 | p7 | p22 |
3.3V | P3V3 | P3V3 | P3V3 | p44 | p40 | p6 | p21 |
flash write | SW2(P0_1) | SW3(P1_9) | SW1 | p14 joystick center | p14 joystick center |
client example:
Import programlpc810-semihost_helloworld
semihost client example program
tests/test1_BaseDAP.cpp@18:5ed1759e863b, 2014-06-22 (annotated)
- Committer:
- va009039
- Date:
- Sun Jun 22 12:04:16 2014 +0000
- Revision:
- 18:5ed1759e863b
- Parent:
- 5:2774358f5e4f
add LPC11U68 interface.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 5:2774358f5e4f | 1 | // test1_BaseDAP.cpp 2013/9/14 |
va009039 | 5:2774358f5e4f | 2 | #if 0 |
va009039 | 5:2774358f5e4f | 3 | #include "BaseDAP.h" |
va009039 | 5:2774358f5e4f | 4 | #include "mytest.h" |
va009039 | 5:2774358f5e4f | 5 | #include "mydebug.h" |
va009039 | 5:2774358f5e4f | 6 | |
va009039 | 5:2774358f5e4f | 7 | Serial pc(USBTX, USBRX); |
va009039 | 5:2774358f5e4f | 8 | |
va009039 | 5:2774358f5e4f | 9 | SWD* swd; |
va009039 | 5:2774358f5e4f | 10 | BaseDAP* dap; |
va009039 | 5:2774358f5e4f | 11 | uint8_t recv[64]; |
va009039 | 5:2774358f5e4f | 12 | |
va009039 | 5:2774358f5e4f | 13 | TEST(DAP1,setup) { |
va009039 | 5:2774358f5e4f | 14 | #ifdef TARGET_LPC1768 |
va009039 | 5:2774358f5e4f | 15 | swd = new SWD(p21,p22,p17); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) |
va009039 | 5:2774358f5e4f | 16 | #endif |
va009039 | 5:2774358f5e4f | 17 | #ifdef TARGET_KL25Z |
va009039 | 5:2774358f5e4f | 18 | swd = new SWD(PTB8,PTB9,PTB10); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) |
va009039 | 5:2774358f5e4f | 19 | #endif |
va009039 | 5:2774358f5e4f | 20 | dap = new BaseDAP(swd); |
va009039 | 5:2774358f5e4f | 21 | } |
va009039 | 5:2774358f5e4f | 22 | |
va009039 | 5:2774358f5e4f | 23 | TEST(DAP1,Info_PRODUCT) { |
va009039 | 5:2774358f5e4f | 24 | const uint8_t req[] = {0x00,0x02}; |
va009039 | 5:2774358f5e4f | 25 | const uint8_t res[] = {0x00,0x00}; |
va009039 | 5:2774358f5e4f | 26 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 27 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 28 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 29 | } |
va009039 | 5:2774358f5e4f | 30 | |
va009039 | 5:2774358f5e4f | 31 | TEST(DAP1,Info_SER_NUM) { |
va009039 | 5:2774358f5e4f | 32 | const uint8_t req[] = {0x00,0x03}; |
va009039 | 5:2774358f5e4f | 33 | const uint8_t res[] = {0x00,0x00}; |
va009039 | 5:2774358f5e4f | 34 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 35 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 36 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 37 | } |
va009039 | 5:2774358f5e4f | 38 | |
va009039 | 5:2774358f5e4f | 39 | TEST(DAP1,Info_FW_VER) { |
va009039 | 5:2774358f5e4f | 40 | const uint8_t req[] = {0x00,0x04}; |
va009039 | 5:2774358f5e4f | 41 | const uint8_t res[] = {0x00,0x04,0x31,0x2e,0x30,0x00}; |
va009039 | 5:2774358f5e4f | 42 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 43 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 44 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 45 | } |
va009039 | 5:2774358f5e4f | 46 | |
va009039 | 5:2774358f5e4f | 47 | TEST(DAP1,Info_VENDOR) { |
va009039 | 5:2774358f5e4f | 48 | const uint8_t req[] = {0x00,0x01}; |
va009039 | 5:2774358f5e4f | 49 | const uint8_t res[] = {0x00,0x00}; |
va009039 | 5:2774358f5e4f | 50 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 51 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 52 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 53 | } |
va009039 | 5:2774358f5e4f | 54 | |
va009039 | 5:2774358f5e4f | 55 | TEST(DAP1,Info_PRODUCT_2) { |
va009039 | 5:2774358f5e4f | 56 | const uint8_t req[] = {0x00,0x02}; |
va009039 | 5:2774358f5e4f | 57 | const uint8_t res[] = {0x00,0x00}; |
va009039 | 5:2774358f5e4f | 58 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 59 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 60 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 61 | } |
va009039 | 5:2774358f5e4f | 62 | |
va009039 | 5:2774358f5e4f | 63 | TEST(DAP1,Info_PACKET_SIZE) { |
va009039 | 5:2774358f5e4f | 64 | const uint8_t req[] = {0x00,0xff}; |
va009039 | 5:2774358f5e4f | 65 | const uint8_t res[] = {0x00,0x02,0x40,0x00}; |
va009039 | 5:2774358f5e4f | 66 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 67 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 68 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 69 | } |
va009039 | 5:2774358f5e4f | 70 | |
va009039 | 5:2774358f5e4f | 71 | TEST(DAP1,Info_PACKET_COUNT) { |
va009039 | 5:2774358f5e4f | 72 | const uint8_t req[] = {0x00,0xfe}; |
va009039 | 5:2774358f5e4f | 73 | const uint8_t res[] = {0x00,0x01,0x01}; |
va009039 | 5:2774358f5e4f | 74 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 75 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 76 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 77 | } |
va009039 | 5:2774358f5e4f | 78 | |
va009039 | 5:2774358f5e4f | 79 | TEST(DAP1,Connect_SWD) { |
va009039 | 5:2774358f5e4f | 80 | const uint8_t req[] = {0x02,0x01}; |
va009039 | 5:2774358f5e4f | 81 | const uint8_t res[] = {0x02,0x01}; |
va009039 | 5:2774358f5e4f | 82 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 83 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 84 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 85 | } |
va009039 | 5:2774358f5e4f | 86 | |
va009039 | 5:2774358f5e4f | 87 | TEST(DAP1,SWJ_Clock_5000_Hz) { |
va009039 | 5:2774358f5e4f | 88 | const uint8_t req[] = {0x11,0x88,0x13,0x00,0x00}; |
va009039 | 5:2774358f5e4f | 89 | const uint8_t res[] = {0x11,0x00}; |
va009039 | 5:2774358f5e4f | 90 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 91 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 92 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 93 | } |
va009039 | 5:2774358f5e4f | 94 | |
va009039 | 5:2774358f5e4f | 95 | TEST(DAP1,TransferConfigure) { |
va009039 | 5:2774358f5e4f | 96 | const uint8_t req[] = {0x04,0x00,0x64,0x00,0x00,0x00}; |
va009039 | 5:2774358f5e4f | 97 | const uint8_t res[] = {0x04,0x00}; |
va009039 | 5:2774358f5e4f | 98 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 99 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 100 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 101 | } |
va009039 | 5:2774358f5e4f | 102 | |
va009039 | 5:2774358f5e4f | 103 | TEST(DAP1,SWD_Configure) { |
va009039 | 5:2774358f5e4f | 104 | const uint8_t req[] = {0x13,0x00}; |
va009039 | 5:2774358f5e4f | 105 | const uint8_t res[] = {0x13,0x00}; |
va009039 | 5:2774358f5e4f | 106 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 107 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 108 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 109 | } |
va009039 | 5:2774358f5e4f | 110 | |
va009039 | 5:2774358f5e4f | 111 | TEST(DAP1,LED_DEBUGGER_CONNECTED_ON) { |
va009039 | 5:2774358f5e4f | 112 | const uint8_t req[] = {0x01,0x00,0x01}; |
va009039 | 5:2774358f5e4f | 113 | const uint8_t res[] = {0x01,0x00}; |
va009039 | 5:2774358f5e4f | 114 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 115 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 116 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 117 | } |
va009039 | 5:2774358f5e4f | 118 | |
va009039 | 5:2774358f5e4f | 119 | TEST(DAP1,SWJ_Sequence_1_51) { |
va009039 | 5:2774358f5e4f | 120 | const uint8_t req[] = {0x12,0x33, 0xff,0xff,0xff,0xff,0xff,0xff,0xff}; |
va009039 | 5:2774358f5e4f | 121 | const uint8_t res[] = {0x12,0x00}; |
va009039 | 5:2774358f5e4f | 122 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 123 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 124 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 125 | } |
va009039 | 5:2774358f5e4f | 126 | |
va009039 | 5:2774358f5e4f | 127 | TEST(DAP1,SWJ_Sequence_2_16) { |
va009039 | 5:2774358f5e4f | 128 | const uint8_t req[] = {0x12,0x10, 0x9e,0xe7}; |
va009039 | 5:2774358f5e4f | 129 | const uint8_t res[] = {0x12,0x00}; |
va009039 | 5:2774358f5e4f | 130 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 131 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 132 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 133 | } |
va009039 | 5:2774358f5e4f | 134 | |
va009039 | 5:2774358f5e4f | 135 | TEST(DAP1,SWJ_Sequence_3_51) { |
va009039 | 5:2774358f5e4f | 136 | const uint8_t req[] = {0x12,0x33, 0xff,0xff,0xff,0xff,0xff,0xff,0xff}; |
va009039 | 5:2774358f5e4f | 137 | const uint8_t res[] = {0x12,0x00}; |
va009039 | 5:2774358f5e4f | 138 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 139 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 140 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 141 | } |
va009039 | 5:2774358f5e4f | 142 | |
va009039 | 5:2774358f5e4f | 143 | TEST(DAP1,SWJ_Sequence_4_8) { |
va009039 | 5:2774358f5e4f | 144 | const uint8_t req[] = {0x12,0x08, 0x00}; |
va009039 | 5:2774358f5e4f | 145 | const uint8_t res[] = {0x12,0x00}; |
va009039 | 5:2774358f5e4f | 146 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 147 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 148 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 149 | } |
va009039 | 5:2774358f5e4f | 150 | |
va009039 | 5:2774358f5e4f | 151 | TEST(DAP1,Transfer_DP_IDCODE) { |
va009039 | 5:2774358f5e4f | 152 | const uint8_t req[] = {0x05, 0x00, 0x01, 0x02}; |
va009039 | 5:2774358f5e4f | 153 | const uint8_t res[] = {0x05, 0x01, 0x01, 0x77,0x14,0xb1,0x0b}; |
va009039 | 5:2774358f5e4f | 154 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 155 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 156 | DBG_HEX(recv, len); |
va009039 | 5:2774358f5e4f | 157 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 158 | } |
va009039 | 5:2774358f5e4f | 159 | |
va009039 | 5:2774358f5e4f | 160 | TEST(DAP1,Transfer_DP_SELECT) { |
va009039 | 5:2774358f5e4f | 161 | const uint8_t req[] = {0x05, 0x00, 0x01, 0x08, 0x00,0x00,0x00,0x00}; |
va009039 | 5:2774358f5e4f | 162 | //SWD: DP_SELECT 00000000 request=08(DP nW 8) wdata=00000000 rdata=00000000 ack=01 |
va009039 | 5:2774358f5e4f | 163 | //SWD: DP_RDBUFF 10008000 request=0e(DP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 164 | const uint8_t res[] = {0x05, 0x01, 0x01}; |
va009039 | 5:2774358f5e4f | 165 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 166 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 167 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 168 | } |
va009039 | 5:2774358f5e4f | 169 | |
va009039 | 5:2774358f5e4f | 170 | TEST(DAP1,Transfer_DP_CTRL_STAT_W) { |
va009039 | 5:2774358f5e4f | 171 | const uint8_t req[] = {0x05,0x00, 0x01, 0x04, 0x00,0x00,0x00,0x50}; |
va009039 | 5:2774358f5e4f | 172 | //SWD: DP_CTRL_STAT W 50000000 request=04(DP nW 4) wdata=50000000 rdata=50000000 ack=01 |
va009039 | 5:2774358f5e4f | 173 | //SWD: DP_RDBUFF 10008000 request=0e(DP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 174 | const uint8_t res[] = {0x05,0x01, 0x01}; |
va009039 | 5:2774358f5e4f | 175 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 176 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 177 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 178 | } |
va009039 | 5:2774358f5e4f | 179 | |
va009039 | 5:2774358f5e4f | 180 | TEST(DAP1,Transfer_DP_CTRL_STAT_R) { |
va009039 | 5:2774358f5e4f | 181 | const uint8_t req[] = {0x05,0x00, 0x01, 0x06}; |
va009039 | 5:2774358f5e4f | 182 | //SWD: DP_CTRL_STAT R f0000040 request=06(DP R 4) wdata=00000040 rdata=f0000040 ack=01 |
va009039 | 5:2774358f5e4f | 183 | const uint8_t res[] = {0x05,0x01, 0x01, 0x40,0x00,0x00,0xf0}; |
va009039 | 5:2774358f5e4f | 184 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 185 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 186 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 187 | } |
va009039 | 5:2774358f5e4f | 188 | |
va009039 | 5:2774358f5e4f | 189 | TEST(DAP1,WriteABORT) { |
va009039 | 5:2774358f5e4f | 190 | const uint8_t req[] = {0x08,0x00,0x1e,0x00,0x00,0x00}; |
va009039 | 5:2774358f5e4f | 191 | //SWD: DP_ABORT 0000001e request=00(DP nW 0) wdata=0000001e rdata=0000001e ack=01 |
va009039 | 5:2774358f5e4f | 192 | const uint8_t res[] = {0x08,0x00}; |
va009039 | 5:2774358f5e4f | 193 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 194 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 195 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 196 | } |
va009039 | 5:2774358f5e4f | 197 | |
va009039 | 5:2774358f5e4f | 198 | TEST(DAP1,Transfer_DP_CTRL_STAT_W_2) { |
va009039 | 5:2774358f5e4f | 199 | const uint8_t req[] = {0x05,0x00, 0x01, 0x04, 0x00,0x00,0x00,0x54}; |
va009039 | 5:2774358f5e4f | 200 | //SWD: DP_CTRL_STAT W 54000000 request=04(DP nW 4) wdata=54000000 rdata=54000000 ack=01 |
va009039 | 5:2774358f5e4f | 201 | //SWD: DP_RDBUFF 10008000 request=0e(DP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 202 | const uint8_t res[] = {0x05,0x01, 0x01}; |
va009039 | 5:2774358f5e4f | 203 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 204 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 205 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 206 | } |
va009039 | 5:2774358f5e4f | 207 | |
va009039 | 5:2774358f5e4f | 208 | TEST(DAP1,Transfer_DP_CTRL_STAT_W_3) { |
va009039 | 5:2774358f5e4f | 209 | const uint8_t req[] = {0x05,0x00, 0x01, 0x04, 0x00,0x0f,0x00,0x50}; |
va009039 | 5:2774358f5e4f | 210 | //SWD: DP_CTRL_STAT W 50000f00 request=04(DP nW 4) wdata=50000f00 rdata=50000f00 ack=01 |
va009039 | 5:2774358f5e4f | 211 | //SWD: DP_RDBUFF 10008000 request=0e(DP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 212 | const uint8_t res[] = {0x05,0x01, 0x01}; |
va009039 | 5:2774358f5e4f | 213 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 214 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 215 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 216 | } |
va009039 | 5:2774358f5e4f | 217 | |
va009039 | 5:2774358f5e4f | 218 | TEST(DAP1,Transfer_AP_CSW) { |
va009039 | 5:2774358f5e4f | 219 | const uint8_t req[] = {0x05,0x00, 0x01, 0x01, 0x52,0x00,0x00,0x23}; |
va009039 | 5:2774358f5e4f | 220 | //SWD: AP_CSW W 23000052 request=01(AP nW 0) wdata=23000052 rdata=23000052 ack=01 |
va009039 | 5:2774358f5e4f | 221 | //SWD: DP_RDBUFF 10008000 request=0e(DP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 222 | const uint8_t res[] = {0x05,0x01, 0x01}; |
va009039 | 5:2774358f5e4f | 223 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 224 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 225 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 226 | } |
va009039 | 5:2774358f5e4f | 227 | |
va009039 | 5:2774358f5e4f | 228 | TEST(DAP1,Transfer_AP_TAR) { |
va009039 | 5:2774358f5e4f | 229 | const uint8_t req[] = {0x05,0x00, 0x01, 0x05, 0xf0,0xff,0x0f,0xe0}; |
va009039 | 5:2774358f5e4f | 230 | //SWD: AP_TAR W e00ffff0 request=05(AP nW 4) wdata=e00ffff0 rdata=e00ffff0 ack=01 |
va009039 | 5:2774358f5e4f | 231 | //SWD: DP_RDBUFF 10008000 request=0e(DP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 232 | const uint8_t res[] = {0x05,0x01, 0x01}; |
va009039 | 5:2774358f5e4f | 233 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 234 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 235 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 236 | } |
va009039 | 5:2774358f5e4f | 237 | |
va009039 | 5:2774358f5e4f | 238 | TEST(DAP1,TransferBlock_AP_DRW_R) { |
va009039 | 5:2774358f5e4f | 239 | const uint8_t req[] = {0x06,0x00, 0x04,0x00, 0x0f}; |
va009039 | 5:2774358f5e4f | 240 | //SWD: AP_DRW R 10008000 request=0f(AP R c) wdata=ffffffff rdata=10008000 ack=01 |
va009039 | 5:2774358f5e4f | 241 | //SWD: AP_DRW R 0000000d request=0f(AP R c) wdata=00000006 rdata=0000000d ack=01 |
va009039 | 5:2774358f5e4f | 242 | //SWD: AP_DRW R 00000010 request=0f(AP R c) wdata=0000000d rdata=00000010 ack=01 |
va009039 | 5:2774358f5e4f | 243 | //SWD: AP_DRW R 00000005 request=0f(AP R c) wdata=00000010 rdata=00000005 ack=01 |
va009039 | 5:2774358f5e4f | 244 | //SWD: DP_RDBUFF 000000b1 request=0e(DP R c) wdata=00000005 rdata=000000b1 ack=01 |
va009039 | 5:2774358f5e4f | 245 | const uint8_t res[] = {0x06, 0x04,0x00, 0x01, |
va009039 | 5:2774358f5e4f | 246 | 0x0d,0x00,0x00,0x00, 0x10,0x00,0x00,0x00, 0x05,0x00,0x00,0x00, 0xb1,0x00,0x00,0x00}; |
va009039 | 5:2774358f5e4f | 247 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 248 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 249 | ASSERT_TRUE(memcmp(recv, res, 4) == 0); |
va009039 | 5:2774358f5e4f | 250 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 251 | } |
va009039 | 5:2774358f5e4f | 252 | |
va009039 | 5:2774358f5e4f | 253 | TEST(DAP1,SWJ_Pins_nRESET_OFF) { |
va009039 | 5:2774358f5e4f | 254 | const uint8_t req[] = {0x10,0x00,0x80,0x00,0x00,0x00,0x00,}; |
va009039 | 5:2774358f5e4f | 255 | //DAP: SWJ_Pins wait: 0 us nRESET OFF |
va009039 | 5:2774358f5e4f | 256 | const uint8_t res[] = {0x10,0x03}; |
va009039 | 5:2774358f5e4f | 257 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 258 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 259 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 260 | } |
va009039 | 5:2774358f5e4f | 261 | |
va009039 | 5:2774358f5e4f | 262 | TEST(DAP1,SWJ_Pins_nRESET_ON) { |
va009039 | 5:2774358f5e4f | 263 | const uint8_t req[] = {0x10,0x80,0x80,0x00,0x00,0x00,0x00,}; |
va009039 | 5:2774358f5e4f | 264 | //DAP: SWJ_Pins wait: 0 us nRESET ON |
va009039 | 5:2774358f5e4f | 265 | const uint8_t res[] = {0x10,0x83}; |
va009039 | 5:2774358f5e4f | 266 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 267 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 268 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 269 | } |
va009039 | 5:2774358f5e4f | 270 | |
va009039 | 5:2774358f5e4f | 271 | TEST(DAP1,SWJ_Pins) { |
va009039 | 5:2774358f5e4f | 272 | const uint8_t req[] = {0x10,0x00,0x00,0x00,0x00,0x00,0x00,}; |
va009039 | 5:2774358f5e4f | 273 | //DAP: SWJ_Pins wait: 0 us nRESET ON |
va009039 | 5:2774358f5e4f | 274 | const uint8_t res[] = {0x10,0x83}; |
va009039 | 5:2774358f5e4f | 275 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 276 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 277 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 278 | } |
va009039 | 5:2774358f5e4f | 279 | |
va009039 | 5:2774358f5e4f | 280 | TEST(DAP1,Disconnect) { |
va009039 | 5:2774358f5e4f | 281 | const uint8_t req[] = {0x03}; |
va009039 | 5:2774358f5e4f | 282 | const uint8_t res[] = {0x03,0x00}; |
va009039 | 5:2774358f5e4f | 283 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 284 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 285 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 286 | } |
va009039 | 5:2774358f5e4f | 287 | |
va009039 | 5:2774358f5e4f | 288 | TEST(DAP1,LED_DEBUGGER_CONNECTED_OFF) { |
va009039 | 5:2774358f5e4f | 289 | const uint8_t req[] = {0x01,0x00,0x00}; |
va009039 | 5:2774358f5e4f | 290 | const uint8_t res[] = {0x01,0x00}; |
va009039 | 5:2774358f5e4f | 291 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 292 | ASSERT_TRUE(len == sizeof(res)); |
va009039 | 5:2774358f5e4f | 293 | ASSERT_TRUE(memcmp(recv, res, len) == 0); |
va009039 | 5:2774358f5e4f | 294 | } |
va009039 | 5:2774358f5e4f | 295 | |
va009039 | 5:2774358f5e4f | 296 | TEST(DAP1,Vender0) { |
va009039 | 5:2774358f5e4f | 297 | const uint8_t req[] = {0x80}; |
va009039 | 5:2774358f5e4f | 298 | const uint8_t res[] = {0x80,0x00, '1','0','4','0'}; |
va009039 | 5:2774358f5e4f | 299 | int len = dap->Command((uint8_t*)req, recv); |
va009039 | 5:2774358f5e4f | 300 | ASSERT_TRUE(len >= sizeof(res)); |
va009039 | 5:2774358f5e4f | 301 | ASSERT_TRUE(recv[0] == 0x80); |
va009039 | 5:2774358f5e4f | 302 | ASSERT_TRUE(memcmp(recv+2, res+2, 4) == 0); // 1040 lpc11u24 |
va009039 | 5:2774358f5e4f | 303 | } |
va009039 | 5:2774358f5e4f | 304 | |
va009039 | 5:2774358f5e4f | 305 | int main() { |
va009039 | 5:2774358f5e4f | 306 | //pc.baud(921600); |
va009039 | 5:2774358f5e4f | 307 | pc.baud(9600); |
va009039 | 5:2774358f5e4f | 308 | DBG("%s", __FILE__); |
va009039 | 5:2774358f5e4f | 309 | |
va009039 | 5:2774358f5e4f | 310 | RUN_ALL_TESTS(); |
va009039 | 5:2774358f5e4f | 311 | exit(0); |
va009039 | 5:2774358f5e4f | 312 | } |
va009039 | 5:2774358f5e4f | 313 | #endif |