Forked library from okini3939/at45db161d
Fork of at45db161d by
at45db161d.h@2:111e8cf6f263, 2015-09-19 (annotated)
- Committer:
- k4zuki
- Date:
- Sat Sep 19 10:15:44 2015 +0000
- Revision:
- 2:111e8cf6f263
- Parent:
- 0:2e953bbaf3a5
- Child:
- 3:c2cd805585ef
Use SWSPI instead of SPI
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
okini3939 | 0:2e953bbaf3a5 | 1 | /** |
okini3939 | 0:2e953bbaf3a5 | 2 | * @file at45db161d.h |
okini3939 | 0:2e953bbaf3a5 | 3 | * @brief AT45DB161D module |
okini3939 | 0:2e953bbaf3a5 | 4 | **/ |
okini3939 | 0:2e953bbaf3a5 | 5 | #ifndef AT45DB161D_H |
okini3939 | 0:2e953bbaf3a5 | 6 | #define AT45DB161D_H |
okini3939 | 0:2e953bbaf3a5 | 7 | |
okini3939 | 0:2e953bbaf3a5 | 8 | #include "mbed.h" |
okini3939 | 0:2e953bbaf3a5 | 9 | |
okini3939 | 0:2e953bbaf3a5 | 10 | extern "C" { |
okini3939 | 0:2e953bbaf3a5 | 11 | |
okini3939 | 0:2e953bbaf3a5 | 12 | //#include <avr/pgmspace.h> |
okini3939 | 0:2e953bbaf3a5 | 13 | #include <inttypes.h> |
okini3939 | 0:2e953bbaf3a5 | 14 | //#include "WConstants.h" |
okini3939 | 0:2e953bbaf3a5 | 15 | |
okini3939 | 0:2e953bbaf3a5 | 16 | }; |
okini3939 | 0:2e953bbaf3a5 | 17 | |
okini3939 | 0:2e953bbaf3a5 | 18 | #include "at45db161d_commands.h" |
k4zuki | 2:111e8cf6f263 | 19 | #include "SWSPI.h" |
okini3939 | 0:2e953bbaf3a5 | 20 | |
okini3939 | 0:2e953bbaf3a5 | 21 | /** |
okini3939 | 0:2e953bbaf3a5 | 22 | * @defgroup AT45DB161D AT45DB161D module |
okini3939 | 0:2e953bbaf3a5 | 23 | * @{ |
okini3939 | 0:2e953bbaf3a5 | 24 | **/ |
okini3939 | 0:2e953bbaf3a5 | 25 | |
okini3939 | 0:2e953bbaf3a5 | 26 | /** |
okini3939 | 0:2e953bbaf3a5 | 27 | * @defgroup SPI SPI pinout and transfert function |
okini3939 | 0:2e953bbaf3a5 | 28 | * @{ |
okini3939 | 0:2e953bbaf3a5 | 29 | **/ |
okini3939 | 0:2e953bbaf3a5 | 30 | #ifndef SPI |
okini3939 | 0:2e953bbaf3a5 | 31 | /** |
okini3939 | 0:2e953bbaf3a5 | 32 | * @defgroup SPI_Pinout SPI pinout |
okini3939 | 0:2e953bbaf3a5 | 33 | * @{ |
okini3939 | 0:2e953bbaf3a5 | 34 | **/ |
okini3939 | 0:2e953bbaf3a5 | 35 | /** Serial input (SI) **/ |
okini3939 | 0:2e953bbaf3a5 | 36 | #define DATAOUT 11 |
okini3939 | 0:2e953bbaf3a5 | 37 | /** Serial output (SO) **/ |
okini3939 | 0:2e953bbaf3a5 | 38 | #define DATAIN 12 |
okini3939 | 0:2e953bbaf3a5 | 39 | /** Serial clock (SCK) **/ |
okini3939 | 0:2e953bbaf3a5 | 40 | #define SPICLOCK 13 |
okini3939 | 0:2e953bbaf3a5 | 41 | /** Chip select (CS) **/ |
okini3939 | 0:2e953bbaf3a5 | 42 | #define SLAVESELECT 10 |
okini3939 | 0:2e953bbaf3a5 | 43 | /** Reset (Reset) **/ |
okini3939 | 0:2e953bbaf3a5 | 44 | #define RESET 8 |
okini3939 | 0:2e953bbaf3a5 | 45 | /** Write protect (WP) **/ |
okini3939 | 0:2e953bbaf3a5 | 46 | #define WP 7 |
okini3939 | 0:2e953bbaf3a5 | 47 | /** |
okini3939 | 0:2e953bbaf3a5 | 48 | * @} |
okini3939 | 0:2e953bbaf3a5 | 49 | **/ |
okini3939 | 0:2e953bbaf3a5 | 50 | |
okini3939 | 0:2e953bbaf3a5 | 51 | /** |
okini3939 | 0:2e953bbaf3a5 | 52 | * @fn inline uint8_t spi_transfer(uint8_t data) |
okini3939 | 0:2e953bbaf3a5 | 53 | * @brief Transfer a byte via spi |
okini3939 | 0:2e953bbaf3a5 | 54 | * @param data Data to transfer via SPI |
k4zuki | 2:111e8cf6f263 | 55 | * @return The content of the SPI data register |
okini3939 | 0:2e953bbaf3a5 | 56 | **/ |
okini3939 | 0:2e953bbaf3a5 | 57 | /* |
okini3939 | 0:2e953bbaf3a5 | 58 | inline uint8_t spi_transfer(uint8_t data) |
okini3939 | 0:2e953bbaf3a5 | 59 | { |
okini3939 | 0:2e953bbaf3a5 | 60 | SPDR = data; |
okini3939 | 0:2e953bbaf3a5 | 61 | while(!(SPSR & (1 << SPIF))) ; |
okini3939 | 0:2e953bbaf3a5 | 62 | return SPDR; |
okini3939 | 0:2e953bbaf3a5 | 63 | } |
okini3939 | 0:2e953bbaf3a5 | 64 | */ |
okini3939 | 0:2e953bbaf3a5 | 65 | #define spi_transfer(data) _spi.write(data) |
okini3939 | 0:2e953bbaf3a5 | 66 | |
okini3939 | 0:2e953bbaf3a5 | 67 | /** De-assert CS **/ |
okini3939 | 0:2e953bbaf3a5 | 68 | //#define DF_CS_inactive digitalWrite(SLAVESELECT,HIGH) |
okini3939 | 0:2e953bbaf3a5 | 69 | #define DF_CS_inactive _cs = 1 |
okini3939 | 0:2e953bbaf3a5 | 70 | /** Assert CS **/ |
okini3939 | 0:2e953bbaf3a5 | 71 | //#define DF_CS_active digitalWrite(SLAVESELECT,LOW) |
okini3939 | 0:2e953bbaf3a5 | 72 | #define DF_CS_active _cs = 0 |
okini3939 | 0:2e953bbaf3a5 | 73 | |
okini3939 | 0:2e953bbaf3a5 | 74 | #endif /* SPI */ |
okini3939 | 0:2e953bbaf3a5 | 75 | /** |
okini3939 | 0:2e953bbaf3a5 | 76 | * @} |
okini3939 | 0:2e953bbaf3a5 | 77 | **/ |
okini3939 | 0:2e953bbaf3a5 | 78 | |
okini3939 | 0:2e953bbaf3a5 | 79 | /** |
okini3939 | 0:2e953bbaf3a5 | 80 | * @defgroup STATUS_REGISTER_FORMAT Status register format |
okini3939 | 0:2e953bbaf3a5 | 81 | * @{ |
okini3939 | 0:2e953bbaf3a5 | 82 | **/ |
okini3939 | 0:2e953bbaf3a5 | 83 | /** |
k4zuki | 2:111e8cf6f263 | 84 | * @brief Ready/busy status is indicated using bit 7 of the status register. |
okini3939 | 0:2e953bbaf3a5 | 85 | * If bit 7 is a 1, then the device is not busy and is ready to accept |
okini3939 | 0:2e953bbaf3a5 | 86 | * the next command. If bit 7 is a 0, then the device is in a busy |
okini3939 | 0:2e953bbaf3a5 | 87 | * state. |
okini3939 | 0:2e953bbaf3a5 | 88 | **/ |
okini3939 | 0:2e953bbaf3a5 | 89 | #define READY_BUSY 0x80 |
okini3939 | 0:2e953bbaf3a5 | 90 | /** |
okini3939 | 0:2e953bbaf3a5 | 91 | * Result of the most recent Memory Page to Buffer Compare operation. |
okini3939 | 0:2e953bbaf3a5 | 92 | * If this bit is equal to 0, then the data in the main memory page |
okini3939 | 0:2e953bbaf3a5 | 93 | * matches the data in the buffer. If it's 1 then at least 1 byte in |
okini3939 | 0:2e953bbaf3a5 | 94 | * the main memory page does not match the data in the buffer. |
okini3939 | 0:2e953bbaf3a5 | 95 | **/ |
okini3939 | 0:2e953bbaf3a5 | 96 | #define COMPARE 0x40 |
okini3939 | 0:2e953bbaf3a5 | 97 | /** |
okini3939 | 0:2e953bbaf3a5 | 98 | * Bit 1 in the Status Register is used to provide information to the |
okini3939 | 0:2e953bbaf3a5 | 99 | * user whether or not the sector protection has been enabled or |
okini3939 | 0:2e953bbaf3a5 | 100 | * disabled, either by software-controlled method or |
okini3939 | 0:2e953bbaf3a5 | 101 | * hardware-controlled method. 1 means that the sector protection has |
okini3939 | 0:2e953bbaf3a5 | 102 | * been enabled and 0 that it has been disabled. |
okini3939 | 0:2e953bbaf3a5 | 103 | **/ |
okini3939 | 0:2e953bbaf3a5 | 104 | #define PROTECT 0x02 |
okini3939 | 0:2e953bbaf3a5 | 105 | /** |
okini3939 | 0:2e953bbaf3a5 | 106 | * Bit 0 indicates wether the page size of the main memory array is |
okini3939 | 0:2e953bbaf3a5 | 107 | * configured for "power of 2" binary page size (512 bytes) (bit=1) or |
okini3939 | 0:2e953bbaf3a5 | 108 | * standard DataFlash page size (528 bytes) (bit=0). |
okini3939 | 0:2e953bbaf3a5 | 109 | **/ |
okini3939 | 0:2e953bbaf3a5 | 110 | #define PAGE_SIZE 0x01 |
okini3939 | 0:2e953bbaf3a5 | 111 | /** |
okini3939 | 0:2e953bbaf3a5 | 112 | * Bits 5, 4, 3 and 2 indicates the device density. The decimal value |
okini3939 | 0:2e953bbaf3a5 | 113 | * of these four binary bits does not equate to the device density; the |
okini3939 | 0:2e953bbaf3a5 | 114 | * four bits represent a combinational code relating to differing |
okini3939 | 0:2e953bbaf3a5 | 115 | * densities of DataFlash devices. The device density is not the same |
okini3939 | 0:2e953bbaf3a5 | 116 | * as the density code indicated in the JEDEC device ID information. |
okini3939 | 0:2e953bbaf3a5 | 117 | * The device density is provided only for backward compatibility. |
okini3939 | 0:2e953bbaf3a5 | 118 | **/ |
okini3939 | 0:2e953bbaf3a5 | 119 | #define DEVICE_DENSITY 0x2C |
okini3939 | 0:2e953bbaf3a5 | 120 | /** |
okini3939 | 0:2e953bbaf3a5 | 121 | * @} |
okini3939 | 0:2e953bbaf3a5 | 122 | **/ |
okini3939 | 0:2e953bbaf3a5 | 123 | |
okini3939 | 0:2e953bbaf3a5 | 124 | /** |
okini3939 | 0:2e953bbaf3a5 | 125 | * @brief at45db161d module |
okini3939 | 0:2e953bbaf3a5 | 126 | * @todo |
okini3939 | 0:2e953bbaf3a5 | 127 | * - TESTS! |
okini3939 | 0:2e953bbaf3a5 | 128 | * - Protection and Security Commands |
okini3939 | 0:2e953bbaf3a5 | 129 | * - Auto Page Rewrite through Buffer 1 |
okini3939 | 0:2e953bbaf3a5 | 130 | * - Auto Page Rewrite through Buffer 2 |
okini3939 | 0:2e953bbaf3a5 | 131 | **/ |
okini3939 | 0:2e953bbaf3a5 | 132 | class ATD45DB161D |
okini3939 | 0:2e953bbaf3a5 | 133 | { |
okini3939 | 0:2e953bbaf3a5 | 134 | public: |
okini3939 | 0:2e953bbaf3a5 | 135 | /** |
okini3939 | 0:2e953bbaf3a5 | 136 | * @brief ID structure |
okini3939 | 0:2e953bbaf3a5 | 137 | * This structure contains various informations about the |
okini3939 | 0:2e953bbaf3a5 | 138 | * dataflash chip being used. |
okini3939 | 0:2e953bbaf3a5 | 139 | **/ |
okini3939 | 0:2e953bbaf3a5 | 140 | struct ID |
okini3939 | 0:2e953bbaf3a5 | 141 | { |
okini3939 | 0:2e953bbaf3a5 | 142 | uint8_t manufacturer; /**< Manufacturer id **/ |
okini3939 | 0:2e953bbaf3a5 | 143 | uint8_t device[2]; /**< Device id **/ |
okini3939 | 0:2e953bbaf3a5 | 144 | uint8_t extendedInfoLength; /**< Extended device information string length **/ |
okini3939 | 0:2e953bbaf3a5 | 145 | }; |
okini3939 | 0:2e953bbaf3a5 | 146 | |
okini3939 | 0:2e953bbaf3a5 | 147 | public: |
okini3939 | 0:2e953bbaf3a5 | 148 | /** CTOR **/ |
okini3939 | 0:2e953bbaf3a5 | 149 | ATD45DB161D(PinName mosi, PinName miso, PinName sclk, PinName cs); |
k4zuki | 2:111e8cf6f263 | 150 | ATD45DB161D(SWSPI &spi, PinName cs); |
okini3939 | 0:2e953bbaf3a5 | 151 | /** DTOR **/ |
okini3939 | 0:2e953bbaf3a5 | 152 | ~ATD45DB161D(); |
okini3939 | 0:2e953bbaf3a5 | 153 | |
okini3939 | 0:2e953bbaf3a5 | 154 | /** Setup SPI and pinout **/ |
okini3939 | 0:2e953bbaf3a5 | 155 | void Init(); |
okini3939 | 0:2e953bbaf3a5 | 156 | |
okini3939 | 0:2e953bbaf3a5 | 157 | /** |
okini3939 | 0:2e953bbaf3a5 | 158 | * Read status register |
okini3939 | 0:2e953bbaf3a5 | 159 | * @return The content of the status register |
okini3939 | 0:2e953bbaf3a5 | 160 | * **/ |
okini3939 | 0:2e953bbaf3a5 | 161 | uint8_t ReadStatusRegister(); |
okini3939 | 0:2e953bbaf3a5 | 162 | |
okini3939 | 0:2e953bbaf3a5 | 163 | /** |
okini3939 | 0:2e953bbaf3a5 | 164 | * Read Manufacturer and Device ID |
okini3939 | 0:2e953bbaf3a5 | 165 | * @note if id.extendedInfoLength is not equal to zero, |
okini3939 | 0:2e953bbaf3a5 | 166 | * successive calls to spi_transfer(0xff) will return |
okini3939 | 0:2e953bbaf3a5 | 167 | * the extended device information string bytes. |
okini3939 | 0:2e953bbaf3a5 | 168 | * @param id Pointer to the ID structure to initialize |
okini3939 | 0:2e953bbaf3a5 | 169 | **/ |
okini3939 | 0:2e953bbaf3a5 | 170 | void ReadManufacturerAndDeviceID(struct ATD45DB161D::ID *id); |
okini3939 | 0:2e953bbaf3a5 | 171 | |
okini3939 | 0:2e953bbaf3a5 | 172 | /** |
okini3939 | 0:2e953bbaf3a5 | 173 | * A main memory page read allows the user to read data directly from |
okini3939 | 0:2e953bbaf3a5 | 174 | * any one of the 4096 pages in the main memory, bypassing both of the |
okini3939 | 0:2e953bbaf3a5 | 175 | * data buffers and leaving the contents of the buffers unchanged. |
okini3939 | 0:2e953bbaf3a5 | 176 | * @param page Page of the main memory to read |
okini3939 | 0:2e953bbaf3a5 | 177 | * @param offset Starting byte address within the page |
okini3939 | 0:2e953bbaf3a5 | 178 | **/ |
okini3939 | 0:2e953bbaf3a5 | 179 | void ReadMainMemoryPage(uint16_t page, uint16_t offset); |
okini3939 | 0:2e953bbaf3a5 | 180 | |
okini3939 | 0:2e953bbaf3a5 | 181 | /** |
okini3939 | 0:2e953bbaf3a5 | 182 | * Sequentially read a continuous stream of data. |
okini3939 | 0:2e953bbaf3a5 | 183 | * @param page Page of the main memory where the sequential read will start |
okini3939 | 0:2e953bbaf3a5 | 184 | * @param offset Starting byte address within the page |
okini3939 | 0:2e953bbaf3a5 | 185 | * @param low If true the read operation will be performed in low speed mode (and in high speed mode if it's false). |
okini3939 | 0:2e953bbaf3a5 | 186 | * @note The legacy mode is not currently supported |
okini3939 | 0:2e953bbaf3a5 | 187 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 188 | **/ |
okini3939 | 0:2e953bbaf3a5 | 189 | void ContinuousArrayRead(uint16_t page, uint16_t offset, uint8_t low); |
okini3939 | 0:2e953bbaf3a5 | 190 | |
okini3939 | 0:2e953bbaf3a5 | 191 | /** |
okini3939 | 0:2e953bbaf3a5 | 192 | * Read the content of one of the SRAM data buffers (in low or high speed mode). |
okini3939 | 0:2e953bbaf3a5 | 193 | * @param bufferNum Buffer to read (1 or 2) |
okini3939 | 0:2e953bbaf3a5 | 194 | * @param offset Starting byte within the buffer |
okini3939 | 0:2e953bbaf3a5 | 195 | * @param low If true the read operation will be performed in low speed mode (and in high speed mode if it's false). |
okini3939 | 0:2e953bbaf3a5 | 196 | **/ |
okini3939 | 0:2e953bbaf3a5 | 197 | void BufferRead(uint8_t bufferNum, uint16_t offset, uint8_t low); |
okini3939 | 0:2e953bbaf3a5 | 198 | |
okini3939 | 0:2e953bbaf3a5 | 199 | /** |
okini3939 | 0:2e953bbaf3a5 | 200 | * Write data to one of the SRAM data buffers. Any further call to |
okini3939 | 0:2e953bbaf3a5 | 201 | * spi_tranfer will return bytes contained in the data buffer until |
okini3939 | 0:2e953bbaf3a5 | 202 | * a low-to-high transition is detected on the CS pin. If the end of |
okini3939 | 0:2e953bbaf3a5 | 203 | * the data buffer is reached, the device will wrap around back to the |
okini3939 | 0:2e953bbaf3a5 | 204 | * beginning of the buffer. |
okini3939 | 0:2e953bbaf3a5 | 205 | * @param bufferNum Buffer to read (1 or 2) |
okini3939 | 0:2e953bbaf3a5 | 206 | * @param offset Starting byte within the buffer |
okini3939 | 0:2e953bbaf3a5 | 207 | **/ |
okini3939 | 0:2e953bbaf3a5 | 208 | void BufferWrite(uint8_t bufferNum, uint16_t offset); |
okini3939 | 0:2e953bbaf3a5 | 209 | |
okini3939 | 0:2e953bbaf3a5 | 210 | /** |
okini3939 | 0:2e953bbaf3a5 | 211 | * Transfer data from buffer 1 or 2 to main memory page. |
okini3939 | 0:2e953bbaf3a5 | 212 | * @param bufferNum Buffer to use (1 or 2) |
okini3939 | 0:2e953bbaf3a5 | 213 | * @param page Page where the content of the buffer will transfered |
okini3939 | 0:2e953bbaf3a5 | 214 | * @param erase If set the page will be first erased before the buffer transfer. |
okini3939 | 0:2e953bbaf3a5 | 215 | * @note If erase is equal to zero, the page must have been previously erased using one of the erase command (Page or Block Erase). |
okini3939 | 0:2e953bbaf3a5 | 216 | **/ |
okini3939 | 0:2e953bbaf3a5 | 217 | void BufferToPage(uint8_t bufferNum, uint16_t page, uint8_t erase); |
okini3939 | 0:2e953bbaf3a5 | 218 | |
okini3939 | 0:2e953bbaf3a5 | 219 | /** |
okini3939 | 0:2e953bbaf3a5 | 220 | * Transfer a page of data from main memory to buffer 1 or 2. |
okini3939 | 0:2e953bbaf3a5 | 221 | * @param page Main memory page to transfer |
okini3939 | 0:2e953bbaf3a5 | 222 | * @param buffer Buffer (1 or 2) where the data will be written |
okini3939 | 0:2e953bbaf3a5 | 223 | **/ |
okini3939 | 0:2e953bbaf3a5 | 224 | void PageToBuffer(uint16_t page, uint8_t bufferNum); |
okini3939 | 0:2e953bbaf3a5 | 225 | |
okini3939 | 0:2e953bbaf3a5 | 226 | /** |
okini3939 | 0:2e953bbaf3a5 | 227 | * Erase a page in the main memory array. |
okini3939 | 0:2e953bbaf3a5 | 228 | * @param page Page to erase |
okini3939 | 0:2e953bbaf3a5 | 229 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 230 | **/ |
okini3939 | 0:2e953bbaf3a5 | 231 | void PageErase(uint16_t page); |
okini3939 | 0:2e953bbaf3a5 | 232 | |
okini3939 | 0:2e953bbaf3a5 | 233 | /** |
okini3939 | 0:2e953bbaf3a5 | 234 | * Erase a block of eight pages at one time. |
okini3939 | 0:2e953bbaf3a5 | 235 | * @param block Index of the block to erase |
okini3939 | 0:2e953bbaf3a5 | 236 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 237 | **/ |
okini3939 | 0:2e953bbaf3a5 | 238 | void BlockErase(uint16_t block); |
okini3939 | 0:2e953bbaf3a5 | 239 | |
okini3939 | 0:2e953bbaf3a5 | 240 | /** |
okini3939 | 0:2e953bbaf3a5 | 241 | * Erase a sector in main memory. There are 16 sector on the |
okini3939 | 0:2e953bbaf3a5 | 242 | * at45db161d and only one can be erased at one time. |
okini3939 | 0:2e953bbaf3a5 | 243 | * @param sector Sector to erase |
okini3939 | 0:2e953bbaf3a5 | 244 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 245 | **/ |
okini3939 | 0:2e953bbaf3a5 | 246 | void SectoreErase(uint8_t sector); |
okini3939 | 0:2e953bbaf3a5 | 247 | |
okini3939 | 0:2e953bbaf3a5 | 248 | /** |
okini3939 | 0:2e953bbaf3a5 | 249 | * Erase the entire chip memory. Sectors proteced or locked down will |
okini3939 | 0:2e953bbaf3a5 | 250 | * not be erased. |
okini3939 | 0:2e953bbaf3a5 | 251 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 252 | **/ |
okini3939 | 0:2e953bbaf3a5 | 253 | void ChipErase(); |
okini3939 | 0:2e953bbaf3a5 | 254 | |
okini3939 | 0:2e953bbaf3a5 | 255 | /** |
okini3939 | 0:2e953bbaf3a5 | 256 | * This a combination of Buffer Write and Buffer to Page with |
okini3939 | 0:2e953bbaf3a5 | 257 | * Built-in Erase. |
okini3939 | 0:2e953bbaf3a5 | 258 | * @note You must call EndAndWait in order to start transfering data from buffer to page |
okini3939 | 0:2e953bbaf3a5 | 259 | * @param page Page where the content of the buffer will transfered |
okini3939 | 0:2e953bbaf3a5 | 260 | * @param offset Starting byte address within the buffer |
okini3939 | 0:2e953bbaf3a5 | 261 | * @param bufferNum Buffer to use (1 or 2) |
okini3939 | 0:2e953bbaf3a5 | 262 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 263 | **/ |
okini3939 | 0:2e953bbaf3a5 | 264 | void BeginPageWriteThroughBuffer(uint16_t page, uint16_t offset, uint8_t bufferNum); |
okini3939 | 0:2e953bbaf3a5 | 265 | |
okini3939 | 0:2e953bbaf3a5 | 266 | /** |
okini3939 | 0:2e953bbaf3a5 | 267 | * Perform a low-to-high transition on the CS pin and then poll |
okini3939 | 0:2e953bbaf3a5 | 268 | * the status register to check if the dataflash is busy. |
okini3939 | 0:2e953bbaf3a5 | 269 | **/ |
okini3939 | 0:2e953bbaf3a5 | 270 | void EndAndWait(); |
okini3939 | 0:2e953bbaf3a5 | 271 | |
okini3939 | 0:2e953bbaf3a5 | 272 | /** |
okini3939 | 0:2e953bbaf3a5 | 273 | * Compare a page of data in main memory to the data in buffer 1 or 2. |
okini3939 | 0:2e953bbaf3a5 | 274 | * @param page Page to test |
okini3939 | 0:2e953bbaf3a5 | 275 | * @param bufferNum Buffer number |
okini3939 | 0:2e953bbaf3a5 | 276 | * @return |
okini3939 | 0:2e953bbaf3a5 | 277 | * - 1 if the page and the buffer contains the same data |
okini3939 | 0:2e953bbaf3a5 | 278 | * - 0 else |
okini3939 | 0:2e953bbaf3a5 | 279 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 280 | **/ |
okini3939 | 0:2e953bbaf3a5 | 281 | int8_t ComparePageToBuffer(uint16_t page, uint8_t bufferNum); |
okini3939 | 0:2e953bbaf3a5 | 282 | |
okini3939 | 0:2e953bbaf3a5 | 283 | /** |
okini3939 | 0:2e953bbaf3a5 | 284 | * Put the device into the lowest power consumption mode. |
okini3939 | 0:2e953bbaf3a5 | 285 | * Once the device has entered the Deep Power-down mode, all |
okini3939 | 0:2e953bbaf3a5 | 286 | * instructions are ignored except the Resume from Deep |
okini3939 | 0:2e953bbaf3a5 | 287 | * Power-down command. |
okini3939 | 0:2e953bbaf3a5 | 288 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 289 | **/ |
okini3939 | 0:2e953bbaf3a5 | 290 | void DeepPowerDown(); |
okini3939 | 0:2e953bbaf3a5 | 291 | |
okini3939 | 0:2e953bbaf3a5 | 292 | /** |
okini3939 | 0:2e953bbaf3a5 | 293 | * Takes the device out of Deep Power-down mode. |
okini3939 | 0:2e953bbaf3a5 | 294 | * @warning UNTESTED |
okini3939 | 0:2e953bbaf3a5 | 295 | **/ |
okini3939 | 0:2e953bbaf3a5 | 296 | void ResumeFromDeepPowerDown(); |
okini3939 | 0:2e953bbaf3a5 | 297 | |
okini3939 | 0:2e953bbaf3a5 | 298 | private: |
okini3939 | 0:2e953bbaf3a5 | 299 | /* Nothing atm but who knows... */ |
okini3939 | 0:2e953bbaf3a5 | 300 | |
k4zuki | 2:111e8cf6f263 | 301 | SWSPI _spi; |
okini3939 | 0:2e953bbaf3a5 | 302 | DigitalOut _cs; |
okini3939 | 0:2e953bbaf3a5 | 303 | }; |
okini3939 | 0:2e953bbaf3a5 | 304 | |
okini3939 | 0:2e953bbaf3a5 | 305 | /** |
okini3939 | 0:2e953bbaf3a5 | 306 | * @} |
okini3939 | 0:2e953bbaf3a5 | 307 | **/ |
okini3939 | 0:2e953bbaf3a5 | 308 | |
okini3939 | 0:2e953bbaf3a5 | 309 | #endif /* AT45DB161D_H */ |