USB composite device example program, drag-and-drop flash writer.
Dependencies: SWD USBDevice mbed BaseDAP
Diff: Flash.h
- Revision:
- 0:2385683c867a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Flash.h Tue Sep 17 04:33:44 2013 +0000 @@ -0,0 +1,52 @@ +// Flash.h 2013/9/16 +#pragma once +#include "Target2.h" + +#define IAP_CCLK 12000 + +/** 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 eraseAll(); + 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); +private: + void _setup(); + bool _write_to_ram(int addr, int size, const uint8_t* buf); + int _sector(int addr); + bool _patch(uint8_t* buf, int size, int addr); +protected: + Target2* _target; + Serial* _pc; +};