USBLocalFileSystem.lib testing program for LPC11U35
Dependencies: BaseDAP SWD USBDAP USBLocalFileSystem mbed DA14580 SWSPI W25X40BV
USB memory + Writer for DA14580 BLE chip + CMSIS-DAP debugger + USB-UART functions in one chip
One button input loads your application into DA14580 or DA14580 included BLE modules
Quote:
Current compatible hardware description can be found at https://github.com/K4zuki/da14580/releases/tag/MurataBLEr04
main.cpp@12:417eb27c4146, 2016-08-12 (annotated)
- Committer:
- k4zuki
- Date:
- Fri Aug 12 06:37:48 2016 +0000
- Revision:
- 12:417eb27c4146
- Parent:
- 11:f6a0c6b3cc7d
- Child:
- 13:9a2f6902f4f1
minimum set of writer function;; sends result message to host;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
k4zuki | 0:eba731be11fb | 1 | #include "mbed.h" |
k4zuki | 0:eba731be11fb | 2 | #include "USBLocalFileSystem.h" |
k4zuki | 0:eba731be11fb | 3 | #include "BaseDAP.h" |
k4zuki | 0:eba731be11fb | 4 | #include "USB_HID.h" |
k4zuki | 3:6af8771e7f71 | 5 | #include "DA14580.h" |
k4zuki | 6:cb6984367a7a | 6 | #include "W25X40BV.h" |
k4zuki | 12:417eb27c4146 | 7 | //#include "loader.h" |
k4zuki | 7:5b78247c45c2 | 8 | #include "mystorage.h" |
k4zuki | 11:f6a0c6b3cc7d | 9 | |
k4zuki | 11:f6a0c6b3cc7d | 10 | /** r0.4_aef7891 |
k4zuki | 6:cb6984367a7a | 11 | - UART - |
k4zuki | 6:cb6984367a7a | 12 | TX = P0_19 |
k4zuki | 6:cb6984367a7a | 13 | RX = P0_18 |
k4zuki | 6:cb6984367a7a | 14 | - SWD - |
k4zuki | 11:f6a0c6b3cc7d | 15 | SWDIO = P0_14 |
k4zuki | 11:f6a0c6b3cc7d | 16 | SWCLK = P0_13 |
k4zuki | 11:f6a0c6b3cc7d | 17 | NSRST = P0_2 |
k4zuki | 6:cb6984367a7a | 18 | TGT_RST = P1_19 |
k4zuki | 11:f6a0c6b3cc7d | 19 | - SPI Flash - |
k4zuki | 11:f6a0c6b3cc7d | 20 | MOSI = P0_16 |
k4zuki | 11:f6a0c6b3cc7d | 21 | MISO = P0_23 |
k4zuki | 11:f6a0c6b3cc7d | 22 | SCK = P0_15 |
k4zuki | 11:f6a0c6b3cc7d | 23 | CS = P1_15 |
k4zuki | 6:cb6984367a7a | 24 | - 580 - |
k4zuki | 11:f6a0c6b3cc7d | 25 | MOSI = P0_9 |
k4zuki | 11:f6a0c6b3cc7d | 26 | MISO = P0_7 |
k4zuki | 11:f6a0c6b3cc7d | 27 | SCK = P0_8 |
k4zuki | 11:f6a0c6b3cc7d | 28 | CS = P0_21 |
k4zuki | 6:cb6984367a7a | 29 | - LED - |
k4zuki | 11:f6a0c6b3cc7d | 30 | RED = P0_5 |
k4zuki | 11:f6a0c6b3cc7d | 31 | GREEN = P0_4 |
k4zuki | 11:f6a0c6b3cc7d | 32 | BLUE = P0_20 |
k4zuki | 6:cb6984367a7a | 33 | */ |
k4zuki | 1:484bd6db1378 | 34 | |
k4zuki | 6:cb6984367a7a | 35 | #undef LOADER_FILE |
k4zuki | 6:cb6984367a7a | 36 | #define LOADER_FILE "/local/loader.bin" |
k4zuki | 1:484bd6db1378 | 37 | |
k4zuki | 6:cb6984367a7a | 38 | #undef TARGET_FILE |
k4zuki | 3:6af8771e7f71 | 39 | #define TARGET_FILE "/local/target.bin" |
k4zuki | 3:6af8771e7f71 | 40 | |
k4zuki | 11:f6a0c6b3cc7d | 41 | /* |
k4zuki | 11:f6a0c6b3cc7d | 42 | - SWD - |
k4zuki | 11:f6a0c6b3cc7d | 43 | SWDIO = P0_14 |
k4zuki | 11:f6a0c6b3cc7d | 44 | SWCLK = P0_13 |
k4zuki | 11:f6a0c6b3cc7d | 45 | NSRST = P0_2 |
k4zuki | 11:f6a0c6b3cc7d | 46 | TGT_RST = P1_19 |
k4zuki | 11:f6a0c6b3cc7d | 47 | */ |
k4zuki | 11:f6a0c6b3cc7d | 48 | SWD swd(P0_14, P0_13, P0_2); // SWDIO,SWCLK,nRESET |
k4zuki | 11:f6a0c6b3cc7d | 49 | InterruptIn TGT_RST_IN(P1_19); |
k4zuki | 6:cb6984367a7a | 50 | volatile bool isISP = false; |
k4zuki | 11:f6a0c6b3cc7d | 51 | void TGT_RST_IN_int(); |
k4zuki | 6:cb6984367a7a | 52 | |
k4zuki | 11:f6a0c6b3cc7d | 53 | /* |
k4zuki | 11:f6a0c6b3cc7d | 54 | - LED - |
k4zuki | 11:f6a0c6b3cc7d | 55 | RED = P0_5 |
k4zuki | 11:f6a0c6b3cc7d | 56 | GREEN = P0_4 |
k4zuki | 11:f6a0c6b3cc7d | 57 | BLUE = P0_20 |
k4zuki | 11:f6a0c6b3cc7d | 58 | */ |
k4zuki | 11:f6a0c6b3cc7d | 59 | DigitalOut connected(P0_5); |
k4zuki | 11:f6a0c6b3cc7d | 60 | DigitalOut running(P0_4); |
k4zuki | 11:f6a0c6b3cc7d | 61 | |
k4zuki | 6:cb6984367a7a | 62 | /* |
k4zuki | 11:f6a0c6b3cc7d | 63 | - UART - |
k4zuki | 11:f6a0c6b3cc7d | 64 | TX = P0_19 |
k4zuki | 11:f6a0c6b3cc7d | 65 | RX = P0_18 |
k4zuki | 11:f6a0c6b3cc7d | 66 | */ |
k4zuki | 11:f6a0c6b3cc7d | 67 | DA14580 BLE(P0_19, P0_18, P0_2); // TX, RX, RESET |
k4zuki | 1:484bd6db1378 | 68 | |
k4zuki | 1:484bd6db1378 | 69 | int file_size( FILE *fp ); |
k4zuki | 1:484bd6db1378 | 70 | |
k4zuki | 0:eba731be11fb | 71 | class myDAP : public BaseDAP |
k4zuki | 0:eba731be11fb | 72 | { |
k4zuki | 0:eba731be11fb | 73 | public: |
k4zuki | 0:eba731be11fb | 74 | myDAP(SWD* swd):BaseDAP(swd) {}; |
k4zuki | 0:eba731be11fb | 75 | virtual void infoLED(int select, int value) { |
k4zuki | 0:eba731be11fb | 76 | switch(select) { |
k4zuki | 0:eba731be11fb | 77 | case 0: |
k4zuki | 0:eba731be11fb | 78 | connected = value^1; |
k4zuki | 0:eba731be11fb | 79 | running = 1; |
k4zuki | 0:eba731be11fb | 80 | break; |
k4zuki | 0:eba731be11fb | 81 | case 1: |
k4zuki | 0:eba731be11fb | 82 | running = value^1; |
k4zuki | 0:eba731be11fb | 83 | connected = 1; |
k4zuki | 0:eba731be11fb | 84 | break; |
k4zuki | 0:eba731be11fb | 85 | } |
k4zuki | 0:eba731be11fb | 86 | } |
k4zuki | 0:eba731be11fb | 87 | }; |
k4zuki | 0:eba731be11fb | 88 | |
k4zuki | 11:f6a0c6b3cc7d | 89 | /* |
k4zuki | 11:f6a0c6b3cc7d | 90 | - SPI Flash - |
k4zuki | 11:f6a0c6b3cc7d | 91 | MOSI = P0_16 |
k4zuki | 11:f6a0c6b3cc7d | 92 | MISO = P0_23 |
k4zuki | 11:f6a0c6b3cc7d | 93 | SCK = P0_15 |
k4zuki | 11:f6a0c6b3cc7d | 94 | CS = P1_15 |
k4zuki | 11:f6a0c6b3cc7d | 95 | */ |
k4zuki | 11:f6a0c6b3cc7d | 96 | MyStorage LocalFS(P0_16, P0_23, P0_15, P1_15); // mosi, miso, sclk, cs |
k4zuki | 0:eba731be11fb | 97 | int main() |
k4zuki | 0:eba731be11fb | 98 | { |
k4zuki | 12:417eb27c4146 | 99 | USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); |
k4zuki | 12:417eb27c4146 | 100 | //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 11:f6a0c6b3cc7d | 101 | |
k4zuki | 10:4553fd77a832 | 102 | USB_HID* _hid = usb_local->getUsb()->getHID(); |
k4zuki | 10:4553fd77a832 | 103 | HID_REPORT recv_report; |
k4zuki | 10:4553fd77a832 | 104 | HID_REPORT send_report; |
k4zuki | 10:4553fd77a832 | 105 | myDAP* dap = new myDAP(&swd); |
k4zuki | 10:4553fd77a832 | 106 | |
k4zuki | 6:cb6984367a7a | 107 | running.write(1); |
k4zuki | 11:f6a0c6b3cc7d | 108 | TGT_RST_IN.mode(PullUp); |
k4zuki | 12:417eb27c4146 | 109 | char* STAT_MSG[6]={ |
k4zuki | 12:417eb27c4146 | 110 | "SUCCESS", |
k4zuki | 12:417eb27c4146 | 111 | "NOT CONNECTED", |
k4zuki | 12:417eb27c4146 | 112 | "FILE NOT FOUND", |
k4zuki | 12:417eb27c4146 | 113 | "STX TIMEOUT", |
k4zuki | 12:417eb27c4146 | 114 | "NO ACKNOWLEDGE", |
k4zuki | 12:417eb27c4146 | 115 | "CRC MISMATCHED" |
k4zuki | 12:417eb27c4146 | 116 | }; |
k4zuki | 6:cb6984367a7a | 117 | |
k4zuki | 10:4553fd77a832 | 118 | int result = 0; |
k4zuki | 11:f6a0c6b3cc7d | 119 | TGT_RST_IN.mode(PullUp); |
k4zuki | 11:f6a0c6b3cc7d | 120 | TGT_RST_IN.fall(&TGT_RST_IN_int); |
k4zuki | 6:cb6984367a7a | 121 | |
k4zuki | 6:cb6984367a7a | 122 | bool _hidresult; |
k4zuki | 10:4553fd77a832 | 123 | usb_local->lock(false); |
k4zuki | 0:eba731be11fb | 124 | while(1) { |
k4zuki | 0:eba731be11fb | 125 | usb_local->lock(true); |
k4zuki | 0:eba731be11fb | 126 | usb_local->remount(); |
k4zuki | 6:cb6984367a7a | 127 | connected.write(1); |
k4zuki | 3:6af8771e7f71 | 128 | |
k4zuki | 6:cb6984367a7a | 129 | if(isISP) { |
k4zuki | 6:cb6984367a7a | 130 | running.write(0); |
k4zuki | 12:417eb27c4146 | 131 | result = BLE.load(TARGET_FILE); |
k4zuki | 6:cb6984367a7a | 132 | running.write(1); |
k4zuki | 12:417eb27c4146 | 133 | usb_local->puts(STAT_MSG[result]); |
k4zuki | 11:f6a0c6b3cc7d | 134 | usb_local->putc(0x07); //bell |
k4zuki | 6:cb6984367a7a | 135 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 136 | isISP = false; |
k4zuki | 0:eba731be11fb | 137 | } |
k4zuki | 10:4553fd77a832 | 138 | usb_local->lock(false); |
k4zuki | 12:417eb27c4146 | 139 | _hidresult = _hid->readNB(&recv_report); |
k4zuki | 12:417eb27c4146 | 140 | if( _hidresult ) { |
k4zuki | 6:cb6984367a7a | 141 | |
k4zuki | 12:417eb27c4146 | 142 | dap->Command(recv_report.data, send_report.data); |
k4zuki | 12:417eb27c4146 | 143 | send_report.length = 64; |
k4zuki | 12:417eb27c4146 | 144 | _hid->send(&send_report); |
k4zuki | 12:417eb27c4146 | 145 | } |
k4zuki | 12:417eb27c4146 | 146 | if(BLE._ble.readable()) { |
k4zuki | 12:417eb27c4146 | 147 | usb_local->putc(BLE._ble.getc()); |
k4zuki | 12:417eb27c4146 | 148 | } |
k4zuki | 12:417eb27c4146 | 149 | wait_us(1000); |
k4zuki | 6:cb6984367a7a | 150 | connected = 0; |
k4zuki | 0:eba731be11fb | 151 | } |
k4zuki | 1:484bd6db1378 | 152 | } |
k4zuki | 1:484bd6db1378 | 153 | |
k4zuki | 1:484bd6db1378 | 154 | int file_size( FILE *fp ) |
k4zuki | 1:484bd6db1378 | 155 | { |
k4zuki | 1:484bd6db1378 | 156 | int size; |
k4zuki | 1:484bd6db1378 | 157 | |
k4zuki | 1:484bd6db1378 | 158 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 1:484bd6db1378 | 159 | size = ftell( fp ); // get current file pointer |
k4zuki | 1:484bd6db1378 | 160 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 1:484bd6db1378 | 161 | |
k4zuki | 1:484bd6db1378 | 162 | return size; |
k4zuki | 1:484bd6db1378 | 163 | } |
k4zuki | 1:484bd6db1378 | 164 | |
k4zuki | 11:f6a0c6b3cc7d | 165 | void TGT_RST_IN_int() |
k4zuki | 3:6af8771e7f71 | 166 | { |
k4zuki | 6:cb6984367a7a | 167 | isISP = true; |
k4zuki | 1:484bd6db1378 | 168 | } |