USB composite device example program, drag-and-drop flash writer.

Dependencies:   SWD USBDevice mbed BaseDAP

Committer:
va009039
Date:
Sat Sep 28 03:21:14 2013 +0000
Revision:
1:ea8e179320d7
Parent:
0:2385683c867a
add USBMSD_Drop class. add CDC(Virtual COM) and HID(for example CMSIS-DAP), but KL25Z not work.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:2385683c867a 1 // Flash.h 2013/9/16
va009039 0:2385683c867a 2 #pragma once
va009039 0:2385683c867a 3 #include "Target2.h"
va009039 0:2385683c867a 4
va009039 0:2385683c867a 5 #define IAP_CCLK 12000
va009039 0:2385683c867a 6
va009039 0:2385683c867a 7 /** Flash writer
va009039 0:2385683c867a 8 */
va009039 0:2385683c867a 9 class Flash {
va009039 0:2385683c867a 10 public:
va009039 0:2385683c867a 11 Flash(Target2* target, Serial* usbpc);
va009039 0:2385683c867a 12 bool init();
va009039 0:2385683c867a 13 bool write(const char* filename);
va009039 0:2385683c867a 14 bool write(int addr, const uint8_t* data, int size);
va009039 0:2385683c867a 15 bool eraseAll();
va009039 0:2385683c867a 16 bool verify(const char* filename);
va009039 0:2385683c867a 17 enum IAP_CMD {
va009039 0:2385683c867a 18 PREPARE_SECTOR = 50,
va009039 0:2385683c867a 19 COPY_RAM_TO_FLASH = 51,
va009039 0:2385683c867a 20 ERASE_SECTOR = 52,
va009039 0:2385683c867a 21 BLANK_CHECK = 53,
va009039 0:2385683c867a 22 READ_PART_ID = 54,
va009039 0:2385683c867a 23 READ_BOOT_CODE_VERSION = 55,
va009039 0:2385683c867a 24 COMPARE = 56,
va009039 0:2385683c867a 25 REINVOKE_ISP = 57,
va009039 0:2385683c867a 26 READ_UID = 58,
va009039 0:2385683c867a 27 };
va009039 0:2385683c867a 28 enum IAP_STATUS {
va009039 0:2385683c867a 29 CMD_SUCCESS = 0,
va009039 0:2385683c867a 30 INVALID_COMMAND =1,
va009039 0:2385683c867a 31 SRC_ADDR_ERROR = 2,
va009039 0:2385683c867a 32 DST_ADDR_ERROR = 3,
va009039 0:2385683c867a 33 SRC_ADDR_NOT_MAPPED = 4,
va009039 0:2385683c867a 34 DST_ADDR_NOT_MAPPED = 5,
va009039 0:2385683c867a 35 COUNT_ERROR = 6,
va009039 0:2385683c867a 36 INVALID_SECTOR = 7,
va009039 0:2385683c867a 37 SECTOR_NOT_BLANK = 8,
va009039 0:2385683c867a 38 SECTOR_NOT_PREPARED_FOR_WRITE_OPERATION = 9,
va009039 0:2385683c867a 39 COMPARE_ERROR = 10,
va009039 0:2385683c867a 40 BUSY = 11,
va009039 0:2385683c867a 41 ADDR_ERROR = 13,
va009039 0:2385683c867a 42 };
va009039 0:2385683c867a 43 IAP_STATUS remoteIAP(IAP_CMD cmd, uint32_t p0=0, uint32_t p1=0, uint32_t p2=0, uint32_t p3=0);
va009039 0:2385683c867a 44 private:
va009039 0:2385683c867a 45 void _setup();
va009039 0:2385683c867a 46 bool _write_to_ram(int addr, int size, const uint8_t* buf);
va009039 0:2385683c867a 47 int _sector(int addr);
va009039 0:2385683c867a 48 bool _patch(uint8_t* buf, int size, int addr);
va009039 0:2385683c867a 49 protected:
va009039 0:2385683c867a 50 Target2* _target;
va009039 0:2385683c867a 51 Serial* _pc;
va009039 0:2385683c867a 52 };