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

Revision:
14:e6acf863207e
Parent:
9:7e71c20c96e4
--- a/Flash.cpp	Thu Mar 20 03:46:47 2014 +0000
+++ b/Flash.cpp	Mon Apr 28 04:18:47 2014 +0000
@@ -31,6 +31,8 @@
 bool Flash::init()
 {
     _pc->printf("Initializing");
+    ram_addr = 0x10000000;
+    ram_size = 0x400;
     if (remoteIAP(READ_PART_ID) != CMD_SUCCESS) {
         _pc->printf("\nfaild. READ_PART_ID\n");
         return false;
@@ -107,7 +109,7 @@
  
 bool Flash::write(const char* filename)
 {
-    const int chunk_size = 256;
+    const int chunk_size = 512;
     FILE* fp = fopen(filename, "rb");
     if (fp == NULL) {
         _pc->printf("file open error [%s]\n", filename);
@@ -116,7 +118,7 @@
     _pc->printf("Writing.");
     uint8_t buf[chunk_size];
     bool passed = false;
-    for(int addr = 0; addr < 0x10000; addr += sizeof(buf)) {
+    for(int addr = 0; addr < 0x80000; addr += sizeof(buf)) {
         int ret = fread(buf, 1, sizeof(buf), fp);
         if (!_patch(buf, sizeof(buf), addr)) {
             break;
@@ -153,12 +155,12 @@
 
 bool Flash::write(int addr, const uint8_t* data, int size)
 {
-    const int ram = 0x10000200;
-    const int ram_size = 256;
-    for(int i = 0; i < size; i += ram_size) {
+    int temp_addr = ram_addr + 44;
+    int temp_size = 512;   
+    for(int i = 0; i < size; i += temp_size) {
         update();
-        if (!_write_to_ram(ram, ram_size, data+i)) {
-            _pc->printf("faild. write to ram %08x\n", ram);
+        if (!_write_to_ram(temp_addr, temp_size, data+i)) {
+            _pc->printf("faild. write to ram %08x\n", temp_addr);
             return false;
         }
         int sector = addr_to_sector(addr + i);
@@ -180,12 +182,12 @@
             _pc->printf("faild. PREPARE_SECTOR %d %d\n", sector, sector);
             return false;
         }
-        if (remoteIAP(COPY_RAM_TO_FLASH, addr+i, ram, ram_size, cfg.iap_cclk) != CMD_SUCCESS) {
-            _pc->printf("faild. COPY_RAM_TO_FLASH %d %d %d %dn", addr+i, ram, ram_size, cfg.iap_cclk);
+        if (remoteIAP(COPY_RAM_TO_FLASH, addr+i, temp_addr, temp_size, cfg.iap_cclk) != CMD_SUCCESS) {
+            _pc->printf("faild. COPY_RAM_TO_FLASH %d %d %d %dn", addr+i, temp_addr, temp_size, cfg.iap_cclk);
             return false;
         }
-        if (remoteIAP(COMPARE, addr+i, ram, ram_size) != CMD_SUCCESS) {
-            _pc->printf("faild. COMPARE %d %d %d", addr+i, ram, ram_size);
+        if (remoteIAP(COMPARE, addr+i, temp_addr, temp_size) != CMD_SUCCESS) {
+            _pc->printf("faild. COMPARE %d %d %d", addr+i, temp_addr, temp_size);
             return false;
         }
     }
@@ -236,7 +238,7 @@
     ram.IAP.par[3] = p3;
     _target->halt();
     _target->wait_status(TARGET_HALTED);
-    const uint32_t ram_addr = 0x10000100;
+
     _target->writeMemory(ram_addr, (uint32_t*)&ram, sizeof(ram)/sizeof(uint32_t));
     _target->r0 = ram_addr + 4;  // command addr
     _target->r1 = ram_addr + 24; // status addr
@@ -261,7 +263,7 @@
     _pc->printf("Verifying.");
     uint8_t buf[256];
     bool passed = false;
-    for(int addr = 0; addr < 0x10000; addr++) {
+    for(int addr = 0; addr < 0x80000; addr++) {
         int c = fgetc(fp);
         if (c == EOF) {
             passed = true;