ISP example program.

Dependencies:   SLCD mbed USBLocalFileSystem

/media/uploads/va009039/lpc81isp-360x240.jpg

FRDM-KL46ZLPC810
UART RXDPTE23p2(P0_4)
UART TXDPTE22p8(P0_0)
nRESETD6p1(P0_5)
nISPD8p5(P0_1)
GNDGNDp7
3.3VP3V3p6

Copy binary image to the disk called LPC81ISP.
Push sw1 or sw3, start write to LPC810 flash.

Committer:
va009039
Date:
Sun May 04 00:36:04 2014 +0000
Revision:
2:eafc1c6787c7
Parent:
src/BaseLpcIsp.h@0:ad2b1fc04955
update USBLocalFileSystem library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:ad2b1fc04955 1 #pragma once
va009039 0:ad2b1fc04955 2
va009039 0:ad2b1fc04955 3 #include "mbed.h"
va009039 0:ad2b1fc04955 4 #include <stdarg.h>
va009039 0:ad2b1fc04955 5 #include "mystring.h"
va009039 0:ad2b1fc04955 6
va009039 0:ad2b1fc04955 7 #define LF '\n'
va009039 0:ad2b1fc04955 8 #define CRLF "\r\n"
va009039 0:ad2b1fc04955 9
va009039 0:ad2b1fc04955 10 #define LED_TX 0
va009039 0:ad2b1fc04955 11
va009039 0:ad2b1fc04955 12 class BaseLpcIsp {
va009039 0:ad2b1fc04955 13 public:
va009039 0:ad2b1fc04955 14 BaseLpcIsp(PinName txd, PinName rxd, PinName reset, PinName isp):
va009039 0:ad2b1fc04955 15 _target(txd, rxd),_nreset(reset),_nisp(isp) {
va009039 0:ad2b1fc04955 16 _wpos = _rpos = 0;
va009039 0:ad2b1fc04955 17 _target.attach<BaseLpcIsp>(this, &BaseLpcIsp::callback);
va009039 0:ad2b1fc04955 18 };
va009039 0:ad2b1fc04955 19 void Reset(bool isp);
va009039 0:ad2b1fc04955 20 bool Sync();
va009039 0:ad2b1fc04955 21 bool FlashWrite(const char* filename);
va009039 0:ad2b1fc04955 22
va009039 0:ad2b1fc04955 23 void baud(int baudrate) { _target.baud(baudrate); }
va009039 0:ad2b1fc04955 24 int putc(int c) { return _target.putc(c); }
va009039 0:ad2b1fc04955 25 int readable() { return (_wpos != _rpos) ? 1 : 0; }
va009039 0:ad2b1fc04955 26 int getc() {
va009039 0:ad2b1fc04955 27 if (readable()) {
va009039 0:ad2b1fc04955 28 int c = _buf[_rpos++];
va009039 0:ad2b1fc04955 29 if (_rpos >= sizeof(_buf)) {
va009039 0:ad2b1fc04955 30 _rpos = 0;
va009039 0:ad2b1fc04955 31 }
va009039 0:ad2b1fc04955 32 return c;
va009039 0:ad2b1fc04955 33 }
va009039 0:ad2b1fc04955 34 return -1;
va009039 0:ad2b1fc04955 35 }
va009039 0:ad2b1fc04955 36 int puts(const char *str) {
va009039 0:ad2b1fc04955 37 while(*str) {
va009039 0:ad2b1fc04955 38 putc(*str++);
va009039 0:ad2b1fc04955 39 }
va009039 0:ad2b1fc04955 40 return 0;
va009039 0:ad2b1fc04955 41 }
va009039 0:ad2b1fc04955 42
va009039 0:ad2b1fc04955 43 protected:
va009039 0:ad2b1fc04955 44 uint32_t part_code;
va009039 0:ad2b1fc04955 45 int chunk_size;
va009039 0:ad2b1fc04955 46 int sector_size;
va009039 0:ad2b1fc04955 47 bool plan_binary;
va009039 0:ad2b1fc04955 48 virtual void infoLED(int select, int value) {}
va009039 0:ad2b1fc04955 49 virtual void infoSLCD(const char* s) {}
va009039 0:ad2b1fc04955 50
va009039 0:ad2b1fc04955 51 private:
va009039 0:ad2b1fc04955 52 void isp_error(int line) {
va009039 0:ad2b1fc04955 53 char buf[5];
va009039 0:ad2b1fc04955 54 snprintf(buf, sizeof(buf), "E%3d", line);
va009039 0:ad2b1fc04955 55 infoSLCD(buf);
va009039 0:ad2b1fc04955 56 }
va009039 0:ad2b1fc04955 57 bool _cmd(const char* format, ...);
va009039 0:ad2b1fc04955 58 void sendln(const char* s);
va009039 0:ad2b1fc04955 59 bool waitln(const char* s);
va009039 0:ad2b1fc04955 60 bool recvln(char* buf, int size);
va009039 0:ad2b1fc04955 61 bool recvln(mystring& s);
va009039 0:ad2b1fc04955 62 bool _write_to_ram(int addr, uint8_t* buf, int size);
va009039 0:ad2b1fc04955 63 bool _patch(int addr, uint8_t* buf, int size);
va009039 0:ad2b1fc04955 64 RawSerial _target;
va009039 0:ad2b1fc04955 65 char _buf[64];
va009039 0:ad2b1fc04955 66 __IO int _wpos;
va009039 0:ad2b1fc04955 67 int _rpos;
va009039 0:ad2b1fc04955 68 void callback() {
va009039 0:ad2b1fc04955 69 int c = _target.getc();
va009039 0:ad2b1fc04955 70 _buf[_wpos++] = c;
va009039 0:ad2b1fc04955 71 if (_wpos >= sizeof(_buf)) {
va009039 0:ad2b1fc04955 72 _wpos = 0;
va009039 0:ad2b1fc04955 73 }
va009039 0:ad2b1fc04955 74 }
va009039 0:ad2b1fc04955 75 uint8_t tx_sw;
va009039 0:ad2b1fc04955 76 DigitalOut _nreset;
va009039 0:ad2b1fc04955 77 DigitalOut _nisp;
va009039 0:ad2b1fc04955 78 };