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@7:5b78247c45c2, 2016-03-05 (annotated)
- Committer:
- k4zuki
- Date:
- Sat Mar 05 01:20:16 2016 +0000
- Revision:
- 7:5b78247c45c2
- Parent:
- 6:cb6984367a7a
- Child:
- 9:e279dee6e41c
place MyStorage instance - cannot format from PC
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 "USBDAP.h" |
k4zuki | 0:eba731be11fb | 4 | #include "BaseDAP.h" |
k4zuki | 0:eba731be11fb | 5 | #include "USB_HID.h" |
k4zuki | 3:6af8771e7f71 | 6 | #include "DA14580.h" |
k4zuki | 6:cb6984367a7a | 7 | #include "W25X40BV.h" |
k4zuki | 6:cb6984367a7a | 8 | #include "loader.h" |
k4zuki | 7:5b78247c45c2 | 9 | #include "mystorage.h" |
k4zuki | 6:cb6984367a7a | 10 | /** |
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 | 6:cb6984367a7a | 15 | SWDIO = P0_4 |
k4zuki | 6:cb6984367a7a | 16 | SWCLK = P0_5 |
k4zuki | 6:cb6984367a7a | 17 | NSRST = P0_21 |
k4zuki | 6:cb6984367a7a | 18 | TGT_RST = P1_19 |
k4zuki | 6:cb6984367a7a | 19 | - SD - |
k4zuki | 6:cb6984367a7a | 20 | MOSI = P0_8 |
k4zuki | 6:cb6984367a7a | 21 | MISO = P0_10 |
k4zuki | 6:cb6984367a7a | 22 | SCK = P0_9 |
k4zuki | 6:cb6984367a7a | 23 | CS = P0_7 |
k4zuki | 6:cb6984367a7a | 24 | DETECT2 = P0_22 |
k4zuki | 6:cb6984367a7a | 25 | - 580 - |
k4zuki | 6:cb6984367a7a | 26 | MOSI = P0_15 |
k4zuki | 6:cb6984367a7a | 27 | MISO = P0_13 |
k4zuki | 6:cb6984367a7a | 28 | SCK = P0_14 |
k4zuki | 6:cb6984367a7a | 29 | CS = P0_16 |
k4zuki | 6:cb6984367a7a | 30 | DETECT1 = P0_11 |
k4zuki | 6:cb6984367a7a | 31 | - LED - |
k4zuki | 6:cb6984367a7a | 32 | GREEN = P0_20 |
k4zuki | 6:cb6984367a7a | 33 | YELLOW = P0_2 |
k4zuki | 6:cb6984367a7a | 34 | *BL = P0_14* |
k4zuki | 6:cb6984367a7a | 35 | */ |
k4zuki | 6:cb6984367a7a | 36 | /** r0.1 |
k4zuki | 6:cb6984367a7a | 37 | - UART - |
k4zuki | 6:cb6984367a7a | 38 | TX = P0_19 |
k4zuki | 6:cb6984367a7a | 39 | RX = P0_18 |
k4zuki | 6:cb6984367a7a | 40 | - SWD - |
k4zuki | 6:cb6984367a7a | 41 | SWDIO = P0_4 |
k4zuki | 6:cb6984367a7a | 42 | SWCLK = P0_5 |
k4zuki | 6:cb6984367a7a | 43 | NSRST = P0_21 |
k4zuki | 6:cb6984367a7a | 44 | - SD - |
k4zuki | 6:cb6984367a7a | 45 | MOSI = P0_8 |
k4zuki | 6:cb6984367a7a | 46 | MISO = P0_10 |
k4zuki | 6:cb6984367a7a | 47 | SCK = P0_9 |
k4zuki | 6:cb6984367a7a | 48 | CS = P0_7 |
k4zuki | 6:cb6984367a7a | 49 | - 580/SPI Flash - |
k4zuki | 6:cb6984367a7a | 50 | MOSI = P0_15 |
k4zuki | 6:cb6984367a7a | 51 | MISO = P0_13 |
k4zuki | 6:cb6984367a7a | 52 | SCK = P0_14 |
k4zuki | 6:cb6984367a7a | 53 | CS = P0_16 |
k4zuki | 6:cb6984367a7a | 54 | - LED - |
k4zuki | 6:cb6984367a7a | 55 | GREEN = P0_20 |
k4zuki | 6:cb6984367a7a | 56 | YELLOW = P0_2 |
k4zuki | 6:cb6984367a7a | 57 | */ |
k4zuki | 1:484bd6db1378 | 58 | |
k4zuki | 6:cb6984367a7a | 59 | #undef LOADER_FILE |
k4zuki | 6:cb6984367a7a | 60 | #define LOADER_FILE "/local/loader.bin" |
k4zuki | 1:484bd6db1378 | 61 | |
k4zuki | 6:cb6984367a7a | 62 | #undef TARGET_FILE |
k4zuki | 3:6af8771e7f71 | 63 | #define TARGET_FILE "/local/target.bin" |
k4zuki | 3:6af8771e7f71 | 64 | |
k4zuki | 6:cb6984367a7a | 65 | //SWD swd(P0_4, P0_5, P0_21); // SWDIO,SWCLK,nRESET |
k4zuki | 5:77c115650c1f | 66 | |
k4zuki | 1:484bd6db1378 | 67 | DigitalOut connected(P0_20); |
k4zuki | 2:228291df190e | 68 | DigitalOut running(P0_2); |
k4zuki | 1:484bd6db1378 | 69 | |
k4zuki | 6:cb6984367a7a | 70 | InterruptIn BL(P1_19); |
k4zuki | 6:cb6984367a7a | 71 | volatile bool isISP = false; |
k4zuki | 6:cb6984367a7a | 72 | void BL_int(); |
k4zuki | 6:cb6984367a7a | 73 | |
k4zuki | 7:5b78247c45c2 | 74 | //W25X40BV memory(P0_15, P0_13, P0_14, P0_16); // mosi, miso, sclk, cs |
k4zuki | 6:cb6984367a7a | 75 | uint8_t Headerbuffer[8]={0x70,0x50,0x00,0x00,0x00,0x00,0x00,0x00}; |
k4zuki | 6:cb6984367a7a | 76 | /* |
k4zuki | 6:cb6984367a7a | 77 | header[0] | 0x70 | 'p' |
k4zuki | 6:cb6984367a7a | 78 | header[1] | 0x50 | 'P' |
k4zuki | 6:cb6984367a7a | 79 | header[2] | 0x00 | dummy[3] |
k4zuki | 6:cb6984367a7a | 80 | header[3] | 0x00 | dummy[2] |
k4zuki | 6:cb6984367a7a | 81 | header[4] | 0x00 | dummy[1] |
k4zuki | 6:cb6984367a7a | 82 | header[5] | 0x00 | dummy[0] |
k4zuki | 6:cb6984367a7a | 83 | header[6] | 0x00 | binary size MSB <- to be replaced to actual size |
k4zuki | 6:cb6984367a7a | 84 | header[7] | 0x00 | binary size LSB <- to be replaced to actual size |
k4zuki | 6:cb6984367a7a | 85 | */ |
k4zuki | 6:cb6984367a7a | 86 | DA14580 BLE(P0_19, P0_18, P0_21); // TX, RX, RESET |
k4zuki | 1:484bd6db1378 | 87 | |
k4zuki | 1:484bd6db1378 | 88 | int file_size( FILE *fp ); |
k4zuki | 1:484bd6db1378 | 89 | |
k4zuki | 6:cb6984367a7a | 90 | /* |
k4zuki | 0:eba731be11fb | 91 | class myDAP : public BaseDAP |
k4zuki | 0:eba731be11fb | 92 | { |
k4zuki | 0:eba731be11fb | 93 | public: |
k4zuki | 0:eba731be11fb | 94 | myDAP(SWD* swd):BaseDAP(swd) {}; |
k4zuki | 0:eba731be11fb | 95 | virtual void infoLED(int select, int value) { |
k4zuki | 0:eba731be11fb | 96 | switch(select) { |
k4zuki | 0:eba731be11fb | 97 | case 0: |
k4zuki | 0:eba731be11fb | 98 | connected = value^1; |
k4zuki | 0:eba731be11fb | 99 | running = 1; |
k4zuki | 0:eba731be11fb | 100 | break; |
k4zuki | 0:eba731be11fb | 101 | case 1: |
k4zuki | 0:eba731be11fb | 102 | running = value^1; |
k4zuki | 0:eba731be11fb | 103 | connected = 1; |
k4zuki | 0:eba731be11fb | 104 | break; |
k4zuki | 0:eba731be11fb | 105 | } |
k4zuki | 0:eba731be11fb | 106 | } |
k4zuki | 0:eba731be11fb | 107 | }; |
k4zuki | 6:cb6984367a7a | 108 | */ |
k4zuki | 0:eba731be11fb | 109 | |
k4zuki | 7:5b78247c45c2 | 110 | MyStorage flash(P0_8, P0_10, P0_9, P0_7); |
k4zuki | 7:5b78247c45c2 | 111 | USBLocalFileSystem usb_local(&flash, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 0:eba731be11fb | 112 | int main() |
k4zuki | 0:eba731be11fb | 113 | { |
k4zuki | 6:cb6984367a7a | 114 | // USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_8, P0_10, P0_9, P0_7, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 7:5b78247c45c2 | 115 | // USBLocalFileSystem* usb_local = new USBLocalFileSystem(&flash, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name |
k4zuki | 6:cb6984367a7a | 116 | running.write(1); |
k4zuki | 6:cb6984367a7a | 117 | BL.mode(PullUp); |
k4zuki | 6:cb6984367a7a | 118 | char hex[]="0123456789ABCDEF"; //DEBUG |
k4zuki | 6:cb6984367a7a | 119 | |
k4zuki | 6:cb6984367a7a | 120 | // usb_local->lock(true); |
k4zuki | 0:eba731be11fb | 121 | |
k4zuki | 1:484bd6db1378 | 122 | // uint8_t recieve; |
k4zuki | 6:cb6984367a7a | 123 | // uint8_t read=0; |
k4zuki | 6:cb6984367a7a | 124 | int read = 0; |
k4zuki | 6:cb6984367a7a | 125 | int loadersize = sizeof(loader)/sizeof(loader[0]); |
k4zuki | 6:cb6984367a7a | 126 | int targetsize = 0; |
k4zuki | 1:484bd6db1378 | 127 | FILE* fp; |
k4zuki | 6:cb6984367a7a | 128 | // BLE.baud(57600); |
k4zuki | 1:484bd6db1378 | 129 | // int crc=0x00; |
k4zuki | 1:484bd6db1378 | 130 | |
k4zuki | 6:cb6984367a7a | 131 | // myDAP* dap = new myDAP(&swd); |
k4zuki | 0:eba731be11fb | 132 | |
k4zuki | 3:6af8771e7f71 | 133 | int result=0; |
k4zuki | 6:cb6984367a7a | 134 | BL.mode(PullUp); |
k4zuki | 6:cb6984367a7a | 135 | BL.fall(&BL_int); |
k4zuki | 6:cb6984367a7a | 136 | |
k4zuki | 6:cb6984367a7a | 137 | /* |
k4zuki | 6:cb6984367a7a | 138 | fp = fopen(LOADER_FILE, "rb"); |
k4zuki | 6:cb6984367a7a | 139 | loadersize = file_size(fp); |
k4zuki | 6:cb6984367a7a | 140 | fclose(fp); |
k4zuki | 6:cb6984367a7a | 141 | #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler |
k4zuki | 6:cb6984367a7a | 142 | #warning "free(fp)" |
k4zuki | 6:cb6984367a7a | 143 | free(fp); |
k4zuki | 6:cb6984367a7a | 144 | #endif |
k4zuki | 6:cb6984367a7a | 145 | */ |
k4zuki | 6:cb6984367a7a | 146 | /* |
k4zuki | 6:cb6984367a7a | 147 | fp = fopen(TARGET_FILE, "rb"); |
k4zuki | 6:cb6984367a7a | 148 | targetsize = file_size(fp); |
k4zuki | 6:cb6984367a7a | 149 | fclose(fp); |
k4zuki | 6:cb6984367a7a | 150 | #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler |
k4zuki | 6:cb6984367a7a | 151 | #warning "free(fp)" |
k4zuki | 6:cb6984367a7a | 152 | free(fp); |
k4zuki | 6:cb6984367a7a | 153 | #endif |
k4zuki | 6:cb6984367a7a | 154 | */ |
k4zuki | 6:cb6984367a7a | 155 | |
k4zuki | 6:cb6984367a7a | 156 | bool _hidresult; |
k4zuki | 7:5b78247c45c2 | 157 | usb_local.lock(false); |
k4zuki | 7:5b78247c45c2 | 158 | while(1) { |
k4zuki | 7:5b78247c45c2 | 159 | running.write(1); |
k4zuki | 7:5b78247c45c2 | 160 | wait_ms(1000); |
k4zuki | 7:5b78247c45c2 | 161 | running.write(0); |
k4zuki | 7:5b78247c45c2 | 162 | wait_ms(1000); |
k4zuki | 7:5b78247c45c2 | 163 | } |
k4zuki | 7:5b78247c45c2 | 164 | /* |
k4zuki | 0:eba731be11fb | 165 | while(1) { |
k4zuki | 0:eba731be11fb | 166 | usb_local->lock(true); |
k4zuki | 0:eba731be11fb | 167 | usb_local->remount(); |
k4zuki | 6:cb6984367a7a | 168 | connected.write(1); |
k4zuki | 0:eba731be11fb | 169 | char filename[32]; |
k4zuki | 3:6af8771e7f71 | 170 | |
k4zuki | 6:cb6984367a7a | 171 | if(isISP) { |
k4zuki | 6:cb6984367a7a | 172 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 173 | usb_local->puts("Writing "TARGET_FILE" into SPI flash"); |
k4zuki | 6:cb6984367a7a | 174 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 175 | usb_local->puts("Try BLE.load(): "); |
k4zuki | 6:cb6984367a7a | 176 | running.write(0); |
k4zuki | 6:cb6984367a7a | 177 | result = BLE.load(); |
k4zuki | 6:cb6984367a7a | 178 | running.write(1); |
k4zuki | 6:cb6984367a7a | 179 | usb_local->putc(result); |
k4zuki | 6:cb6984367a7a | 180 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 181 | isISP = false; |
k4zuki | 6:cb6984367a7a | 182 | } else { |
k4zuki | 6:cb6984367a7a | 183 | if(BLE._ble.readable()){ |
k4zuki | 6:cb6984367a7a | 184 | usb_local->putc(BLE._ble.getc()); |
k4zuki | 6:cb6984367a7a | 185 | }else{ |
k4zuki | 6:cb6984367a7a | 186 | usb_local->putc('.'); |
k4zuki | 0:eba731be11fb | 187 | } |
k4zuki | 0:eba731be11fb | 188 | } |
k4zuki | 7:5b78247c45c2 | 189 | */ |
k4zuki | 6:cb6984367a7a | 190 | /* |
k4zuki | 6:cb6984367a7a | 191 | usb_local->puts("loadersize: "); |
k4zuki | 6:cb6984367a7a | 192 | read= 0x0f& (loadersize>>12); |
k4zuki | 6:cb6984367a7a | 193 | usb_local->putc(hex[read]); |
k4zuki | 6:cb6984367a7a | 194 | read= 0x0f& (loadersize>>8); |
k4zuki | 6:cb6984367a7a | 195 | usb_local->putc(hex[read]); |
k4zuki | 6:cb6984367a7a | 196 | read= 0x0f& (loadersize>>4); |
k4zuki | 6:cb6984367a7a | 197 | usb_local->putc(hex[read]); |
k4zuki | 6:cb6984367a7a | 198 | read= 0x0f& (loadersize); |
k4zuki | 6:cb6984367a7a | 199 | usb_local->putc(hex[read]); |
k4zuki | 6:cb6984367a7a | 200 | usb_local->puts("\n\r"); |
k4zuki | 6:cb6984367a7a | 201 | */ |
k4zuki | 6:cb6984367a7a | 202 | /* |
k4zuki | 6:cb6984367a7a | 203 | if (usb_local->find(filename, sizeof(filename), "*.TXT")) { |
k4zuki | 6:cb6984367a7a | 204 | fp = fopen(filename, "r"); |
k4zuki | 6:cb6984367a7a | 205 | if (fp) { |
k4zuki | 6:cb6984367a7a | 206 | int c; |
k4zuki | 6:cb6984367a7a | 207 | while((c = fgetc(fp)) != EOF) { |
k4zuki | 6:cb6984367a7a | 208 | usb_local->putc(c); |
k4zuki | 6:cb6984367a7a | 209 | } |
k4zuki | 6:cb6984367a7a | 210 | fclose(fp); |
k4zuki | 6:cb6984367a7a | 211 | #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler |
k4zuki | 6:cb6984367a7a | 212 | #warning "free(fp)" |
k4zuki | 6:cb6984367a7a | 213 | free(fp); |
k4zuki | 6:cb6984367a7a | 214 | #endif |
k4zuki | 6:cb6984367a7a | 215 | } |
k4zuki | 6:cb6984367a7a | 216 | } |
k4zuki | 6:cb6984367a7a | 217 | */ |
k4zuki | 0:eba731be11fb | 218 | |
k4zuki | 6:cb6984367a7a | 219 | // USBStorage2* _usb = usb_local->getUsb(); |
k4zuki | 6:cb6984367a7a | 220 | /* |
k4zuki | 0:eba731be11fb | 221 | HID_REPORT recv_report; |
k4zuki | 6:cb6984367a7a | 222 | |
k4zuki | 6:cb6984367a7a | 223 | USB_HID* _hid = usb_local->getUsb()->getHID(); |
k4zuki | 6:cb6984367a7a | 224 | _hidresult = _hid->readNB(&recv_report); |
k4zuki | 6:cb6984367a7a | 225 | if( _hidresult ) { |
k4zuki | 0:eba731be11fb | 226 | HID_REPORT send_report; |
k4zuki | 6:cb6984367a7a | 227 | usb_local->puts("T\n\r"); |
k4zuki | 0:eba731be11fb | 228 | dap->Command(recv_report.data, send_report.data); |
k4zuki | 0:eba731be11fb | 229 | send_report.length = 64; |
k4zuki | 6:cb6984367a7a | 230 | _hid->send(&send_report); |
k4zuki | 6:cb6984367a7a | 231 | } else { |
k4zuki | 6:cb6984367a7a | 232 | usb_local->puts("F\n\r"); |
k4zuki | 0:eba731be11fb | 233 | } |
k4zuki | 6:cb6984367a7a | 234 | */ |
k4zuki | 7:5b78247c45c2 | 235 | /* |
k4zuki | 3:6af8771e7f71 | 236 | usb_local->lock(false); |
k4zuki | 6:cb6984367a7a | 237 | connected = 0; |
k4zuki | 6:cb6984367a7a | 238 | wait_ms(1000); |
k4zuki | 0:eba731be11fb | 239 | } |
k4zuki | 7:5b78247c45c2 | 240 | */ |
k4zuki | 1:484bd6db1378 | 241 | } |
k4zuki | 1:484bd6db1378 | 242 | |
k4zuki | 1:484bd6db1378 | 243 | int file_size( FILE *fp ) |
k4zuki | 1:484bd6db1378 | 244 | { |
k4zuki | 1:484bd6db1378 | 245 | int size; |
k4zuki | 1:484bd6db1378 | 246 | |
k4zuki | 1:484bd6db1378 | 247 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 1:484bd6db1378 | 248 | size = ftell( fp ); // get current file pointer |
k4zuki | 1:484bd6db1378 | 249 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 1:484bd6db1378 | 250 | |
k4zuki | 1:484bd6db1378 | 251 | return size; |
k4zuki | 1:484bd6db1378 | 252 | } |
k4zuki | 1:484bd6db1378 | 253 | |
k4zuki | 6:cb6984367a7a | 254 | void BL_int() |
k4zuki | 3:6af8771e7f71 | 255 | { |
k4zuki | 6:cb6984367a7a | 256 | isISP = true; |
k4zuki | 1:484bd6db1378 | 257 | } |