SPI SRAM 23X library

Committer:
bborredon
Date:
Sat Jul 14 08:23:30 2012 +0000
Revision:
0:bdd299c0e8e6
[mbed] converted /SramSpi/sram23x

Who changed what in which revision?

UserRevisionLine numberNew 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