ISP example program.
Dependencies: SLCD mbed USBLocalFileSystem
FRDM-KL46Z | LPC810 | |
---|---|---|
UART RXD | PTE23 | p2(P0_4) |
UART TXD | PTE22 | p8(P0_0) |
nRESET | D6 | p1(P0_5) |
nISP | D8 | p5(P0_1) |
GND | GND | p7 |
3.3V | P3V3 | p6 |
Copy binary image to the disk called LPC81ISP.
Push sw1 or sw3, start write to LPC810 flash.
BaseLpcIsp.h@2:eafc1c6787c7, 2014-05-04 (annotated)
- 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?
User | Revision | Line number | New 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 | }; |