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
main.cpp@10:4553fd77a832, 2016-03-09 (annotated)
- 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?
User | Revision | Line number | New 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 | } |