DA14580 Bluetooth Smart IC writer library
Dependents: 11u35_usbLocalFilesystem
DA14580.h@8:af5210dbfe64, 2016-07-07 (annotated)
- Committer:
- k4zuki
- Date:
- Thu Jul 07 01:26:52 2016 +0000
- Revision:
- 8:af5210dbfe64
- Parent:
- 6:db0ae78150a3
- Child:
- 9:e2e84de053fc
resets target at init; use external header file "loader.h" which declares loader[] to load secondary bootloader
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
k4zuki | 6:db0ae78150a3 | 1 | /** mbed library for Dialog Semiconductor DA14580 Bluetooth Smart chip |
k4zuki | 1:b2d4a4e2f362 | 2 | * by Kazuki Yamamoto, or _K4ZUKI_ |
k4zuki | 0:3bdbabca8a09 | 3 | **/ |
k4zuki | 1:b2d4a4e2f362 | 4 | |
k4zuki | 3:a9684679d1ec | 5 | #ifndef __DA14580_H__ |
k4zuki | 3:a9684679d1ec | 6 | #define __DA14580_H__ |
k4zuki | 0:3bdbabca8a09 | 7 | |
k4zuki | 0:3bdbabca8a09 | 8 | #include "mbed.h" |
k4zuki | 8:af5210dbfe64 | 9 | #include "W25X40BV.h" |
k4zuki | 0:3bdbabca8a09 | 10 | |
k4zuki | 0:3bdbabca8a09 | 11 | #define LOADER_FILE "/local/loader.bin" |
k4zuki | 0:3bdbabca8a09 | 12 | #define TARGET_FILE "/local/target.bin" |
k4zuki | 6:db0ae78150a3 | 13 | #define _RESET 0 |
k4zuki | 6:db0ae78150a3 | 14 | #define _BOOT 1 |
k4zuki | 5:45e9f3723a08 | 15 | #define _TIMEOUT 10000 |
k4zuki | 0:3bdbabca8a09 | 16 | |
k4zuki | 5:45e9f3723a08 | 17 | /** mbed library for Dialog Semiconductor DA14580 Bluetooth Smart chip |
k4zuki | 0:3bdbabca8a09 | 18 | * |
k4zuki | 0:3bdbabca8a09 | 19 | * Example: |
k4zuki | 0:3bdbabca8a09 | 20 | * @code |
k4zuki | 0:3bdbabca8a09 | 21 | * #include "mbed.h" |
k4zuki | 0:3bdbabca8a09 | 22 | * #include "DA14580.h" |
k4zuki | 0:3bdbabca8a09 | 23 | * |
k4zuki | 0:3bdbabca8a09 | 24 | * DA14580 BLE(P0_18, P0_19, P0_1); |
k4zuki | 0:3bdbabca8a09 | 25 | * Serial pc(USBTX, USBRX); |
k4zuki | 3:a9684679d1ec | 26 | * LocalFileSystem local( "local" ); |
k4zuki | 0:3bdbabca8a09 | 27 | * |
k4zuki | 4:b66f3d100c82 | 28 | * #undef LOADER_FILE |
k4zuki | 4:b66f3d100c82 | 29 | * #define LOADER_FILE "/local/loader_bin" |
k4zuki | 4:b66f3d100c82 | 30 | * |
k4zuki | 4:b66f3d100c82 | 31 | * #undef TARGET_FILE |
k4zuki | 4:b66f3d100c82 | 32 | * #define TARGET_FILE "/local/target_bin" |
k4zuki | 4:b66f3d100c82 | 33 | * |
k4zuki | 0:3bdbabca8a09 | 34 | * int main() |
k4zuki | 0:3bdbabca8a09 | 35 | * { |
k4zuki | 0:3bdbabca8a09 | 36 | * int result=0; |
k4zuki | 0:3bdbabca8a09 | 37 | * pc.baud(115200); |
k4zuki | 0:3bdbabca8a09 | 38 | * |
k4zuki | 0:3bdbabca8a09 | 39 | * wait_ms(1); |
k4zuki | 4:b66f3d100c82 | 40 | * result = BLE.load(); |
k4zuki | 0:3bdbabca8a09 | 41 | * pc.printf("Result = %d \n\r",&result); |
k4zuki | 0:3bdbabca8a09 | 42 | * } |
k4zuki | 0:3bdbabca8a09 | 43 | * @endcode |
k4zuki | 0:3bdbabca8a09 | 44 | */ |
k4zuki | 0:3bdbabca8a09 | 45 | class DA14580 |
k4zuki | 0:3bdbabca8a09 | 46 | { |
k4zuki | 0:3bdbabca8a09 | 47 | public: |
k4zuki | 1:b2d4a4e2f362 | 48 | /** \enum XMODEM_CONST |
k4zuki | 1:b2d4a4e2f362 | 49 | \brief Constant number used in XMODEM |
k4zuki | 1:b2d4a4e2f362 | 50 | @param SOH = 0x01 |
k4zuki | 1:b2d4a4e2f362 | 51 | @param STX = 0x02 |
k4zuki | 1:b2d4a4e2f362 | 52 | @param EOT = 0x04 |
k4zuki | 1:b2d4a4e2f362 | 53 | @param ACK = 0x06 |
k4zuki | 1:b2d4a4e2f362 | 54 | @param DLE = 0x10 |
k4zuki | 1:b2d4a4e2f362 | 55 | @param NAK = 0x15 |
k4zuki | 1:b2d4a4e2f362 | 56 | @param CAN = 0x18 |
k4zuki | 1:b2d4a4e2f362 | 57 | */ |
k4zuki | 1:b2d4a4e2f362 | 58 | enum XMODEM_CONST { |
k4zuki | 1:b2d4a4e2f362 | 59 | SOH = (0x01), |
k4zuki | 1:b2d4a4e2f362 | 60 | STX = (0x02), |
k4zuki | 1:b2d4a4e2f362 | 61 | EOT = (0x04), |
k4zuki | 1:b2d4a4e2f362 | 62 | ACK = (0x06), |
k4zuki | 1:b2d4a4e2f362 | 63 | DLE = (0x10), |
k4zuki | 1:b2d4a4e2f362 | 64 | NAK = (0x15), |
k4zuki | 1:b2d4a4e2f362 | 65 | CAN = (0x18), |
k4zuki | 1:b2d4a4e2f362 | 66 | }; |
k4zuki | 1:b2d4a4e2f362 | 67 | |
k4zuki | 1:b2d4a4e2f362 | 68 | /** \enum DA14580_STATUS |
k4zuki | 1:b2d4a4e2f362 | 69 | \brief Status flags to show write operation is succeeded |
k4zuki | 2:043522e836ab | 70 | @param SUCCESS = '0' |
k4zuki | 2:043522e836ab | 71 | @param E_NOT_CONNECTED = '1' |
k4zuki | 2:043522e836ab | 72 | @param E_FILE_NOT_FOUND = '2' |
k4zuki | 2:043522e836ab | 73 | @param E_TIMEOUT_STX = '3' |
k4zuki | 2:043522e836ab | 74 | @param E_ACK_NOT_RETURNED = '4' |
k4zuki | 2:043522e836ab | 75 | @param E_CRC_MISMATCH = '5' |
k4zuki | 1:b2d4a4e2f362 | 76 | */ |
k4zuki | 1:b2d4a4e2f362 | 77 | enum DA14580_STATUS { |
k4zuki | 1:b2d4a4e2f362 | 78 | SUCCESS = '0', |
k4zuki | 1:b2d4a4e2f362 | 79 | E_NOT_CONNECTED = '1', |
k4zuki | 1:b2d4a4e2f362 | 80 | E_FILE_NOT_FOUND = '2', |
k4zuki | 1:b2d4a4e2f362 | 81 | E_TIMEOUT_STX = '3', |
k4zuki | 1:b2d4a4e2f362 | 82 | E_ACK_NOT_RETURNED = '4', |
k4zuki | 1:b2d4a4e2f362 | 83 | E_CRC_MISMATCH = '5' |
k4zuki | 1:b2d4a4e2f362 | 84 | }; |
k4zuki | 1:b2d4a4e2f362 | 85 | |
k4zuki | 1:b2d4a4e2f362 | 86 | /** Constructor |
k4zuki | 1:b2d4a4e2f362 | 87 | * @param TX UART data output from mbed |
k4zuki | 1:b2d4a4e2f362 | 88 | * @param RX UART data input from device |
k4zuki | 1:b2d4a4e2f362 | 89 | * @param RESET LOW-active RESET signal |
k4zuki | 1:b2d4a4e2f362 | 90 | */ |
k4zuki | 0:3bdbabca8a09 | 91 | DA14580( PinName TX, PinName RX, PinName RESET ); |
k4zuki | 1:b2d4a4e2f362 | 92 | |
k4zuki | 1:b2d4a4e2f362 | 93 | /** Constructor |
k4zuki | 1:b2d4a4e2f362 | 94 | * @param &ble pointer to RawSerial instance |
k4zuki | 1:b2d4a4e2f362 | 95 | * @param RESET LOW-active RESET signal |
k4zuki | 1:b2d4a4e2f362 | 96 | */ |
k4zuki | 0:3bdbabca8a09 | 97 | DA14580( RawSerial &ble, PinName RESET ); |
k4zuki | 1:b2d4a4e2f362 | 98 | |
k4zuki | 1:b2d4a4e2f362 | 99 | /** Destructor |
k4zuki | 1:b2d4a4e2f362 | 100 | */ |
k4zuki | 0:3bdbabca8a09 | 101 | ~DA14580(); |
k4zuki | 0:3bdbabca8a09 | 102 | |
k4zuki | 1:b2d4a4e2f362 | 103 | /** Initialise internal variables |
k4zuki | 1:b2d4a4e2f362 | 104 | */ |
k4zuki | 0:3bdbabca8a09 | 105 | void init(); |
k4zuki | 1:b2d4a4e2f362 | 106 | |
k4zuki | 4:b66f3d100c82 | 107 | /** copy application executable into external SPI flash memory |
k4zuki | 4:b66f3d100c82 | 108 | */ |
k4zuki | 8:af5210dbfe64 | 109 | void copy_to_flash(W25X40BV* flash); |
k4zuki | 5:45e9f3723a08 | 110 | |
k4zuki | 4:b66f3d100c82 | 111 | /** Load bootloader executable into device through UART |
k4zuki | 4:b66f3d100c82 | 112 | * the target binary should be defined by LOADER_FILE |
k4zuki | 1:b2d4a4e2f362 | 113 | */ |
k4zuki | 0:3bdbabca8a09 | 114 | int load(); |
k4zuki | 1:b2d4a4e2f362 | 115 | |
k4zuki | 1:b2d4a4e2f362 | 116 | /** Returns file size: copied from ika_shouyu_poppoyaki |
k4zuki | 1:b2d4a4e2f362 | 117 | * @param *fp File pointer |
k4zuki | 1:b2d4a4e2f362 | 118 | */ |
k4zuki | 1:b2d4a4e2f362 | 119 | int file_size( FILE *fp ); |
k4zuki | 1:b2d4a4e2f362 | 120 | |
k4zuki | 0:3bdbabca8a09 | 121 | RawSerial _ble; |
k4zuki | 0:3bdbabca8a09 | 122 | |
k4zuki | 0:3bdbabca8a09 | 123 | private: |
k4zuki | 0:3bdbabca8a09 | 124 | uint8_t _recieve; |
k4zuki | 0:3bdbabca8a09 | 125 | uint8_t _read; |
k4zuki | 0:3bdbabca8a09 | 126 | int _filesize; |
k4zuki | 8:af5210dbfe64 | 127 | int _loadersize; |
k4zuki | 0:3bdbabca8a09 | 128 | int _timeout; |
k4zuki | 0:3bdbabca8a09 | 129 | int _status; |
k4zuki | 0:3bdbabca8a09 | 130 | FILE* _fp; |
k4zuki | 0:3bdbabca8a09 | 131 | int _crc; |
k4zuki | 0:3bdbabca8a09 | 132 | DigitalOut _reset; |
k4zuki | 0:3bdbabca8a09 | 133 | }; |
k4zuki | 0:3bdbabca8a09 | 134 | |
k4zuki | 3:a9684679d1ec | 135 | #endif //__DA14580_H__ |