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