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/test_Flash.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 | 2:32e9437348ad | 1 | // test_Flash.cpp 2013/9/5 |
va009039 | 0:27d35fa263b5 | 2 | #if 0 |
va009039 | 0:27d35fa263b5 | 3 | #include "Target2.h" |
va009039 | 0:27d35fa263b5 | 4 | #include "Flash.h" |
va009039 | 0:27d35fa263b5 | 5 | #include "mytest.h" |
va009039 | 0:27d35fa263b5 | 6 | |
va009039 | 0:27d35fa263b5 | 7 | LocalFileSystem local("local"); |
va009039 | 0:27d35fa263b5 | 8 | Serial pc(USBTX, USBRX); |
va009039 | 0:27d35fa263b5 | 9 | Target2* target; |
va009039 | 0:27d35fa263b5 | 10 | Flash* flash; |
va009039 | 0:27d35fa263b5 | 11 | const char* filename = "/local/1114FN28.LPC"; |
va009039 | 0:27d35fa263b5 | 12 | |
va009039 | 2:32e9437348ad | 13 | #define SKIP_FLASH_WRITE 1 |
va009039 | 2:32e9437348ad | 14 | |
va009039 | 0:27d35fa263b5 | 15 | TEST(IAP1,cmd55_read_boot_code_version) { |
va009039 | 2:32e9437348ad | 16 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::READ_BOOT_CODE_VERSION); |
va009039 | 2:32e9437348ad | 17 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 18 | for(uint32_t addr = 0x10000100; addr < 0x10000100+44; addr += 4) { |
va009039 | 0:27d35fa263b5 | 19 | TEST_PRINT("%08x: %08x", addr, target->readMemory(addr)); |
va009039 | 0:27d35fa263b5 | 20 | } |
va009039 | 0:27d35fa263b5 | 21 | } |
va009039 | 0:27d35fa263b5 | 22 | |
va009039 | 0:27d35fa263b5 | 23 | TEST(IAP1,cmd54) { |
va009039 | 2:32e9437348ad | 24 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::READ_PART_ID); |
va009039 | 2:32e9437348ad | 25 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 26 | for(uint32_t addr = 0x10000100; addr < 0x10000100+44; addr += 4) { |
va009039 | 0:27d35fa263b5 | 27 | TEST_PRINT("%08x: %08x", addr, target->readMemory(addr)); |
va009039 | 0:27d35fa263b5 | 28 | } |
va009039 | 0:27d35fa263b5 | 29 | } |
va009039 | 0:27d35fa263b5 | 30 | |
va009039 | 0:27d35fa263b5 | 31 | TEST(IAP1,cmd58_ReadUID) { |
va009039 | 2:32e9437348ad | 32 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::READ_UID); |
va009039 | 2:32e9437348ad | 33 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 34 | for(uint32_t addr = 0x10000100; addr < 0x10000100+44; addr += 4) { |
va009039 | 0:27d35fa263b5 | 35 | TEST_PRINT("%08x: %08x", addr, target->readMemory(addr)); |
va009039 | 0:27d35fa263b5 | 36 | } |
va009039 | 0:27d35fa263b5 | 37 | } |
va009039 | 0:27d35fa263b5 | 38 | |
va009039 | 0:27d35fa263b5 | 39 | TEST(IAP1,cmd50_prepare_sector7) { |
va009039 | 2:32e9437348ad | 40 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::PREPARE_SECTOR,7,7); |
va009039 | 2:32e9437348ad | 41 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 42 | } |
va009039 | 0:27d35fa263b5 | 43 | |
va009039 | 0:27d35fa263b5 | 44 | TEST(IAP1,cmd50_prepare_sector6) { |
va009039 | 2:32e9437348ad | 45 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::PREPARE_SECTOR,6,6); |
va009039 | 2:32e9437348ad | 46 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 2:32e9437348ad | 47 | } |
va009039 | 2:32e9437348ad | 48 | |
va009039 | 2:32e9437348ad | 49 | TEST(IAP1,prepare_status_7) { |
va009039 | 2:32e9437348ad | 50 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::PREPARE_SECTOR,8,8); |
va009039 | 2:32e9437348ad | 51 | ASSERT_TRUE(status_code == Flash::INVALID_SECTOR); |
va009039 | 2:32e9437348ad | 52 | |
va009039 | 2:32e9437348ad | 53 | status_code = flash->remoteIAP(Flash::PREPARE_SECTOR,9,9); |
va009039 | 2:32e9437348ad | 54 | ASSERT_TRUE(status_code == Flash::INVALID_SECTOR); |
va009039 | 0:27d35fa263b5 | 55 | } |
va009039 | 0:27d35fa263b5 | 56 | |
va009039 | 2:32e9437348ad | 57 | TEST(IAP1,compare_status_10) { |
va009039 | 2:32e9437348ad | 58 | uint32_t buf[16]; |
va009039 | 2:32e9437348ad | 59 | uint32_t ram = 0x10000000; |
va009039 | 2:32e9437348ad | 60 | uint32_t addr = 0x00001000; |
va009039 | 2:32e9437348ad | 61 | target->readMemory(addr, buf, sizeof(buf)/sizeof(uint32_t)); |
va009039 | 2:32e9437348ad | 62 | target->writeMemory(ram, buf, sizeof(buf)/sizeof(uint32_t)); |
va009039 | 2:32e9437348ad | 63 | |
va009039 | 2:32e9437348ad | 64 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::COMPARE, ram, addr); |
va009039 | 2:32e9437348ad | 65 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 2:32e9437348ad | 66 | |
va009039 | 2:32e9437348ad | 67 | status_code = flash->remoteIAP(Flash::COMPARE, ram, addr+1, sizeof(buf)); |
va009039 | 2:32e9437348ad | 68 | ASSERT_TRUE(status_code == Flash::ADDR_ERROR); |
va009039 | 2:32e9437348ad | 69 | |
va009039 | 2:32e9437348ad | 70 | status_code = flash->remoteIAP(Flash::COMPARE, ram+1, addr, sizeof(buf)); |
va009039 | 2:32e9437348ad | 71 | ASSERT_TRUE(status_code == Flash::ADDR_ERROR); |
va009039 | 2:32e9437348ad | 72 | |
va009039 | 2:32e9437348ad | 73 | status_code = flash->remoteIAP(Flash::COMPARE, ram, addr, sizeof(buf)-1); |
va009039 | 2:32e9437348ad | 74 | ASSERT_TRUE(status_code == Flash::COUNT_ERROR); |
va009039 | 2:32e9437348ad | 75 | |
va009039 | 2:32e9437348ad | 76 | status_code = flash->remoteIAP(Flash::COMPARE, ram+4, addr, sizeof(buf)); |
va009039 | 2:32e9437348ad | 77 | ASSERT_TRUE(status_code == Flash::COMPARE_ERROR); |
va009039 | 2:32e9437348ad | 78 | } |
va009039 | 2:32e9437348ad | 79 | |
va009039 | 2:32e9437348ad | 80 | #ifndef SKIP_FLASH_WRITE |
va009039 | 0:27d35fa263b5 | 81 | TEST(IAP1,cmd52_erase_sector7) { |
va009039 | 2:32e9437348ad | 82 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::PREPARE_SECTOR, 7, 7); |
va009039 | 2:32e9437348ad | 83 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 84 | |
va009039 | 2:32e9437348ad | 85 | status_code = flash->remoteIAP(Flash::ERASE_SECTOR, 7, 7, 12000); // CCLK=12MHz |
va009039 | 2:32e9437348ad | 86 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 87 | } |
va009039 | 0:27d35fa263b5 | 88 | |
va009039 | 0:27d35fa263b5 | 89 | TEST(IAP1,cmd53_blank_check_sector7) { |
va009039 | 2:32e9437348ad | 90 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::PREPARE_SECTOR, 7, 7); |
va009039 | 2:32e9437348ad | 91 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 2:32e9437348ad | 92 | status_code = flash->remoteIAP(Flash::ERASE_SECTOR, 7, 7, 12000); // CCLK=12MHz |
va009039 | 2:32e9437348ad | 93 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 94 | |
va009039 | 2:32e9437348ad | 95 | status_code = flash->remoteIAP(Flash::BLANK_CHECK, 7, 7, 12000); // CCLK=12MHz |
va009039 | 2:32e9437348ad | 96 | ASSERT_TRUE(status_code == Flash::CMD_SUCCESS); |
va009039 | 0:27d35fa263b5 | 97 | } |
va009039 | 0:27d35fa263b5 | 98 | |
va009039 | 0:27d35fa263b5 | 99 | TEST(IAP1,cmd51_copy_ram_to_flash_sector7) { |
va009039 | 0:27d35fa263b5 | 100 | uint32_t src = 0x10000200; |
va009039 | 0:27d35fa263b5 | 101 | |
va009039 | 0:27d35fa263b5 | 102 | uint8_t buf[256]; |
va009039 | 0:27d35fa263b5 | 103 | for(int i = 0; i < sizeof(buf); i++) { |
va009039 | 0:27d35fa263b5 | 104 | buf[i] = i & 0xff; |
va009039 | 0:27d35fa263b5 | 105 | } |
va009039 | 0:27d35fa263b5 | 106 | target->writeMemory(src, (uint32_t*)buf, sizeof(buf)/sizeof(uint32_t)); |
va009039 | 0:27d35fa263b5 | 107 | |
va009039 | 2:32e9437348ad | 108 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::PREPARE_SECTOR, 7, 7); // prepare |
va009039 | 0:27d35fa263b5 | 109 | ASSERT_TRUE(status_code == 0); |
va009039 | 0:27d35fa263b5 | 110 | uint32_t dst = 4096*7; |
va009039 | 2:32e9437348ad | 111 | status_code = flash->remoteIAP(Flash::COPY_RAM_TO_FLASH, dst, src, 256, 12000); // CCLK=12MHz |
va009039 | 0:27d35fa263b5 | 112 | ASSERT_TRUE(status_code == 0); |
va009039 | 0:27d35fa263b5 | 113 | } |
va009039 | 0:27d35fa263b5 | 114 | |
va009039 | 0:27d35fa263b5 | 115 | TEST(IAP1,cmd56_compare1) { |
va009039 | 0:27d35fa263b5 | 116 | uint32_t dst = 4096*7; |
va009039 | 0:27d35fa263b5 | 117 | uint32_t src = 0x10000200; |
va009039 | 2:32e9437348ad | 118 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::COMPARE, dst, src, 256); |
va009039 | 0:27d35fa263b5 | 119 | ASSERT_TRUE(status_code == 0); |
va009039 | 0:27d35fa263b5 | 120 | } |
va009039 | 0:27d35fa263b5 | 121 | |
va009039 | 0:27d35fa263b5 | 122 | TEST(IAP1,cmd56_compare2) { |
va009039 | 0:27d35fa263b5 | 123 | uint32_t dst = 4096*7; |
va009039 | 0:27d35fa263b5 | 124 | uint32_t src = 0x10000200+4; |
va009039 | 2:32e9437348ad | 125 | Flash::IAP_STATUS status_code = flash->remoteIAP(Flash::COMPARE, dst, src, 256); |
va009039 | 0:27d35fa263b5 | 126 | ASSERT_TRUE(status_code != 0); |
va009039 | 0:27d35fa263b5 | 127 | } |
va009039 | 0:27d35fa263b5 | 128 | |
va009039 | 0:27d35fa263b5 | 129 | TEST(Flash1,verify0) { |
va009039 | 0:27d35fa263b5 | 130 | bool st = flash->verify("/local/1114FN28.LPC"); |
va009039 | 0:27d35fa263b5 | 131 | ASSERT_TRUE(st); |
va009039 | 0:27d35fa263b5 | 132 | } |
va009039 | 0:27d35fa263b5 | 133 | |
va009039 | 0:27d35fa263b5 | 134 | TEST(Flash1,eraseAll) { |
va009039 | 0:27d35fa263b5 | 135 | bool st = flash->eraseAll(); |
va009039 | 0:27d35fa263b5 | 136 | ASSERT_TRUE(st); |
va009039 | 0:27d35fa263b5 | 137 | } |
va009039 | 0:27d35fa263b5 | 138 | |
va009039 | 0:27d35fa263b5 | 139 | TEST(Flash1,write1) { |
va009039 | 0:27d35fa263b5 | 140 | bool st = flash->write("/usb/1114FN28.LPC"); |
va009039 | 0:27d35fa263b5 | 141 | ASSERT_TRUE(!st); |
va009039 | 0:27d35fa263b5 | 142 | } |
va009039 | 0:27d35fa263b5 | 143 | |
va009039 | 0:27d35fa263b5 | 144 | TEST(Flash1,write2) { |
va009039 | 0:27d35fa263b5 | 145 | bool st = flash->write("/local/1114FN28.LPC"); |
va009039 | 0:27d35fa263b5 | 146 | ASSERT_TRUE(st); |
va009039 | 0:27d35fa263b5 | 147 | } |
va009039 | 0:27d35fa263b5 | 148 | |
va009039 | 0:27d35fa263b5 | 149 | TEST(Flash1,verify1) { |
va009039 | 0:27d35fa263b5 | 150 | bool st = flash->verify("/usb/1114FN28.LPC"); |
va009039 | 0:27d35fa263b5 | 151 | ASSERT_TRUE(!st); |
va009039 | 0:27d35fa263b5 | 152 | } |
va009039 | 0:27d35fa263b5 | 153 | |
va009039 | 0:27d35fa263b5 | 154 | TEST(Flash1,verify2) { |
va009039 | 0:27d35fa263b5 | 155 | bool st = flash->verify("/local/1114FN28.LPC"); |
va009039 | 0:27d35fa263b5 | 156 | ASSERT_TRUE(st); |
va009039 | 0:27d35fa263b5 | 157 | } |
va009039 | 0:27d35fa263b5 | 158 | |
va009039 | 0:27d35fa263b5 | 159 | TEST(Flash1,verify3) { |
va009039 | 0:27d35fa263b5 | 160 | bool st = flash->verify("/local/1114FN28.LPC"); |
va009039 | 0:27d35fa263b5 | 161 | ASSERT_TRUE(st); |
va009039 | 0:27d35fa263b5 | 162 | } |
va009039 | 0:27d35fa263b5 | 163 | |
va009039 | 2:32e9437348ad | 164 | #endif |
va009039 | 2:32e9437348ad | 165 | |
va009039 | 0:27d35fa263b5 | 166 | int main() { |
va009039 | 0:27d35fa263b5 | 167 | pc.baud(921600); |
va009039 | 0:27d35fa263b5 | 168 | DBG("%s", __FILE__); |
va009039 | 0:27d35fa263b5 | 169 | |
va009039 | 5:2774358f5e4f | 170 | target = new Target2(p21,p22,p17); // SWDIO(dp12),SWCLK(dp3),nReset(dp23) |
va009039 | 0:27d35fa263b5 | 171 | target->setup(); |
va009039 | 0:27d35fa263b5 | 172 | flash = new Flash(target, &pc); |
va009039 | 0:27d35fa263b5 | 173 | |
va009039 | 0:27d35fa263b5 | 174 | RUN_ALL_TESTS(); |
va009039 | 0:27d35fa263b5 | 175 | } |
va009039 | 0:27d35fa263b5 | 176 | #endif |