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 Aug 19 10:45:02 2017 +0000
Revision:
13:9a2f6902f4f1
Parent:
12:417eb27c4146
works every other time when pressing TARGET button

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 12:417eb27c4146 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 - UART -
k4zuki 11:f6a0c6b3cc7d 64 TX = P0_19
k4zuki 11:f6a0c6b3cc7d 65 RX = P0_18
k4zuki 11:f6a0c6b3cc7d 66 */
k4zuki 11:f6a0c6b3cc7d 67 DA14580 BLE(P0_19, P0_18, P0_2); // TX, RX, RESET
k4zuki 1:484bd6db1378 68
k4zuki 1:484bd6db1378 69 int file_size( FILE *fp );
k4zuki 1:484bd6db1378 70
k4zuki 0:eba731be11fb 71 class myDAP : public BaseDAP
k4zuki 0:eba731be11fb 72 {
k4zuki 0:eba731be11fb 73 public:
k4zuki 0:eba731be11fb 74 myDAP(SWD* swd):BaseDAP(swd) {};
k4zuki 0:eba731be11fb 75 virtual void infoLED(int select, int value) {
k4zuki 0:eba731be11fb 76 switch(select) {
k4zuki 0:eba731be11fb 77 case 0:
k4zuki 0:eba731be11fb 78 connected = value^1;
k4zuki 0:eba731be11fb 79 running = 1;
k4zuki 0:eba731be11fb 80 break;
k4zuki 0:eba731be11fb 81 case 1:
k4zuki 0:eba731be11fb 82 running = value^1;
k4zuki 0:eba731be11fb 83 connected = 1;
k4zuki 0:eba731be11fb 84 break;
k4zuki 0:eba731be11fb 85 }
k4zuki 0:eba731be11fb 86 }
k4zuki 0:eba731be11fb 87 };
k4zuki 0:eba731be11fb 88
k4zuki 11:f6a0c6b3cc7d 89 /*
k4zuki 11:f6a0c6b3cc7d 90 - SPI Flash -
k4zuki 11:f6a0c6b3cc7d 91 MOSI = P0_16
k4zuki 11:f6a0c6b3cc7d 92 MISO = P0_23
k4zuki 11:f6a0c6b3cc7d 93 SCK = P0_15
k4zuki 11:f6a0c6b3cc7d 94 CS = P1_15
k4zuki 11:f6a0c6b3cc7d 95 */
k4zuki 11:f6a0c6b3cc7d 96 MyStorage LocalFS(P0_16, P0_23, P0_15, P1_15); // mosi, miso, sclk, cs
k4zuki 0:eba731be11fb 97 int main()
k4zuki 0:eba731be11fb 98 {
k4zuki 12:417eb27c4146 99 USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local");
k4zuki 12:417eb27c4146 100 //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name
k4zuki 11:f6a0c6b3cc7d 101
k4zuki 10:4553fd77a832 102 USB_HID* _hid = usb_local->getUsb()->getHID();
k4zuki 10:4553fd77a832 103 HID_REPORT recv_report;
k4zuki 10:4553fd77a832 104 HID_REPORT send_report;
k4zuki 10:4553fd77a832 105 myDAP* dap = new myDAP(&swd);
k4zuki 10:4553fd77a832 106
k4zuki 6:cb6984367a7a 107 running.write(1);
k4zuki 11:f6a0c6b3cc7d 108 TGT_RST_IN.mode(PullUp);
k4zuki 12:417eb27c4146 109 char* STAT_MSG[6]={
k4zuki 12:417eb27c4146 110 "SUCCESS",
k4zuki 12:417eb27c4146 111 "NOT CONNECTED",
k4zuki 12:417eb27c4146 112 "FILE NOT FOUND",
k4zuki 12:417eb27c4146 113 "STX TIMEOUT",
k4zuki 12:417eb27c4146 114 "NO ACKNOWLEDGE",
k4zuki 12:417eb27c4146 115 "CRC MISMATCHED"
k4zuki 12:417eb27c4146 116 };
k4zuki 6:cb6984367a7a 117
k4zuki 13:9a2f6902f4f1 118
k4zuki 11:f6a0c6b3cc7d 119 TGT_RST_IN.mode(PullUp);
k4zuki 11:f6a0c6b3cc7d 120 TGT_RST_IN.fall(&TGT_RST_IN_int);
k4zuki 13:9a2f6902f4f1 121 int result = 0;
k4zuki 6:cb6984367a7a 122
k4zuki 6:cb6984367a7a 123 bool _hidresult;
k4zuki 10:4553fd77a832 124 usb_local->lock(false);
k4zuki 0:eba731be11fb 125 while(1) {
k4zuki 0:eba731be11fb 126 usb_local->lock(true);
k4zuki 0:eba731be11fb 127 usb_local->remount();
k4zuki 6:cb6984367a7a 128 connected.write(1);
k4zuki 3:6af8771e7f71 129
k4zuki 6:cb6984367a7a 130 if(isISP) {
k4zuki 6:cb6984367a7a 131 running.write(0);
k4zuki 12:417eb27c4146 132 result = BLE.load(TARGET_FILE);
k4zuki 6:cb6984367a7a 133 running.write(1);
k4zuki 12:417eb27c4146 134 usb_local->puts(STAT_MSG[result]);
k4zuki 11:f6a0c6b3cc7d 135 usb_local->putc(0x07); //bell
k4zuki 6:cb6984367a7a 136 usb_local->puts("\n\r");
k4zuki 6:cb6984367a7a 137 isISP = false;
k4zuki 0:eba731be11fb 138 }
k4zuki 10:4553fd77a832 139 usb_local->lock(false);
k4zuki 12:417eb27c4146 140 _hidresult = _hid->readNB(&recv_report);
k4zuki 12:417eb27c4146 141 if( _hidresult ) {
k4zuki 6:cb6984367a7a 142
k4zuki 12:417eb27c4146 143 dap->Command(recv_report.data, send_report.data);
k4zuki 12:417eb27c4146 144 send_report.length = 64;
k4zuki 12:417eb27c4146 145 _hid->send(&send_report);
k4zuki 12:417eb27c4146 146 }
k4zuki 12:417eb27c4146 147 if(BLE._ble.readable()) {
k4zuki 12:417eb27c4146 148 usb_local->putc(BLE._ble.getc());
k4zuki 12:417eb27c4146 149 }
k4zuki 12:417eb27c4146 150 wait_us(1000);
k4zuki 6:cb6984367a7a 151 connected = 0;
k4zuki 0:eba731be11fb 152 }
k4zuki 1:484bd6db1378 153 }
k4zuki 1:484bd6db1378 154
k4zuki 1:484bd6db1378 155 int file_size( FILE *fp )
k4zuki 1:484bd6db1378 156 {
k4zuki 1:484bd6db1378 157 int size;
k4zuki 1:484bd6db1378 158
k4zuki 1:484bd6db1378 159 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 1:484bd6db1378 160 size = ftell( fp ); // get current file pointer
k4zuki 1:484bd6db1378 161 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 1:484bd6db1378 162
k4zuki 1:484bd6db1378 163 return size;
k4zuki 1:484bd6db1378 164 }
k4zuki 1:484bd6db1378 165
k4zuki 11:f6a0c6b3cc7d 166 void TGT_RST_IN_int()
k4zuki 3:6af8771e7f71 167 {
k4zuki 6:cb6984367a7a 168 isISP = true;
k4zuki 1:484bd6db1378 169 }