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

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?

UserRevisionLine numberNew 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 }