SPI SRAM 23X library

sram23x.h

Committer:
bborredon
Date:
2012-07-14
Revision:
0:bdd299c0e8e6

File content as of revision 0:bdd299c0e8e6:

#ifndef __SRAM23X__H_
#define __SRAM23X__H_

// Includes
#include <string> 

#include "mbed.h"

// Example
/*
*/

// Defines
#define SRAM23X_READ        0x03
#define SRAM23X_WRITE       0x02
#define SRAM23X_RDSR        0x05
#define SRAM23X_WRSR        0x01
#define SRAM23X_SEQ         0x40

#define SRAM23X_NoError     0x00
#define SRAM23X_OutOfRange  0x01
#define SRAM23X_CsError     0x02
#define SRAM23X_MallocError 0x03

#define SRAM23X_MaxError       4

static std::string _ErrorMessageSRAM23X[SRAM23X_MaxError] = {
                                                          "",
                                                          "Data address out of range"
                                                          "Chip select error",
                                                          "Memory allocation error"       
                                                        };

// Class
class SRAM23X {
public:
    enum TypeSram {S23X640=8192,S23X256=32768} Type;
    
    /*
     * Constructor, initialize the sram on spi interface.
     * @param mosi : mosi spi pin (PinName)
     * @param miso : miso spi pin (PinName)
     * @param sclk : sclk spi pin (PinName)
     * @param cs   : chip select pin (PinName)
     * @param type : sram type (TypeSram) 
     * @return none
    */
    SRAM23X(PinName mosi, PinName miso, PinName sclk, PinName cs, TypeSram type);
    
   /*
     * Sequential read bytes
     * @param address : start address (uint16_t)
     * @param data : bytes array to read (int8_t *)
     * @param size : number of bytes to read (uint16_t)
     * @return none
    */
    void read(uint16_t address, int8_t *data, uint16_t size);
    
    /*
     * Sequential read anything
     * @param address : start address (uint16_t)
     * @param data : data array to read (void *)
     * @param size : number of bytes to read (uint16_t)
     * @return none
    */
    void read(uint16_t address, void *data, uint16_t size);
    
    /*
     * Sequential read int16
     * @param address : start address (uint16_t)
     * @param data : short array to read (int16_t *)
     * @param size : number of bytes to read (uint16_t)
     * @return none
    */
    void read(uint16_t address, int16_t *data, uint16_t size);
    
    /*
     * Sequential read int32
     * @param address : start address (uint16_t)
     * @param data : int array to read (int32_t *)
     * @param size : number of bytes to read (uint16_t)
     * @return none
    */
    void read(uint16_t address, int32_t *data, uint16_t size);
    
    /*
     * Sequential read float
     * @param address : start address (uint16_t)
     * @param data : float array to read (float *)
     * @param size : number of bytes to read (uint16_t)
     * @return none
    */
    void read(uint16_t address, float *data, uint16_t size);
    
    /*
     * Sequential write bytes
     * @param address : start address(uint16_t)
     * @param data : bytes array to write (int8_t *)
     * @param size : number of bytes to write (uint16_t)
     * @return none
    */
    void write(uint16_t address, int8_t *data, uint16_t size);
    
    /*
     * Sequential write anything
     * @param address : start address (uint16_t)
     * @param data : data array to write (void *)
     * @param size : number of bytes to write (uint16_t)
     * @return none
    */
    void write(uint16_t address, void *data, uint16_t size);
    
    /*
     * Sequential write int16
     * @param address : start address (uint16_t)
     * @param data : short array to write  (int8_t *)
     * @param size : number of bytes to write (uint16_t)
     * @return none
    */
    void write(uint16_t address, int16_t *data, uint16_t size);
    
    /*
     * Sequential write int32
     * @param address : address to write (uint16_t)
     * @param data : int array to write (int32_t *)
     * @param size : number of bytes to write (uint16_t)
     * @return none
    */
    void write(uint16_t address, int32_t *data, uint16_t size);
    
    /*
     * Sequential write float
     * @param address : address to write (uint16_t)
     * @param data : float array to write (float *)
     * @param size : number of bytes to write (uint16_t)
     * @return none
    */
    void write(uint16_t address, float *data, uint16_t size);
    
    /*
     * Get sram size in bytes
     * @param : none
     * @return size in bytes (uint16_t)
    */
    uint16_t getSize(void);
    
    /*
     * Select chip
     * @param : none
     * @return none
    */
    void select(void);
    
    /*
     * Deselect chip
     * @param : none
     * @return none
    */
    void deselect(void);
    
    /*
     * Read status register
     * @param : none
     * @return status register  value (uint8_t)
    */
    uint8_t readStatus(void);
    
    /*
     * Write status register
     * @param : status value (uint8_t)
     * @return none
    */
    void writeStatus(uint8_t status);
    
    /*
     * Get current error message
     * @param  : none
     * @return current error message(std::string)
    */
    std::string getErrorMessage(void)
    { 
      return(_ErrorMessageSRAM23X[_errnum]);
    }
    
    /*
     * Get the current error number (SRAM23X_NoError if no error)
     * @param  : none
     * @return current error number (uint8_t)
    */
    uint8_t getError(void);
    
//---------- local variables ----------
private:
    SPI _spi;             // Local spi communication interface instance
    DigitalOut *_cs;      // Chip select
    uint8_t _errnum;      // Error number
    TypeSram _type;       // SRAM type
    uint16_t _size;       // Size in bytes
    bool checkAddress(uint16_t address); // Check address range
//-------------------------------------

    /*
     * Initialization
     * @param address : address to write (uint16_t)
     * @param size : size to write in bytes (uint16_t)
     * @param mode : read or write (uint8_t)
     * @return error code, 0 if no error
    */
    uint8_t init(uint16_t address, uint16_t size, uint8_t mode);
};
#endif