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
- Committer:
- k4zuki
- Date:
- 2016-07-07
- Revision:
- 11:f6a0c6b3cc7d
- Parent:
- 10:4553fd77a832
- Child:
- 12:417eb27c4146
File content as of revision 11:f6a0c6b3cc7d:
#include "mbed.h" #include "USBLocalFileSystem.h" #include "BaseDAP.h" #include "USB_HID.h" #include "DA14580.h" #include "W25X40BV.h" #include "loader.h" #include "mystorage.h" /** r0.4_aef7891 - UART - TX = P0_19 RX = P0_18 - SWD - SWDIO = P0_14 SWCLK = P0_13 NSRST = P0_2 TGT_RST = P1_19 - SPI Flash - MOSI = P0_16 MISO = P0_23 SCK = P0_15 CS = P1_15 - 580 - MOSI = P0_9 MISO = P0_7 SCK = P0_8 CS = P0_21 - LED - RED = P0_5 GREEN = P0_4 BLUE = P0_20 */ #undef LOADER_FILE #define LOADER_FILE "/local/loader.bin" #undef TARGET_FILE #define TARGET_FILE "/local/target.bin" /* - SWD - SWDIO = P0_14 SWCLK = P0_13 NSRST = P0_2 TGT_RST = P1_19 */ SWD swd(P0_14, P0_13, P0_2); // SWDIO,SWCLK,nRESET InterruptIn TGT_RST_IN(P1_19); volatile bool isISP = false; void TGT_RST_IN_int(); /* - LED - RED = P0_5 GREEN = P0_4 BLUE = P0_20 */ DigitalOut connected(P0_5); DigitalOut running(P0_4); /* - 580 - MOSI = P0_9 MISO = P0_7 SCK = P0_8 CS = P0_21 */ W25X40BV memory(P0_9, P0_7, P0_8, P0_21); // mosi, miso, sclk, cs /* - UART - TX = P0_19 RX = P0_18 */ DA14580 BLE(P0_19, P0_18, P0_2); // TX, RX, RESET int file_size( FILE *fp ); class myDAP : public BaseDAP { public: myDAP(SWD* swd):BaseDAP(swd) {}; virtual void infoLED(int select, int value) { switch(select) { case 0: connected = value^1; running = 1; break; case 1: running = value^1; connected = 1; break; } } }; /* - SPI Flash - MOSI = P0_16 MISO = P0_23 SCK = P0_15 CS = P1_15 */ MyStorage LocalFS(P0_16, P0_23, P0_15, P1_15); // mosi, miso, sclk, cs //MyStorage LocalFS(P0_15, P0_13, P0_14, P0_16); int main() { USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name USB_HID* _hid = usb_local->getUsb()->getHID(); HID_REPORT recv_report; HID_REPORT send_report; myDAP* dap = new myDAP(&swd); // 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 // USBLocalFileSystem* usb_local = new USBLocalFileSystem(&LocalFS, "local"); //PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name running.write(1); TGT_RST_IN.mode(PullUp); memory.frequency(SPI_FREQ); char hex[]="0123456789ABCDEF"; //DEBUG int appleCount = 10; char buf[ 1024 ]; int read = 0; int result = 0; TGT_RST_IN.mode(PullUp); TGT_RST_IN.fall(&TGT_RST_IN_int); bool _hidresult; usb_local->lock(false); while(1) { usb_local->lock(true); usb_local->remount(); connected.write(1); if(isISP) { sprintf( buf, "I have %d apples.\r\n", appleCount ); char *ptr = buf; while( *ptr != (char)0 ) { usb_local->putc(*ptr++); } sprintf( &buf[0], "\r\nWriting "TARGET_FILE" into SPI flash" ); ptr = &buf[0]; while( *ptr != (char)0 ) { usb_local->putc(*ptr++); } // usb_local->puts("\n\r"); // usb_local->puts("Writing "TARGET_FILE" into SPI flash"); // BLE.copy_to_flash(&memory); int _filesize; uint8_t Headerbuffer[8] = {0x70,0x50,0x00,0x00,0x00,0x00,0x00,0x00}; char _data[256]; FILE* _fp = fopen(TARGET_FILE, "r" ); if (_fp) { BLE.init(); //erase 64KByte memory.block32Erase(0); memory.block32Erase(1); _filesize = file_size(_fp); usb_local->puts("\n\r"); usb_local->puts("filesize: "); read= 0x0f& (_filesize>>12); usb_local->putc(hex[read]); read= 0x0f& (_filesize>>8); usb_local->putc(hex[read]); read= 0x0f& (_filesize>>4); usb_local->putc(hex[read]); read= 0x0f& (_filesize); usb_local->putc(hex[read]); usb_local->puts("\n\r"); Headerbuffer[6]= (uint8_t)( (_filesize >> 8) & 0xff); Headerbuffer[7]= (uint8_t)(_filesize & 0xff); for(int i=0; i<8; i++) { read= 0x0f& (Headerbuffer[i]>>4); usb_local->putc(hex[read]); read= 0x0f& (Headerbuffer[i]); usb_local->putc(hex[read]); usb_local->puts("\n\r"); } memory.writeStream(0, Headerbuffer, 8); wait_ms(1); memory.readStream(0, (uint8_t*)_data, 8); for(int i=0; i<8; i++) { read= 0x0f& (_data[i]>>4); usb_local->putc(hex[read]); read= 0x0f& (_data[i]); usb_local->putc(hex[read]); usb_local->puts("\n\r"); } if(_filesize >= 248) { fgets(_data, 248,_fp); memory.writeStream(8, (uint8_t*)_data, (248)); _filesize -= (256-8); } else { fgets(_data, _filesize ,_fp); memory.writeStream(8, (uint8_t*)_data, (_filesize)); _filesize = 0; } int i=1; while(_filesize >= 256) { fgets(_data, (256), _fp); memory.writeStream(256*i, (uint8_t*)_data, (256)); usb_local->putc(hex[i%10]); i++; _filesize -= (256); } if(_filesize > 0) { fgets(_data, _filesize, _fp); memory.writeStream(256*i, (uint8_t*)_data, (_filesize)); } } fclose(_fp); #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler #warning "free(_fp)" free(_fp); #endif usb_local->puts("\n\r"); usb_local->puts("Try BLE.load(): "); running.write(0); result = BLE.load(); running.write(1); usb_local->putc(result); usb_local->putc(0x07); //bell usb_local->puts("\n\r"); isISP = false; /* while(BLE._ble.readable()) { usb_local->putc(BLE._ble.getc()); } */ } else { ; // usb_local->putc('.'); } usb_local->lock(false); // int i=10; // while(i>0) { // i--; _hidresult = _hid->readNB(&recv_report); if( _hidresult ) { dap->Command(recv_report.data, send_report.data); send_report.length = 64; _hid->send(&send_report); } if(BLE._ble.readable()) { usb_local->putc(BLE._ble.getc()); } wait_us(1000); // } connected = 0; } } int file_size( FILE *fp ) { int size; fseek( fp, 0, SEEK_END ); // seek to end of file size = ftell( fp ); // get current file pointer fseek( fp, 0, SEEK_SET ); // seek back to beginning of file return size; } void TGT_RST_IN_int() { isISP = true; }