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

Flash.h

Committer:
va009039
Date:
2014-06-22
Revision:
18:5ed1759e863b
Parent:
14:e6acf863207e

File content as of revision 18:5ed1759e863b:

// Flash.h 2014/2/18
#pragma once
#include "Target2.h"

/** Flash writer
 */
class Flash {
public:
    Flash(Target2* target, Serial* usbpc);
    bool init();
    bool write(const char* filename);
    bool write(int addr, const uint8_t* data, int size);
    bool verify(const char* filename);
    enum IAP_CMD {
        PREPARE_SECTOR = 50,
        COPY_RAM_TO_FLASH = 51,
        ERASE_SECTOR = 52,
        BLANK_CHECK = 53,
        READ_PART_ID = 54,
        READ_BOOT_CODE_VERSION = 55,
        COMPARE = 56,
        REINVOKE_ISP = 57,
        READ_UID = 58,
    };
    enum IAP_STATUS {
        CMD_SUCCESS = 0,
        INVALID_COMMAND =1,
        SRC_ADDR_ERROR = 2,
        DST_ADDR_ERROR = 3,
        SRC_ADDR_NOT_MAPPED = 4,
        DST_ADDR_NOT_MAPPED = 5,
        COUNT_ERROR = 6,
        INVALID_SECTOR = 7,
        SECTOR_NOT_BLANK = 8,
        SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION = 9,
        COMPARE_ERROR = 10,
        BUSY = 11,
        ADDR_ERROR = 13,
    };
    IAP_STATUS remoteIAP(IAP_CMD cmd, uint32_t p0=0, uint32_t p1=0, uint32_t p2=0, uint32_t p3=0);
    uint32_t part_id;

    void attachEvent(void (*ptr)()) {
        if (ptr != NULL) {
            onUpdate = ptr;
        }
    }
    
private:
    void _setup();
    bool remoteREG(uint32_t addr, uint32_t value);
    bool init_lpc1114fn28_lpc810(int sector_size);
    bool flash_init_lpc1347();
    bool flash_init_lpc1769();
    int addr_to_sector(int addr);
    bool sector_head(int addr);
    bool _write_to_ram(int addr, int size, const uint8_t* buf);
    bool _patch(uint8_t* buf, int size, int addr);
    void (*onUpdate)();
    void update() {
        if (onUpdate) {
            (*onUpdate)();
        }
    }
    struct {
        int iap_cclk;
        int sector_size;
    } cfg;
    int ram_addr;
    int ram_size;

protected:
    Target2* _target;
    Serial* _pc;
};