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