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:
Tue Aug 18 17:41:45 2015 +0000
Revision:
1:484bd6db1378
Parent:
0:eba731be11fb
Child:
2:228291df190e
Mixed up BLE writer and Flash read/writer (both still unused)

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