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:
Wed Mar 09 15:03:30 2016 +0000
Revision:
10:4553fd77a832
Parent:
9:e279dee6e41c
Child:
11:f6a0c6b3cc7d
update da14580 lib; remove unused variables; usb_local/ _hid/ recv_report/ send_report/ dap moved to top of main(); CMSIS-DAP visible from Keil IDE

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 10:4553fd77a832 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 10:4553fd77a832 74 W25X40BV memory(P0_15, P0_13, P0_14, P0_16); // mosi, miso, sclk, cs
k4zuki 10:4553fd77a832 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 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 0:eba731be11fb 107
k4zuki 7:5b78247c45c2 108 MyStorage flash(P0_8, P0_10, P0_9, P0_7);
k4zuki 10:4553fd77a832 109 //MyStorage flash(P0_15, P0_13, P0_14, P0_16);
k4zuki 0:eba731be11fb 110 int main()
k4zuki 0:eba731be11fb 111 {
k4zuki 10:4553fd77a832 112 USBLocalFileSystem* usb_local = new USBLocalFileSystem(&flash, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
k4zuki 10:4553fd77a832 113 USB_HID* _hid = usb_local->getUsb()->getHID();
k4zuki 10:4553fd77a832 114 HID_REPORT recv_report;
k4zuki 10:4553fd77a832 115 HID_REPORT send_report;
k4zuki 10:4553fd77a832 116 myDAP* dap = new myDAP(&swd);
k4zuki 10:4553fd77a832 117
k4zuki 6:cb6984367a7a 118 // 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 119 // USBLocalFileSystem* usb_local = new USBLocalFileSystem(&flash, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
k4zuki 6:cb6984367a7a 120 running.write(1);
k4zuki 6:cb6984367a7a 121 BL.mode(PullUp);
k4zuki 6:cb6984367a7a 122 char hex[]="0123456789ABCDEF"; //DEBUG
k4zuki 6:cb6984367a7a 123
k4zuki 6:cb6984367a7a 124 int read = 0;
k4zuki 6:cb6984367a7a 125 int loadersize = sizeof(loader)/sizeof(loader[0]);
k4zuki 10:4553fd77a832 126 int result = 0;
k4zuki 6:cb6984367a7a 127 BL.mode(PullUp);
k4zuki 6:cb6984367a7a 128 BL.fall(&BL_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 10:4553fd77a832 138 /*
k4zuki 10:4553fd77a832 139 usb_local->puts("loadersize: ");
k4zuki 10:4553fd77a832 140 read= 0x0f& (loadersize>>12);
k4zuki 10:4553fd77a832 141 usb_local->putc(hex[read]);
k4zuki 10:4553fd77a832 142 read= 0x0f& (loadersize>>8);
k4zuki 10:4553fd77a832 143 usb_local->putc(hex[read]);
k4zuki 10:4553fd77a832 144 read= 0x0f& (loadersize>>4);
k4zuki 10:4553fd77a832 145 usb_local->putc(hex[read]);
k4zuki 10:4553fd77a832 146 read= 0x0f& (loadersize);
k4zuki 10:4553fd77a832 147 usb_local->putc(hex[read]);
k4zuki 10:4553fd77a832 148 usb_local->puts("\n\r");
k4zuki 10:4553fd77a832 149 */
k4zuki 6:cb6984367a7a 150 usb_local->puts("\n\r");
k4zuki 6:cb6984367a7a 151 usb_local->puts("Writing "TARGET_FILE" into SPI flash");
k4zuki 6:cb6984367a7a 152 usb_local->puts("\n\r");
k4zuki 6:cb6984367a7a 153 usb_local->puts("Try BLE.load(): ");
k4zuki 6:cb6984367a7a 154 running.write(0);
k4zuki 6:cb6984367a7a 155 result = BLE.load();
k4zuki 6:cb6984367a7a 156 running.write(1);
k4zuki 6:cb6984367a7a 157 usb_local->putc(result);
k4zuki 10:4553fd77a832 158 usb_local->putc(0x07);
k4zuki 6:cb6984367a7a 159 usb_local->puts("\n\r");
k4zuki 6:cb6984367a7a 160 isISP = false;
k4zuki 10:4553fd77a832 161 while(BLE._ble.readable()) {
k4zuki 6:cb6984367a7a 162 usb_local->putc(BLE._ble.getc());
k4zuki 0:eba731be11fb 163 }
k4zuki 10:4553fd77a832 164 } else {
k4zuki 10:4553fd77a832 165 usb_local->putc('.');
k4zuki 0:eba731be11fb 166 }
k4zuki 0:eba731be11fb 167
k4zuki 10:4553fd77a832 168 usb_local->lock(false);
k4zuki 6:cb6984367a7a 169
k4zuki 6:cb6984367a7a 170 _hidresult = _hid->readNB(&recv_report);
k4zuki 6:cb6984367a7a 171 if( _hidresult ) {
k4zuki 0:eba731be11fb 172 dap->Command(recv_report.data, send_report.data);
k4zuki 0:eba731be11fb 173 send_report.length = 64;
k4zuki 6:cb6984367a7a 174 _hid->send(&send_report);
k4zuki 0:eba731be11fb 175 }
k4zuki 6:cb6984367a7a 176 connected = 0;
k4zuki 10:4553fd77a832 177 wait_ms(1);
k4zuki 0:eba731be11fb 178 }
k4zuki 1:484bd6db1378 179 }
k4zuki 1:484bd6db1378 180
k4zuki 1:484bd6db1378 181 int file_size( FILE *fp )
k4zuki 1:484bd6db1378 182 {
k4zuki 1:484bd6db1378 183 int size;
k4zuki 1:484bd6db1378 184
k4zuki 1:484bd6db1378 185 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 1:484bd6db1378 186 size = ftell( fp ); // get current file pointer
k4zuki 1:484bd6db1378 187 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 1:484bd6db1378 188
k4zuki 1:484bd6db1378 189 return size;
k4zuki 1:484bd6db1378 190 }
k4zuki 1:484bd6db1378 191
k4zuki 6:cb6984367a7a 192 void BL_int()
k4zuki 3:6af8771e7f71 193 {
k4zuki 6:cb6984367a7a 194 isISP = true;
k4zuki 1:484bd6db1378 195 }