fota lib for mdot

Dependents:   UQ_LoraWAN

Committer:
rklaassen
Date:
Tue Jan 15 09:25:58 2019 -0600
Revision:
8:7ba1f2abb8c0
Parent:
3:63d10f2375ea
README test

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 1 /* Library for SPI flash 25* devices.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 2 * Copyright (c) 2014 Multi-Tech Systems
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 3 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 5 * of this software and associated documentation files (the "Software"), to deal
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 6 * in the Software without restriction, including without limitation the rights
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 8 * copies of the Software, and to permit persons to whom the Software is
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 9 * furnished to do so, subject to the following conditions:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 10 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 11 * The above copyright notice and this permission notice shall be included in
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 12 * all copies or substantial portions of the Software.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 13 *
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 20 * SOFTWARE.
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 21 */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 22
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 23 #ifndef SPIFLASH25_H
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 24 #define SPIFLASH25_H
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 25
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 26 #include "mbed.h"
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 27
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 28 class SpiFlash25 {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 29 public:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 30 SpiFlash25(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName W = NC, PinName HOLD = NC, int page_size = 256, int mem_size = 2097152);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 31
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 32 /* Set the page size (default 256) */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 33 void set_page_size(int size);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 34
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 35 /* Set up the internal SPI object */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 36 void format(int bits, int mode);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 37 void frequency(int hz);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 38
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 39 /* Reads and writes can be across page boundaries */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 40 bool read(int addr, int len, char* data);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 41 bool write(int addr, int len, const char* data);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 42
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 43 /* Read ID and status registers */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 44 char* read_id();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 45 void write_status(char data);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 46 char read_status();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 47
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 48 /* Erase methods */
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 49 void clear_sector(int addr);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 50 void clear_mem();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 51
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 52 void deep_power_down();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 53 void wakeup();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 54
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 55 private:
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 56 enum {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 57 WRITE_ENABLE = 0x06,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 58 WRITE_DISABLE = 0x04,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 59 READ_IDENTIFICATION = 0x9F,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 60 READ_STATUS = 0x05,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 61 WRITE_STATUS = 0x01,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 62 READ_DATA = 0x03,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 63 READ_DATA_FAST = 0x0B,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 64 PAGE_PROGRAM = 0x02,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 65 SECTOR_ERASE = 0xD8,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 66 BULK_ERASE = 0xC7,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 67 DEEP_POWER_DOWN = 0xB9,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 68 DEEP_POWER_DOWN_RELEASE = 0xAB,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 69 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 70
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 71 enum {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 72 STATUS_SRWD = 0x80, // 0b 1000 0000
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 73 STATUS_BP2 = 0x10, // 0b 0001 0000
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 74 STATUS_BP1 = 0x08, // 0b 0000 1000
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 75 STATUS_BP0 = 0x04, // 0b 0000 0100
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 76 STATUS_WEL = 0x02, // 0b 0000 0010
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 77 STATUS_WIP = 0x01, // 0b 0000 0001
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 78 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 79
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 80 enum {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 81 ID_MANUFACTURER = 0,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 82 ID_MEM_TYPE = 1,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 83 ID_MEM_SIZE = 2,
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 84 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 85
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 86 bool write_page(int addr, int len, const char* data);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 87 void enable_write();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 88 void wait_for_write();
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 89
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 90 static inline char high_byte(int addr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 91 return ((addr & 0xff0000) >> 16);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 92 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 93 static inline char mid_byte(int addr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 94 return ((addr & 0xff00) >> 8);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 95 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 96 static inline char low_byte(int addr) {
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 97 return (addr & 0xff);
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 98 }
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 99
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 100 SPI _spi;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 101 DigitalOut _cs;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 102 DigitalOut* _w;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 103 DigitalOut* _hold;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 104 int _mem_size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 105 int _page_size;
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 106 char _id[3];
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 107 };
Jenkins@KEILDM1.dc.multitech.prv 3:63d10f2375ea 108 #endif