SPI SRAM 23X library
sram23x.h@0:bdd299c0e8e6, 2012-07-14 (annotated)
- Committer:
- bborredon
- Date:
- Sat Jul 14 08:23:30 2012 +0000
- Revision:
- 0:bdd299c0e8e6
[mbed] converted /SramSpi/sram23x
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bborredon | 0:bdd299c0e8e6 | 1 | #ifndef __SRAM23X__H_ |
bborredon | 0:bdd299c0e8e6 | 2 | #define __SRAM23X__H_ |
bborredon | 0:bdd299c0e8e6 | 3 | |
bborredon | 0:bdd299c0e8e6 | 4 | // Includes |
bborredon | 0:bdd299c0e8e6 | 5 | #include <string> |
bborredon | 0:bdd299c0e8e6 | 6 | |
bborredon | 0:bdd299c0e8e6 | 7 | #include "mbed.h" |
bborredon | 0:bdd299c0e8e6 | 8 | |
bborredon | 0:bdd299c0e8e6 | 9 | // Example |
bborredon | 0:bdd299c0e8e6 | 10 | /* |
bborredon | 0:bdd299c0e8e6 | 11 | */ |
bborredon | 0:bdd299c0e8e6 | 12 | |
bborredon | 0:bdd299c0e8e6 | 13 | // Defines |
bborredon | 0:bdd299c0e8e6 | 14 | #define SRAM23X_READ 0x03 |
bborredon | 0:bdd299c0e8e6 | 15 | #define SRAM23X_WRITE 0x02 |
bborredon | 0:bdd299c0e8e6 | 16 | #define SRAM23X_RDSR 0x05 |
bborredon | 0:bdd299c0e8e6 | 17 | #define SRAM23X_WRSR 0x01 |
bborredon | 0:bdd299c0e8e6 | 18 | #define SRAM23X_SEQ 0x40 |
bborredon | 0:bdd299c0e8e6 | 19 | |
bborredon | 0:bdd299c0e8e6 | 20 | #define SRAM23X_NoError 0x00 |
bborredon | 0:bdd299c0e8e6 | 21 | #define SRAM23X_OutOfRange 0x01 |
bborredon | 0:bdd299c0e8e6 | 22 | #define SRAM23X_CsError 0x02 |
bborredon | 0:bdd299c0e8e6 | 23 | #define SRAM23X_MallocError 0x03 |
bborredon | 0:bdd299c0e8e6 | 24 | |
bborredon | 0:bdd299c0e8e6 | 25 | #define SRAM23X_MaxError 4 |
bborredon | 0:bdd299c0e8e6 | 26 | |
bborredon | 0:bdd299c0e8e6 | 27 | static std::string _ErrorMessageSRAM23X[SRAM23X_MaxError] = { |
bborredon | 0:bdd299c0e8e6 | 28 | "", |
bborredon | 0:bdd299c0e8e6 | 29 | "Data address out of range" |
bborredon | 0:bdd299c0e8e6 | 30 | "Chip select error", |
bborredon | 0:bdd299c0e8e6 | 31 | "Memory allocation error" |
bborredon | 0:bdd299c0e8e6 | 32 | }; |
bborredon | 0:bdd299c0e8e6 | 33 | |
bborredon | 0:bdd299c0e8e6 | 34 | // Class |
bborredon | 0:bdd299c0e8e6 | 35 | class SRAM23X { |
bborredon | 0:bdd299c0e8e6 | 36 | public: |
bborredon | 0:bdd299c0e8e6 | 37 | enum TypeSram {S23X640=8192,S23X256=32768} Type; |
bborredon | 0:bdd299c0e8e6 | 38 | |
bborredon | 0:bdd299c0e8e6 | 39 | /* |
bborredon | 0:bdd299c0e8e6 | 40 | * Constructor, initialize the sram on spi interface. |
bborredon | 0:bdd299c0e8e6 | 41 | * @param mosi : mosi spi pin (PinName) |
bborredon | 0:bdd299c0e8e6 | 42 | * @param miso : miso spi pin (PinName) |
bborredon | 0:bdd299c0e8e6 | 43 | * @param sclk : sclk spi pin (PinName) |
bborredon | 0:bdd299c0e8e6 | 44 | * @param cs : chip select pin (PinName) |
bborredon | 0:bdd299c0e8e6 | 45 | * @param type : sram type (TypeSram) |
bborredon | 0:bdd299c0e8e6 | 46 | * @return none |
bborredon | 0:bdd299c0e8e6 | 47 | */ |
bborredon | 0:bdd299c0e8e6 | 48 | SRAM23X(PinName mosi, PinName miso, PinName sclk, PinName cs, TypeSram type); |
bborredon | 0:bdd299c0e8e6 | 49 | |
bborredon | 0:bdd299c0e8e6 | 50 | /* |
bborredon | 0:bdd299c0e8e6 | 51 | * Sequential read bytes |
bborredon | 0:bdd299c0e8e6 | 52 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 53 | * @param data : bytes array to read (int8_t *) |
bborredon | 0:bdd299c0e8e6 | 54 | * @param size : number of bytes to read (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 55 | * @return none |
bborredon | 0:bdd299c0e8e6 | 56 | */ |
bborredon | 0:bdd299c0e8e6 | 57 | void read(uint16_t address, int8_t *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 58 | |
bborredon | 0:bdd299c0e8e6 | 59 | /* |
bborredon | 0:bdd299c0e8e6 | 60 | * Sequential read anything |
bborredon | 0:bdd299c0e8e6 | 61 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 62 | * @param data : data array to read (void *) |
bborredon | 0:bdd299c0e8e6 | 63 | * @param size : number of bytes to read (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 64 | * @return none |
bborredon | 0:bdd299c0e8e6 | 65 | */ |
bborredon | 0:bdd299c0e8e6 | 66 | void read(uint16_t address, void *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 67 | |
bborredon | 0:bdd299c0e8e6 | 68 | /* |
bborredon | 0:bdd299c0e8e6 | 69 | * Sequential read int16 |
bborredon | 0:bdd299c0e8e6 | 70 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 71 | * @param data : short array to read (int16_t *) |
bborredon | 0:bdd299c0e8e6 | 72 | * @param size : number of bytes to read (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 73 | * @return none |
bborredon | 0:bdd299c0e8e6 | 74 | */ |
bborredon | 0:bdd299c0e8e6 | 75 | void read(uint16_t address, int16_t *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 76 | |
bborredon | 0:bdd299c0e8e6 | 77 | /* |
bborredon | 0:bdd299c0e8e6 | 78 | * Sequential read int32 |
bborredon | 0:bdd299c0e8e6 | 79 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 80 | * @param data : int array to read (int32_t *) |
bborredon | 0:bdd299c0e8e6 | 81 | * @param size : number of bytes to read (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 82 | * @return none |
bborredon | 0:bdd299c0e8e6 | 83 | */ |
bborredon | 0:bdd299c0e8e6 | 84 | void read(uint16_t address, int32_t *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 85 | |
bborredon | 0:bdd299c0e8e6 | 86 | /* |
bborredon | 0:bdd299c0e8e6 | 87 | * Sequential read float |
bborredon | 0:bdd299c0e8e6 | 88 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 89 | * @param data : float array to read (float *) |
bborredon | 0:bdd299c0e8e6 | 90 | * @param size : number of bytes to read (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 91 | * @return none |
bborredon | 0:bdd299c0e8e6 | 92 | */ |
bborredon | 0:bdd299c0e8e6 | 93 | void read(uint16_t address, float *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 94 | |
bborredon | 0:bdd299c0e8e6 | 95 | /* |
bborredon | 0:bdd299c0e8e6 | 96 | * Sequential write bytes |
bborredon | 0:bdd299c0e8e6 | 97 | * @param address : start address(uint16_t) |
bborredon | 0:bdd299c0e8e6 | 98 | * @param data : bytes array to write (int8_t *) |
bborredon | 0:bdd299c0e8e6 | 99 | * @param size : number of bytes to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 100 | * @return none |
bborredon | 0:bdd299c0e8e6 | 101 | */ |
bborredon | 0:bdd299c0e8e6 | 102 | void write(uint16_t address, int8_t *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 103 | |
bborredon | 0:bdd299c0e8e6 | 104 | /* |
bborredon | 0:bdd299c0e8e6 | 105 | * Sequential write anything |
bborredon | 0:bdd299c0e8e6 | 106 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 107 | * @param data : data array to write (void *) |
bborredon | 0:bdd299c0e8e6 | 108 | * @param size : number of bytes to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 109 | * @return none |
bborredon | 0:bdd299c0e8e6 | 110 | */ |
bborredon | 0:bdd299c0e8e6 | 111 | void write(uint16_t address, void *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 112 | |
bborredon | 0:bdd299c0e8e6 | 113 | /* |
bborredon | 0:bdd299c0e8e6 | 114 | * Sequential write int16 |
bborredon | 0:bdd299c0e8e6 | 115 | * @param address : start address (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 116 | * @param data : short array to write (int8_t *) |
bborredon | 0:bdd299c0e8e6 | 117 | * @param size : number of bytes to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 118 | * @return none |
bborredon | 0:bdd299c0e8e6 | 119 | */ |
bborredon | 0:bdd299c0e8e6 | 120 | void write(uint16_t address, int16_t *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 121 | |
bborredon | 0:bdd299c0e8e6 | 122 | /* |
bborredon | 0:bdd299c0e8e6 | 123 | * Sequential write int32 |
bborredon | 0:bdd299c0e8e6 | 124 | * @param address : address to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 125 | * @param data : int array to write (int32_t *) |
bborredon | 0:bdd299c0e8e6 | 126 | * @param size : number of bytes to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 127 | * @return none |
bborredon | 0:bdd299c0e8e6 | 128 | */ |
bborredon | 0:bdd299c0e8e6 | 129 | void write(uint16_t address, int32_t *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 130 | |
bborredon | 0:bdd299c0e8e6 | 131 | /* |
bborredon | 0:bdd299c0e8e6 | 132 | * Sequential write float |
bborredon | 0:bdd299c0e8e6 | 133 | * @param address : address to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 134 | * @param data : float array to write (float *) |
bborredon | 0:bdd299c0e8e6 | 135 | * @param size : number of bytes to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 136 | * @return none |
bborredon | 0:bdd299c0e8e6 | 137 | */ |
bborredon | 0:bdd299c0e8e6 | 138 | void write(uint16_t address, float *data, uint16_t size); |
bborredon | 0:bdd299c0e8e6 | 139 | |
bborredon | 0:bdd299c0e8e6 | 140 | /* |
bborredon | 0:bdd299c0e8e6 | 141 | * Get sram size in bytes |
bborredon | 0:bdd299c0e8e6 | 142 | * @param : none |
bborredon | 0:bdd299c0e8e6 | 143 | * @return size in bytes (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 144 | */ |
bborredon | 0:bdd299c0e8e6 | 145 | uint16_t getSize(void); |
bborredon | 0:bdd299c0e8e6 | 146 | |
bborredon | 0:bdd299c0e8e6 | 147 | /* |
bborredon | 0:bdd299c0e8e6 | 148 | * Select chip |
bborredon | 0:bdd299c0e8e6 | 149 | * @param : none |
bborredon | 0:bdd299c0e8e6 | 150 | * @return none |
bborredon | 0:bdd299c0e8e6 | 151 | */ |
bborredon | 0:bdd299c0e8e6 | 152 | void select(void); |
bborredon | 0:bdd299c0e8e6 | 153 | |
bborredon | 0:bdd299c0e8e6 | 154 | /* |
bborredon | 0:bdd299c0e8e6 | 155 | * Deselect chip |
bborredon | 0:bdd299c0e8e6 | 156 | * @param : none |
bborredon | 0:bdd299c0e8e6 | 157 | * @return none |
bborredon | 0:bdd299c0e8e6 | 158 | */ |
bborredon | 0:bdd299c0e8e6 | 159 | void deselect(void); |
bborredon | 0:bdd299c0e8e6 | 160 | |
bborredon | 0:bdd299c0e8e6 | 161 | /* |
bborredon | 0:bdd299c0e8e6 | 162 | * Read status register |
bborredon | 0:bdd299c0e8e6 | 163 | * @param : none |
bborredon | 0:bdd299c0e8e6 | 164 | * @return status register value (uint8_t) |
bborredon | 0:bdd299c0e8e6 | 165 | */ |
bborredon | 0:bdd299c0e8e6 | 166 | uint8_t readStatus(void); |
bborredon | 0:bdd299c0e8e6 | 167 | |
bborredon | 0:bdd299c0e8e6 | 168 | /* |
bborredon | 0:bdd299c0e8e6 | 169 | * Write status register |
bborredon | 0:bdd299c0e8e6 | 170 | * @param : status value (uint8_t) |
bborredon | 0:bdd299c0e8e6 | 171 | * @return none |
bborredon | 0:bdd299c0e8e6 | 172 | */ |
bborredon | 0:bdd299c0e8e6 | 173 | void writeStatus(uint8_t status); |
bborredon | 0:bdd299c0e8e6 | 174 | |
bborredon | 0:bdd299c0e8e6 | 175 | /* |
bborredon | 0:bdd299c0e8e6 | 176 | * Get current error message |
bborredon | 0:bdd299c0e8e6 | 177 | * @param : none |
bborredon | 0:bdd299c0e8e6 | 178 | * @return current error message(std::string) |
bborredon | 0:bdd299c0e8e6 | 179 | */ |
bborredon | 0:bdd299c0e8e6 | 180 | std::string getErrorMessage(void) |
bborredon | 0:bdd299c0e8e6 | 181 | { |
bborredon | 0:bdd299c0e8e6 | 182 | return(_ErrorMessageSRAM23X[_errnum]); |
bborredon | 0:bdd299c0e8e6 | 183 | } |
bborredon | 0:bdd299c0e8e6 | 184 | |
bborredon | 0:bdd299c0e8e6 | 185 | /* |
bborredon | 0:bdd299c0e8e6 | 186 | * Get the current error number (SRAM23X_NoError if no error) |
bborredon | 0:bdd299c0e8e6 | 187 | * @param : none |
bborredon | 0:bdd299c0e8e6 | 188 | * @return current error number (uint8_t) |
bborredon | 0:bdd299c0e8e6 | 189 | */ |
bborredon | 0:bdd299c0e8e6 | 190 | uint8_t getError(void); |
bborredon | 0:bdd299c0e8e6 | 191 | |
bborredon | 0:bdd299c0e8e6 | 192 | //---------- local variables ---------- |
bborredon | 0:bdd299c0e8e6 | 193 | private: |
bborredon | 0:bdd299c0e8e6 | 194 | SPI _spi; // Local spi communication interface instance |
bborredon | 0:bdd299c0e8e6 | 195 | DigitalOut *_cs; // Chip select |
bborredon | 0:bdd299c0e8e6 | 196 | uint8_t _errnum; // Error number |
bborredon | 0:bdd299c0e8e6 | 197 | TypeSram _type; // SRAM type |
bborredon | 0:bdd299c0e8e6 | 198 | uint16_t _size; // Size in bytes |
bborredon | 0:bdd299c0e8e6 | 199 | bool checkAddress(uint16_t address); // Check address range |
bborredon | 0:bdd299c0e8e6 | 200 | //------------------------------------- |
bborredon | 0:bdd299c0e8e6 | 201 | |
bborredon | 0:bdd299c0e8e6 | 202 | /* |
bborredon | 0:bdd299c0e8e6 | 203 | * Initialization |
bborredon | 0:bdd299c0e8e6 | 204 | * @param address : address to write (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 205 | * @param size : size to write in bytes (uint16_t) |
bborredon | 0:bdd299c0e8e6 | 206 | * @param mode : read or write (uint8_t) |
bborredon | 0:bdd299c0e8e6 | 207 | * @return error code, 0 if no error |
bborredon | 0:bdd299c0e8e6 | 208 | */ |
bborredon | 0:bdd299c0e8e6 | 209 | uint8_t init(uint16_t address, uint16_t size, uint8_t mode); |
bborredon | 0:bdd299c0e8e6 | 210 | }; |
bborredon | 0:bdd299c0e8e6 | 211 | #endif |