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@5:77c115650c1f, 2015-09-19 (annotated)
- Committer:
- k4zuki
- Date:
- Sat Sep 19 10:48:38 2015 +0000
- Revision:
- 5:77c115650c1f
- Parent:
- 3:6af8771e7f71
- Child:
- 6:cb6984367a7a
update DA14580/at45db161d; add target switches for LPC1768 and 11U35/501
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 | 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 | 5:77c115650c1f | 25 | #if defined(TARGET_LPC1768) |
k4zuki | 5:77c115650c1f | 26 | //SWD swd(p25,p24,p23); // SWDIO,SWCLK,nRESET |
k4zuki | 5:77c115650c1f | 27 | SWD swd(p24, p23, p22); // SWDIO,SWCLK,nRESET |
k4zuki | 5:77c115650c1f | 28 | DigitalOut connected(LED1); |
k4zuki | 5:77c115650c1f | 29 | DigitalOut running(LED4); |
k4zuki | 5:77c115650c1f | 30 | |
k4zuki | 5:77c115650c1f | 31 | SWSPI spi(p5, p7, p6); // mosi, miso, sclk |
k4zuki | 5:77c115650c1f | 32 | |
k4zuki | 5:77c115650c1f | 33 | ATD45DB161D memory(spi, p8); |
k4zuki | 5:77c115650c1f | 34 | RawSerial ble(p5, p6); |
k4zuki | 5:77c115650c1f | 35 | DA14580 BLE(ble, p26); |
k4zuki | 5:77c115650c1f | 36 | |
k4zuki | 5:77c115650c1f | 37 | #elif defined(TARGET_LPC11U35_501) |
k4zuki | 2:228291df190e | 38 | //SWD swd(p25,p24,p23); // SWDIO,SWCLK,nRESET |
k4zuki | 2:228291df190e | 39 | SWD swd(P0_5,P0_4,P0_21); // SWDIO,SWCLK,nRESET |
k4zuki | 1:484bd6db1378 | 40 | DigitalOut connected(P0_20); |
k4zuki | 2:228291df190e | 41 | DigitalOut running(P0_2); |
k4zuki | 1:484bd6db1378 | 42 | |
k4zuki | 5:77c115650c1f | 43 | SWSPI spi(P0_9,P0_8,P0_10); // mosi, miso, sclk |
k4zuki | 2:228291df190e | 44 | ATD45DB161D memory(spi, P0_7); |
k4zuki | 3:6af8771e7f71 | 45 | RawSerial ble(P0_19,P0_18); |
k4zuki | 3:6af8771e7f71 | 46 | DA14580 BLE(ble, P0_1); |
k4zuki | 5:77c115650c1f | 47 | #endif |
k4zuki | 1:484bd6db1378 | 48 | |
k4zuki | 1:484bd6db1378 | 49 | int file_size( FILE *fp ); |
k4zuki | 1:484bd6db1378 | 50 | void flash_write (int addr, char *buf, int len); |
k4zuki | 1:484bd6db1378 | 51 | void flash_read (int addr, char *buf, int len); |
k4zuki | 1:484bd6db1378 | 52 | |
k4zuki | 0:eba731be11fb | 53 | class myDAP : public BaseDAP |
k4zuki | 0:eba731be11fb | 54 | { |
k4zuki | 0:eba731be11fb | 55 | public: |
k4zuki | 0:eba731be11fb | 56 | myDAP(SWD* swd):BaseDAP(swd) {}; |
k4zuki | 0:eba731be11fb | 57 | virtual void infoLED(int select, int value) { |
k4zuki | 0:eba731be11fb | 58 | switch(select) { |
k4zuki | 0:eba731be11fb | 59 | case 0: |
k4zuki | 0:eba731be11fb | 60 | connected = value^1; |
k4zuki | 0:eba731be11fb | 61 | running = 1; |
k4zuki | 0:eba731be11fb | 62 | break; |
k4zuki | 0:eba731be11fb | 63 | case 1: |
k4zuki | 0:eba731be11fb | 64 | running = value^1; |
k4zuki | 0:eba731be11fb | 65 | connected = 1; |
k4zuki | 0:eba731be11fb | 66 | break; |
k4zuki | 0:eba731be11fb | 67 | } |
k4zuki | 0:eba731be11fb | 68 | } |
k4zuki | 0:eba731be11fb | 69 | }; |
k4zuki | 0:eba731be11fb | 70 | |
k4zuki | 1:484bd6db1378 | 71 | |
k4zuki | 0:eba731be11fb | 72 | int main() |
k4zuki | 0:eba731be11fb | 73 | { |
k4zuki | 5:77c115650c1f | 74 | // USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_9, P0_8, P0_10, P0_7,"local"); // RamDisk(64KB) |
k4zuki | 5:77c115650c1f | 75 | USBLocalFileSystem* usb_local = new USBLocalFileSystem(p17, p15, p16, p18,"local"); // SD |
k4zuki | 1:484bd6db1378 | 76 | // USBLocalFileSystem* usb_local = new USBLocalFileSystem(P0_14, P0_15, P0_16, P0_32,"local"); // SD |
k4zuki | 1:484bd6db1378 | 77 | usb_local->lock(true); |
k4zuki | 0:eba731be11fb | 78 | myDAP* dap = new myDAP(&swd); |
k4zuki | 0:eba731be11fb | 79 | |
k4zuki | 1:484bd6db1378 | 80 | // uint8_t recieve; |
k4zuki | 1:484bd6db1378 | 81 | // uint8_t read; |
k4zuki | 1:484bd6db1378 | 82 | // int filesize=0; |
k4zuki | 1:484bd6db1378 | 83 | FILE* fp; |
k4zuki | 1:484bd6db1378 | 84 | // ble.baud(57600); |
k4zuki | 1:484bd6db1378 | 85 | // int crc=0x00; |
k4zuki | 1:484bd6db1378 | 86 | |
k4zuki | 0:eba731be11fb | 87 | |
k4zuki | 3:6af8771e7f71 | 88 | int result=0; |
k4zuki | 0:eba731be11fb | 89 | while(1) { |
k4zuki | 0:eba731be11fb | 90 | usb_local->lock(true); |
k4zuki | 0:eba731be11fb | 91 | usb_local->remount(); |
k4zuki | 0:eba731be11fb | 92 | char filename[32]; |
k4zuki | 3:6af8771e7f71 | 93 | |
k4zuki | 5:77c115650c1f | 94 | usb_local->puts("Try BLE.load(): "); |
k4zuki | 3:6af8771e7f71 | 95 | result = BLE.load(); |
k4zuki | 3:6af8771e7f71 | 96 | usb_local->putc(result); |
k4zuki | 5:77c115650c1f | 97 | usb_local->puts("\n\r"); |
k4zuki | 5:77c115650c1f | 98 | |
k4zuki | 0:eba731be11fb | 99 | if (usb_local->find(filename, sizeof(filename), "*.TXT")) { |
k4zuki | 1:484bd6db1378 | 100 | fp = fopen(filename, "r"); |
k4zuki | 0:eba731be11fb | 101 | if (fp) { |
k4zuki | 0:eba731be11fb | 102 | int c; |
k4zuki | 0:eba731be11fb | 103 | while((c = fgetc(fp)) != EOF) { |
k4zuki | 0:eba731be11fb | 104 | usb_local->putc(c); |
k4zuki | 0:eba731be11fb | 105 | } |
k4zuki | 0:eba731be11fb | 106 | fclose(fp); |
k4zuki | 0:eba731be11fb | 107 | #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler |
k4zuki | 3:6af8771e7f71 | 108 | #warning "free(fp)" |
k4zuki | 0:eba731be11fb | 109 | free(fp); |
k4zuki | 0:eba731be11fb | 110 | #endif |
k4zuki | 0:eba731be11fb | 111 | } |
k4zuki | 0:eba731be11fb | 112 | } |
k4zuki | 0:eba731be11fb | 113 | |
k4zuki | 1:484bd6db1378 | 114 | USBStorage2* _usb = usb_local->getUsb(); |
k4zuki | 1:484bd6db1378 | 115 | USB_HID* _hid = _usb->getHID(); |
k4zuki | 0:eba731be11fb | 116 | HID_REPORT recv_report; |
k4zuki | 2:228291df190e | 117 | if( _usb->readNB(&recv_report) ) { |
k4zuki | 0:eba731be11fb | 118 | HID_REPORT send_report; |
k4zuki | 0:eba731be11fb | 119 | dap->Command(recv_report.data, send_report.data); |
k4zuki | 0:eba731be11fb | 120 | send_report.length = 64; |
k4zuki | 2:228291df190e | 121 | _usb->send(&send_report); |
k4zuki | 0:eba731be11fb | 122 | } |
k4zuki | 3:6af8771e7f71 | 123 | usb_local->lock(false); |
k4zuki | 3:6af8771e7f71 | 124 | wait_ms(1000*5); |
k4zuki | 0:eba731be11fb | 125 | } |
k4zuki | 1:484bd6db1378 | 126 | } |
k4zuki | 1:484bd6db1378 | 127 | |
k4zuki | 1:484bd6db1378 | 128 | int file_size( FILE *fp ) |
k4zuki | 1:484bd6db1378 | 129 | { |
k4zuki | 1:484bd6db1378 | 130 | int size; |
k4zuki | 1:484bd6db1378 | 131 | |
k4zuki | 1:484bd6db1378 | 132 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 1:484bd6db1378 | 133 | size = ftell( fp ); // get current file pointer |
k4zuki | 1:484bd6db1378 | 134 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 1:484bd6db1378 | 135 | |
k4zuki | 1:484bd6db1378 | 136 | return size; |
k4zuki | 1:484bd6db1378 | 137 | } |
k4zuki | 1:484bd6db1378 | 138 | |
k4zuki | 1:484bd6db1378 | 139 | |
k4zuki | 3:6af8771e7f71 | 140 | void flash_write (int addr, char *buf, int len) |
k4zuki | 3:6af8771e7f71 | 141 | { |
k4zuki | 1:484bd6db1378 | 142 | int i; |
k4zuki | 1:484bd6db1378 | 143 | memory.BufferWrite(WRITE_BUFFER, addr % PAGE_SIZE); |
k4zuki | 1:484bd6db1378 | 144 | for (i = 0; i < len; i ++) { |
k4zuki | 1:484bd6db1378 | 145 | spi.write(buf[i]); |
k4zuki | 1:484bd6db1378 | 146 | } |
k4zuki | 1:484bd6db1378 | 147 | memory.BufferToPage(WRITE_BUFFER, addr / PAGE_SIZE, 1); |
k4zuki | 1:484bd6db1378 | 148 | } |
k4zuki | 1:484bd6db1378 | 149 | |
k4zuki | 3:6af8771e7f71 | 150 | void flash_read (int addr, char *buf, int len) |
k4zuki | 3:6af8771e7f71 | 151 | { |
k4zuki | 1:484bd6db1378 | 152 | int i; |
k4zuki | 1:484bd6db1378 | 153 | memory.PageToBuffer(addr / PAGE_SIZE, READ_BUFFER); |
k4zuki | 1:484bd6db1378 | 154 | memory.BufferRead(READ_BUFFER, addr % PAGE_SIZE, 1); |
k4zuki | 1:484bd6db1378 | 155 | for (i = 0; i < len; i ++) { |
k4zuki | 1:484bd6db1378 | 156 | buf[i] = spi.write(0xff); |
k4zuki | 1:484bd6db1378 | 157 | } |
k4zuki | 1:484bd6db1378 | 158 | } |
k4zuki | 1:484bd6db1378 | 159 |