Encapsulates access to the Cypress CY14B101P nvSRAM module.

CY14B101P.h

Committer:
jeffcraighead
Date:
2011-07-11
Revision:
0:eec14545c442
Child:
1:0f4063d68380

File content as of revision 0:eec14545c442:

/****************************
/ This library encapsulates (or will when completely implemented)
/ all software functions for reading and writing to the Cypress Semiconductor
/ CY14B101P nvSRAM module.
/
/ As of July 11, 2011 RTC functions are not implemented.
/
/ Author: Dr. Jeffrey Craighead
*****************************/


#ifndef CY14B101P
#define CY14B101P

/*****
* Includes
*****/
#include "mbed.h"


/*****
* Status Register Instructions
*****/
#define WREN 0x06 //Set Write Enable latch
#define WRDI 0x04 //Reset Write Enable latch
#define RDSR 0x05 //Read Status Register
#define WRSR 0x01 //Write Status Register

/*****
* SRAM Instructions
*****/
#define READ 0x03 //Read data from memory array
#define WRITE 0x02 //Write data to memory array

/*****
* RTC Instructions
*****/
#define WRTC 0x12 //Write Real Time Clock registers
#define RDRTC 0x13 //Read Real Time Clock registers

/*****
* Special NV Instructions
*****/
#define STORE 0x3C //Software Store (to NV memory)
#define RECALL 0x60 //Software Recall (from NV memory)
#define ASENB 0x59 //AutoStore Enable
#define ASDISB 0x19 //AutoStore Disable

/*****
* Other Definitions
*****/
#define MAXADDR 0x1FFF

/*****
* Status Register Bits
*****/
#define READY 0x00 //Read Only, Active Low, bit is 1 while a STORE or RECALL is in progress
#define WENABLE 0x01 //Write enabled bit
#define BP0 0x02; //Block protection bit 0
#define BP1 0x03; //Block protection bit 1
#define WPENABLE 0x07; //Enabled the use of the hardware Write Protect pin.


/*****
* Cypress CY14B101P SPI nvSRAM Memory
*****/

class NVSRAM {

public:

    //Constructor - specify mbed pins for SPI connection to memory and the SPI clock rate
    NVSRAM(PinName mosi, PinName miso, PinName sclk, PinName csel, int spifrequency, int spibits, int spimode);

    //Initialize the nvRAM status register allowing writes across the entire memory range.
    void init();

    //Write bytes to the SRAM
    void writeBytes(char *bytes, unsigned int address, int length);

    //Read bytes from the SRAM
    void readBytes(char *bytes, unsigned int address, int length);

    //Set the Real Time Clock
    void setRTC(int century, int year, int month, int dayofmonth, int dayofweek, int hour, int minute, int second);

    //Read the RTC
    int readRTC();

    //Store the contents of SRAM to the NV memory
    void nvStore();

    //Restore the contents of NV memory to the SRAM
    void nvRecall();

    //Boolean to enable the AutoStore feature of the CY14B101P
    //When enabled, the contents of the SRAM will automatically be stored
    //to the NV memory on poweroff. Requires a capacitor between Vcap and Vss
    void enableAutoStore(bool enable);

    //Write the status register
    void writeStatusRegister(char status);
    
    //Read the status register
    char readStatusRegister();

private:
    int spifreq;
    SPI spi_;
    DigitalOut chipSel_;
};

#endif /* CY14B101P */