semihost server example program

Dependencies:   SWD mbed USBLocalFileSystem BaseDAP USBDAP

/media/uploads/va009039/kl46z-lpc800-360x480.jpg

LPCXpresso
LPC11U68
LPCXpresso
LPC1549
FRDM-KL46ZEA LPC4088 QSB
app-board
LPC1768
app-board
LPC810LPC1114FN28
serverserverserverserverserverclientclient
SWDIOD12D12D12p25p21p4(P0_2)p12
SWCLKD10D10D10p26p22p3(P0_3)p3
nRESET
*option
D6D6D6p34p30p1(P0_5)p23
GNDGNDGNDGNDp1p1p7p22
3.3VP3V3P3V3P3V3p44p40p6p21
flash writeSW2(P0_1)SW3(P1_9)SW1p14
joystick
center
p14
joystick
center

client example:

Import programlpc810-semihost_helloworld

semihost client example program

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?

UserRevisionLine numberNew 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