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 Aug 19 15:50:36 2015 +0000
Revision:
3:6af8771e7f71
Parent:
2:228291df190e
Child:
5:77c115650c1f
update formatting

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 0:eba731be11fb 7
k4zuki 1:484bd6db1378 8 #include "at45db161d.h"
k4zuki 1:484bd6db1378 9
k4zuki 1:484bd6db1378 10 #undef PAGE_SIZE
k4zuki 1:484bd6db1378 11 //#define PAGE_SIZE 264 // AT45DB081D (1MB)
k4zuki 1:484bd6db1378 12 #define PAGE_SIZE 256 // AT25XE011 (1Mbit)
k4zuki 1:484bd6db1378 13 //#define PAGE_SIZE 528 // AT45DB321D (4MB)
k4zuki 1:484bd6db1378 14
k4zuki 1:484bd6db1378 15 //#define PAGE_NUM 4095 // AT45DB081D (1MB)
k4zuki 1:484bd6db1378 16 #define PAGE_NUM 512 // AT25XE011 (1Mbit)
k4zuki 1:484bd6db1378 17 //#define PAGE_NUM 8192 // AT45DB321D (4MB)
k4zuki 1:484bd6db1378 18
k4zuki 1:484bd6db1378 19 #define WRITE_BUFFER 1
k4zuki 1:484bd6db1378 20 #define READ_BUFFER 2
k4zuki 1:484bd6db1378 21
k4zuki 3:6af8771e7f71 22 #define LOADER_FILE "/local/loader.bin"
k4zuki 3:6af8771e7f71 23 #define TARGET_FILE "/local/target.bin"
k4zuki 3:6af8771e7f71 24
k4zuki 2:228291df190e 25 //SWD swd(p25,p24,p23); // SWDIO,SWCLK,nRESET
k4zuki 2:228291df190e 26 SWD swd(P0_5,P0_4,P0_21); // SWDIO,SWCLK,nRESET
k4zuki 1:484bd6db1378 27 DigitalOut connected(P0_20);
k4zuki 2:228291df190e 28 DigitalOut running(P0_2);
k4zuki 1:484bd6db1378 29
k4zuki 2:228291df190e 30 SPI spi(P0_9,P0_8,P0_10); // mosi, miso, sclk
k4zuki 2:228291df190e 31 ATD45DB161D memory(spi, P0_7);
k4zuki 3:6af8771e7f71 32 RawSerial ble(P0_19,P0_18);
k4zuki 3:6af8771e7f71 33 DA14580 BLE(ble, P0_1);
k4zuki 1:484bd6db1378 34
k4zuki 1:484bd6db1378 35 int file_size( FILE *fp );
k4zuki 1:484bd6db1378 36 void flash_write (int addr, char *buf, int len);
k4zuki 1:484bd6db1378 37 void flash_read (int addr, char *buf, int len);
k4zuki 1:484bd6db1378 38
k4zuki 0:eba731be11fb 39 class myDAP : public BaseDAP
k4zuki 0:eba731be11fb 40 {
k4zuki 0:eba731be11fb 41 public:
k4zuki 0:eba731be11fb 42 myDAP(SWD* swd):BaseDAP(swd) {};
k4zuki 0:eba731be11fb 43 virtual void infoLED(int select, int value) {
k4zuki 0:eba731be11fb 44 switch(select) {
k4zuki 0:eba731be11fb 45 case 0:
k4zuki 0:eba731be11fb 46 connected = value^1;
k4zuki 0:eba731be11fb 47 running = 1;
k4zuki 0:eba731be11fb 48 break;
k4zuki 0:eba731be11fb 49 case 1:
k4zuki 0:eba731be11fb 50 running = value^1;
k4zuki 0:eba731be11fb 51 connected = 1;
k4zuki 0:eba731be11fb 52 break;
k4zuki 0:eba731be11fb 53 }
k4zuki 0:eba731be11fb 54 }
k4zuki 0:eba731be11fb 55 };
k4zuki 0:eba731be11fb 56
k4zuki 1:484bd6db1378 57
k4zuki 0:eba731be11fb 58 int main()
k4zuki 0:eba731be11fb 59 {
k4zuki 0:eba731be11fb 60 USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_9, P0_8, P0_10, P0_7,"local"); // RamDisk(64KB)
k4zuki 1:484bd6db1378 61 // USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_14, P0_15, P0_16, P0_32,"local"); // SD
k4zuki 1:484bd6db1378 62 usb_local->lock(true);
k4zuki 0:eba731be11fb 63 myDAP* dap = new myDAP(&swd);
k4zuki 0:eba731be11fb 64
k4zuki 1:484bd6db1378 65 // uint8_t recieve;
k4zuki 1:484bd6db1378 66 // uint8_t read;
k4zuki 1:484bd6db1378 67 // int filesize=0;
k4zuki 1:484bd6db1378 68 FILE* fp;
k4zuki 1:484bd6db1378 69 // ble.baud(57600);
k4zuki 1:484bd6db1378 70 // int crc=0x00;
k4zuki 1:484bd6db1378 71
k4zuki 0:eba731be11fb 72
k4zuki 3:6af8771e7f71 73 int result=0;
k4zuki 0:eba731be11fb 74 while(1) {
k4zuki 0:eba731be11fb 75 usb_local->lock(true);
k4zuki 0:eba731be11fb 76 usb_local->remount();
k4zuki 0:eba731be11fb 77 char filename[32];
k4zuki 3:6af8771e7f71 78
k4zuki 3:6af8771e7f71 79 result = BLE.load();
k4zuki 3:6af8771e7f71 80 usb_local->putc(result);
k4zuki 1:484bd6db1378 81 /*
k4zuki 1:484bd6db1378 82 fp = fopen( SOURCE_FILE, "rb" )
k4zuki 2:228291df190e 83 if (fp) {
k4zuki 1:484bd6db1378 84 filesize=file_size(fp);
k4zuki 1:484bd6db1378 85 pc.printf("0x%04X\n\r",filesize);
k4zuki 1:484bd6db1378 86 }
k4zuki 1:484bd6db1378 87 */
k4zuki 0:eba731be11fb 88 if (usb_local->find(filename, sizeof(filename), "*.TXT")) {
k4zuki 1:484bd6db1378 89 fp = fopen(filename, "r");
k4zuki 0:eba731be11fb 90 if (fp) {
k4zuki 0:eba731be11fb 91 int c;
k4zuki 0:eba731be11fb 92 while((c = fgetc(fp)) != EOF) {
k4zuki 0:eba731be11fb 93 usb_local->putc(c);
k4zuki 0:eba731be11fb 94 }
k4zuki 0:eba731be11fb 95 fclose(fp);
k4zuki 0:eba731be11fb 96 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
k4zuki 3:6af8771e7f71 97 #warning "free(fp)"
k4zuki 0:eba731be11fb 98 free(fp);
k4zuki 0:eba731be11fb 99 #endif
k4zuki 0:eba731be11fb 100 }
k4zuki 0:eba731be11fb 101 }
k4zuki 0:eba731be11fb 102
k4zuki 1:484bd6db1378 103
k4zuki 1:484bd6db1378 104 USBStorage2* _usb = usb_local->getUsb();
k4zuki 1:484bd6db1378 105 USB_HID* _hid = _usb->getHID();
k4zuki 0:eba731be11fb 106 HID_REPORT recv_report;
k4zuki 2:228291df190e 107 if( _usb->readNB(&recv_report) ) {
k4zuki 0:eba731be11fb 108 HID_REPORT send_report;
k4zuki 0:eba731be11fb 109 dap->Command(recv_report.data, send_report.data);
k4zuki 0:eba731be11fb 110 send_report.length = 64;
k4zuki 2:228291df190e 111 _usb->send(&send_report);
k4zuki 0:eba731be11fb 112 }
k4zuki 3:6af8771e7f71 113 usb_local->lock(false);
k4zuki 3:6af8771e7f71 114 wait_ms(1000*5);
k4zuki 0:eba731be11fb 115 }
k4zuki 1:484bd6db1378 116 }
k4zuki 1:484bd6db1378 117
k4zuki 1:484bd6db1378 118 int file_size( FILE *fp )
k4zuki 1:484bd6db1378 119 {
k4zuki 1:484bd6db1378 120 int size;
k4zuki 1:484bd6db1378 121
k4zuki 1:484bd6db1378 122 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 1:484bd6db1378 123 size = ftell( fp ); // get current file pointer
k4zuki 1:484bd6db1378 124 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 1:484bd6db1378 125
k4zuki 1:484bd6db1378 126 return size;
k4zuki 1:484bd6db1378 127 }
k4zuki 1:484bd6db1378 128
k4zuki 1:484bd6db1378 129
k4zuki 3:6af8771e7f71 130 void flash_write (int addr, char *buf, int len)
k4zuki 3:6af8771e7f71 131 {
k4zuki 1:484bd6db1378 132 int i;
k4zuki 1:484bd6db1378 133 memory.BufferWrite(WRITE_BUFFER, addr % PAGE_SIZE);
k4zuki 1:484bd6db1378 134 for (i = 0; i < len; i ++) {
k4zuki 1:484bd6db1378 135 spi.write(buf[i]);
k4zuki 1:484bd6db1378 136 }
k4zuki 1:484bd6db1378 137 memory.BufferToPage(WRITE_BUFFER, addr / PAGE_SIZE, 1);
k4zuki 1:484bd6db1378 138 }
k4zuki 1:484bd6db1378 139
k4zuki 3:6af8771e7f71 140 void flash_read (int addr, char *buf, int len)
k4zuki 3:6af8771e7f71 141 {
k4zuki 1:484bd6db1378 142 int i;
k4zuki 1:484bd6db1378 143 memory.PageToBuffer(addr / PAGE_SIZE, READ_BUFFER);
k4zuki 1:484bd6db1378 144 memory.BufferRead(READ_BUFFER, addr % PAGE_SIZE, 1);
k4zuki 1:484bd6db1378 145 for (i = 0; i < len; i ++) {
k4zuki 1:484bd6db1378 146 buf[i] = spi.write(0xff);
k4zuki 1:484bd6db1378 147 }
k4zuki 1:484bd6db1378 148 }
k4zuki 1:484bd6db1378 149