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:
Thu Jul 07 01:49:59 2016 +0000
Revision:
11:f6a0c6b3cc7d
Parent:
10:4553fd77a832
Child:
12:417eb27c4146
pinout match with HW-r0.4_aef7891;; libraries update

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 "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 6:cb6984367a7a 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 - 580 -
k4zuki 11:f6a0c6b3cc7d 64 MOSI = P0_9
k4zuki 11:f6a0c6b3cc7d 65 MISO = P0_7
k4zuki 11:f6a0c6b3cc7d 66 SCK = P0_8
k4zuki 11:f6a0c6b3cc7d 67 CS = P0_21
k4zuki 6:cb6984367a7a 68 */
k4zuki 11:f6a0c6b3cc7d 69 W25X40BV memory(P0_9, P0_7, P0_8, P0_21); // mosi, miso, sclk, cs
k4zuki 11:f6a0c6b3cc7d 70 /*
k4zuki 11:f6a0c6b3cc7d 71 - UART -
k4zuki 11:f6a0c6b3cc7d 72 TX = P0_19
k4zuki 11:f6a0c6b3cc7d 73 RX = P0_18
k4zuki 11:f6a0c6b3cc7d 74 */
k4zuki 11:f6a0c6b3cc7d 75 DA14580 BLE(P0_19, P0_18, P0_2); // TX, RX, RESET
k4zuki 1:484bd6db1378 76
k4zuki 1:484bd6db1378 77 int file_size( FILE *fp );
k4zuki 1:484bd6db1378 78
k4zuki 0:eba731be11fb 79 class myDAP : public BaseDAP
k4zuki 0:eba731be11fb 80 {
k4zuki 0:eba731be11fb 81 public:
k4zuki 0:eba731be11fb 82 myDAP(SWD* swd):BaseDAP(swd) {};
k4zuki 0:eba731be11fb 83 virtual void infoLED(int select, int value) {
k4zuki 0:eba731be11fb 84 switch(select) {
k4zuki 0:eba731be11fb 85 case 0:
k4zuki 0:eba731be11fb 86 connected = value^1;
k4zuki 0:eba731be11fb 87 running = 1;
k4zuki 0:eba731be11fb 88 break;
k4zuki 0:eba731be11fb 89 case 1:
k4zuki 0:eba731be11fb 90 running = value^1;
k4zuki 0:eba731be11fb 91 connected = 1;
k4zuki 0:eba731be11fb 92 break;
k4zuki 0:eba731be11fb 93 }
k4zuki 0:eba731be11fb 94 }
k4zuki 0:eba731be11fb 95 };
k4zuki 0:eba731be11fb 96
k4zuki 11:f6a0c6b3cc7d 97 /*
k4zuki 11:f6a0c6b3cc7d 98 - SPI Flash -
k4zuki 11:f6a0c6b3cc7d 99 MOSI = P0_16
k4zuki 11:f6a0c6b3cc7d 100 MISO = P0_23
k4zuki 11:f6a0c6b3cc7d 101 SCK = P0_15
k4zuki 11:f6a0c6b3cc7d 102 CS = P1_15
k4zuki 11:f6a0c6b3cc7d 103 */
k4zuki 11:f6a0c6b3cc7d 104 MyStorage LocalFS(P0_16, P0_23, P0_15, P1_15); // mosi, miso, sclk, cs
k4zuki 11:f6a0c6b3cc7d 105 //MyStorage LocalFS(P0_15, P0_13, P0_14, P0_16);
k4zuki 0:eba731be11fb 106 int main()
k4zuki 0:eba731be11fb 107 {
k4zuki 11:f6a0c6b3cc7d 108 USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
k4zuki 11:f6a0c6b3cc7d 109
k4zuki 10:4553fd77a832 110 USB_HID* _hid = usb_local->getUsb()->getHID();
k4zuki 10:4553fd77a832 111 HID_REPORT recv_report;
k4zuki 10:4553fd77a832 112 HID_REPORT send_report;
k4zuki 10:4553fd77a832 113 myDAP* dap = new myDAP(&swd);
k4zuki 10:4553fd77a832 114
k4zuki 6:cb6984367a7a 115 // 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 11:f6a0c6b3cc7d 116 // USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
k4zuki 6:cb6984367a7a 117 running.write(1);
k4zuki 11:f6a0c6b3cc7d 118 TGT_RST_IN.mode(PullUp);
k4zuki 11:f6a0c6b3cc7d 119 memory.frequency(SPI_FREQ);
k4zuki 6:cb6984367a7a 120 char hex[]="0123456789ABCDEF"; //DEBUG
k4zuki 6:cb6984367a7a 121
k4zuki 11:f6a0c6b3cc7d 122 int appleCount = 10;
k4zuki 11:f6a0c6b3cc7d 123 char buf[ 1024 ];
k4zuki 11:f6a0c6b3cc7d 124
k4zuki 6:cb6984367a7a 125 int read = 0;
k4zuki 10:4553fd77a832 126 int result = 0;
k4zuki 11:f6a0c6b3cc7d 127 TGT_RST_IN.mode(PullUp);
k4zuki 11:f6a0c6b3cc7d 128 TGT_RST_IN.fall(&TGT_RST_IN_int);
k4zuki 6:cb6984367a7a 129
k4zuki 6:cb6984367a7a 130 bool _hidresult;
k4zuki 10:4553fd77a832 131 usb_local->lock(false);
k4zuki 0:eba731be11fb 132 while(1) {
k4zuki 0:eba731be11fb 133 usb_local->lock(true);
k4zuki 0:eba731be11fb 134 usb_local->remount();
k4zuki 6:cb6984367a7a 135 connected.write(1);
k4zuki 3:6af8771e7f71 136
k4zuki 6:cb6984367a7a 137 if(isISP) {
k4zuki 11:f6a0c6b3cc7d 138 sprintf( buf, "I have %d apples.\r\n", appleCount );
k4zuki 11:f6a0c6b3cc7d 139 char *ptr = buf;
k4zuki 11:f6a0c6b3cc7d 140 while( *ptr != (char)0 ) {
k4zuki 11:f6a0c6b3cc7d 141 usb_local->putc(*ptr++);
k4zuki 11:f6a0c6b3cc7d 142 }
k4zuki 11:f6a0c6b3cc7d 143 sprintf( &buf[0], "\r\nWriting "TARGET_FILE" into SPI flash" );
k4zuki 11:f6a0c6b3cc7d 144 ptr = &buf[0];
k4zuki 11:f6a0c6b3cc7d 145 while( *ptr != (char)0 ) {
k4zuki 11:f6a0c6b3cc7d 146 usb_local->putc(*ptr++);
k4zuki 11:f6a0c6b3cc7d 147 }
k4zuki 11:f6a0c6b3cc7d 148 // usb_local->puts("\n\r");
k4zuki 11:f6a0c6b3cc7d 149 // usb_local->puts("Writing "TARGET_FILE" into SPI flash");
k4zuki 11:f6a0c6b3cc7d 150 // BLE.copy_to_flash(&memory);
k4zuki 11:f6a0c6b3cc7d 151
k4zuki 11:f6a0c6b3cc7d 152 int _filesize;
k4zuki 11:f6a0c6b3cc7d 153 uint8_t Headerbuffer[8] = {0x70,0x50,0x00,0x00,0x00,0x00,0x00,0x00};
k4zuki 11:f6a0c6b3cc7d 154 char _data[256];
k4zuki 11:f6a0c6b3cc7d 155 FILE* _fp = fopen(TARGET_FILE, "r" );
k4zuki 11:f6a0c6b3cc7d 156 if (_fp) {
k4zuki 11:f6a0c6b3cc7d 157 BLE.init();
k4zuki 11:f6a0c6b3cc7d 158 //erase 64KByte
k4zuki 11:f6a0c6b3cc7d 159 memory.block32Erase(0);
k4zuki 11:f6a0c6b3cc7d 160 memory.block32Erase(1);
k4zuki 11:f6a0c6b3cc7d 161
k4zuki 11:f6a0c6b3cc7d 162 _filesize = file_size(_fp);
k4zuki 11:f6a0c6b3cc7d 163 usb_local->puts("\n\r");
k4zuki 11:f6a0c6b3cc7d 164 usb_local->puts("filesize: ");
k4zuki 11:f6a0c6b3cc7d 165 read= 0x0f& (_filesize>>12);
k4zuki 11:f6a0c6b3cc7d 166 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 167 read= 0x0f& (_filesize>>8);
k4zuki 11:f6a0c6b3cc7d 168 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 169 read= 0x0f& (_filesize>>4);
k4zuki 11:f6a0c6b3cc7d 170 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 171 read= 0x0f& (_filesize);
k4zuki 11:f6a0c6b3cc7d 172 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 173 usb_local->puts("\n\r");
k4zuki 11:f6a0c6b3cc7d 174 Headerbuffer[6]= (uint8_t)( (_filesize >> 8) & 0xff);
k4zuki 11:f6a0c6b3cc7d 175 Headerbuffer[7]= (uint8_t)(_filesize & 0xff);
k4zuki 11:f6a0c6b3cc7d 176
k4zuki 11:f6a0c6b3cc7d 177 for(int i=0; i<8; i++) {
k4zuki 11:f6a0c6b3cc7d 178 read= 0x0f& (Headerbuffer[i]>>4);
k4zuki 11:f6a0c6b3cc7d 179 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 180 read= 0x0f& (Headerbuffer[i]);
k4zuki 11:f6a0c6b3cc7d 181 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 182 usb_local->puts("\n\r");
k4zuki 11:f6a0c6b3cc7d 183 }
k4zuki 11:f6a0c6b3cc7d 184
k4zuki 11:f6a0c6b3cc7d 185 memory.writeStream(0, Headerbuffer, 8);
k4zuki 11:f6a0c6b3cc7d 186 wait_ms(1);
k4zuki 11:f6a0c6b3cc7d 187 memory.readStream(0, (uint8_t*)_data, 8);
k4zuki 11:f6a0c6b3cc7d 188
k4zuki 11:f6a0c6b3cc7d 189 for(int i=0; i<8; i++) {
k4zuki 11:f6a0c6b3cc7d 190 read= 0x0f& (_data[i]>>4);
k4zuki 11:f6a0c6b3cc7d 191 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 192 read= 0x0f& (_data[i]);
k4zuki 11:f6a0c6b3cc7d 193 usb_local->putc(hex[read]);
k4zuki 11:f6a0c6b3cc7d 194 usb_local->puts("\n\r");
k4zuki 11:f6a0c6b3cc7d 195 }
k4zuki 11:f6a0c6b3cc7d 196
k4zuki 11:f6a0c6b3cc7d 197 if(_filesize >= 248) {
k4zuki 11:f6a0c6b3cc7d 198 fgets(_data, 248,_fp);
k4zuki 11:f6a0c6b3cc7d 199 memory.writeStream(8, (uint8_t*)_data, (248));
k4zuki 11:f6a0c6b3cc7d 200 _filesize -= (256-8);
k4zuki 11:f6a0c6b3cc7d 201 } else {
k4zuki 11:f6a0c6b3cc7d 202 fgets(_data, _filesize ,_fp);
k4zuki 11:f6a0c6b3cc7d 203 memory.writeStream(8, (uint8_t*)_data, (_filesize));
k4zuki 11:f6a0c6b3cc7d 204 _filesize = 0;
k4zuki 11:f6a0c6b3cc7d 205 }
k4zuki 11:f6a0c6b3cc7d 206
k4zuki 11:f6a0c6b3cc7d 207 int i=1;
k4zuki 11:f6a0c6b3cc7d 208 while(_filesize >= 256) {
k4zuki 11:f6a0c6b3cc7d 209 fgets(_data, (256), _fp);
k4zuki 11:f6a0c6b3cc7d 210 memory.writeStream(256*i, (uint8_t*)_data, (256));
k4zuki 11:f6a0c6b3cc7d 211 usb_local->putc(hex[i%10]);
k4zuki 11:f6a0c6b3cc7d 212 i++;
k4zuki 11:f6a0c6b3cc7d 213 _filesize -= (256);
k4zuki 11:f6a0c6b3cc7d 214 }
k4zuki 11:f6a0c6b3cc7d 215 if(_filesize > 0) {
k4zuki 11:f6a0c6b3cc7d 216 fgets(_data, _filesize, _fp);
k4zuki 11:f6a0c6b3cc7d 217 memory.writeStream(256*i, (uint8_t*)_data, (_filesize));
k4zuki 11:f6a0c6b3cc7d 218 }
k4zuki 11:f6a0c6b3cc7d 219 }
k4zuki 11:f6a0c6b3cc7d 220 fclose(_fp);
k4zuki 11:f6a0c6b3cc7d 221 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
k4zuki 11:f6a0c6b3cc7d 222 #warning "free(_fp)"
k4zuki 11:f6a0c6b3cc7d 223 free(_fp);
k4zuki 11:f6a0c6b3cc7d 224 #endif
k4zuki 11:f6a0c6b3cc7d 225
k4zuki 6:cb6984367a7a 226 usb_local->puts("\n\r");
k4zuki 6:cb6984367a7a 227 usb_local->puts("Try BLE.load(): ");
k4zuki 6:cb6984367a7a 228 running.write(0);
k4zuki 6:cb6984367a7a 229 result = BLE.load();
k4zuki 6:cb6984367a7a 230 running.write(1);
k4zuki 6:cb6984367a7a 231 usb_local->putc(result);
k4zuki 11:f6a0c6b3cc7d 232 usb_local->putc(0x07); //bell
k4zuki 6:cb6984367a7a 233 usb_local->puts("\n\r");
k4zuki 6:cb6984367a7a 234 isISP = false;
k4zuki 11:f6a0c6b3cc7d 235 /*
k4zuki 10:4553fd77a832 236 while(BLE._ble.readable()) {
k4zuki 6:cb6984367a7a 237 usb_local->putc(BLE._ble.getc());
k4zuki 0:eba731be11fb 238 }
k4zuki 11:f6a0c6b3cc7d 239 */
k4zuki 10:4553fd77a832 240 } else {
k4zuki 11:f6a0c6b3cc7d 241 ;
k4zuki 11:f6a0c6b3cc7d 242 // usb_local->putc('.');
k4zuki 0:eba731be11fb 243 }
k4zuki 0:eba731be11fb 244
k4zuki 10:4553fd77a832 245 usb_local->lock(false);
k4zuki 6:cb6984367a7a 246
k4zuki 11:f6a0c6b3cc7d 247 // int i=10;
k4zuki 11:f6a0c6b3cc7d 248 // while(i>0) {
k4zuki 11:f6a0c6b3cc7d 249 // i--;
k4zuki 11:f6a0c6b3cc7d 250 _hidresult = _hid->readNB(&recv_report);
k4zuki 11:f6a0c6b3cc7d 251 if( _hidresult ) {
k4zuki 11:f6a0c6b3cc7d 252 dap->Command(recv_report.data, send_report.data);
k4zuki 11:f6a0c6b3cc7d 253 send_report.length = 64;
k4zuki 11:f6a0c6b3cc7d 254 _hid->send(&send_report);
k4zuki 11:f6a0c6b3cc7d 255 }
k4zuki 11:f6a0c6b3cc7d 256 if(BLE._ble.readable()) {
k4zuki 11:f6a0c6b3cc7d 257 usb_local->putc(BLE._ble.getc());
k4zuki 11:f6a0c6b3cc7d 258 }
k4zuki 11:f6a0c6b3cc7d 259 wait_us(1000);
k4zuki 11:f6a0c6b3cc7d 260 // }
k4zuki 6:cb6984367a7a 261 connected = 0;
k4zuki 0:eba731be11fb 262 }
k4zuki 1:484bd6db1378 263 }
k4zuki 1:484bd6db1378 264
k4zuki 1:484bd6db1378 265 int file_size( FILE *fp )
k4zuki 1:484bd6db1378 266 {
k4zuki 1:484bd6db1378 267 int size;
k4zuki 1:484bd6db1378 268
k4zuki 1:484bd6db1378 269 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 1:484bd6db1378 270 size = ftell( fp ); // get current file pointer
k4zuki 1:484bd6db1378 271 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 1:484bd6db1378 272
k4zuki 1:484bd6db1378 273 return size;
k4zuki 1:484bd6db1378 274 }
k4zuki 1:484bd6db1378 275
k4zuki 11:f6a0c6b3cc7d 276 void TGT_RST_IN_int()
k4zuki 3:6af8771e7f71 277 {
k4zuki 6:cb6984367a7a 278 isISP = true;
k4zuki 1:484bd6db1378 279 }