Interface library for Ramtron FRAM memory, FM25VXX series.

Code sample:

#include "mbed.h"
#include "FRAMSPI.h"

SPI spi(p5,p6,p7);
FRAMSPI fram(spi,p8);
Serial pc(USBTX, USBRX);

int main() {
    char wdata[] = "Hello world!";
    char rdata[14];

    fram.write(0, wdata, 13); // 12 symbols + zero terminator
    fram.read(0, rdata, 13);

    pc.printf("data: %s", rdata);
}

FRAMSPI.h

Committer:
Decimus
Date:
2012-10-21
Revision:
0:27d10d94f7d9

File content as of revision 0:27d10d94f7d9:

/* FRAM_SPI - Ramtron FRAM FM24VXX series driver
* Copyright (c) 2012 Oleg Evsegneev
* Released under the MIT License: http://mbed.org/license/mit
*
* Datasheet http://www.ramtron.com/files/datasheets/FM25V02_ds.pdf
*/

#ifndef  FRAMSPI_
#define  FRAMSPI_

#include "mbed.h"

// commands
#define READ            0x03
#define WRITE           0x02
#define READ_STATUS     0x05 // RDSR
#define WRITE_ENABLED   0x06 // WREN
#define WRITE_STATUS    0x01 // WRSR
#define READ_ID         0x9F // RDID
#define READ_SN         0xC3 // RSN

/** An interface for the Ramtron FM25VXX FRAM over SPI
*
* 
*
* @code
* #include "mbed.h"
* #include "FRAMSPI.h"
* 
* SPI spi(p5,p6,p7);
* FRAMSPI fram(spi,p8);
* Serial pc(USBTX, USBRX);
* 
* int main() {
*     char wdata[] = "Hello world!";
*     char rdata[14];
* 
*     fram.write(0, wdata, 13); // 12 symbols + zero terminator
*     fram.read(0, rdata, 13);
* 
*     pc.printf("data: %s", rdata);
* }
* @endcode
* connections:
* chip pin 1 to any GPIO. Chip select (!S)
* chip pin 2 SO to MISO. Write (!W)
* chip pin 3 to Vout or N/C
* chip pin 4 to Gnd
* chip pin 5 SI to MOSI
* chip pin 6 SCK to sck 
* chip pin 7 to Vout. !Hold
* chip pin 8 to Vout
*/

class FRAMSPI {

public:
    /** Create an interface
    *
    * @param spi    An SPI object
    * @param ncs    Chip select pin
    */
    FRAMSPI(SPI& spi, PinName ncs);

    /** read chip 8 byte device ID
    */
    void readID(char *buff);

    /** read chip 2 byte serial number
    */
    void readSN(char *buff);

    /** read a byte from FRAM
    * @param addr    The address to read from
    * @return the byte at that address
    */
    char read(int addr);

    /** read multiple bytes from FRAM into a buffer
    * @param addr    The FRAM address to read from
    * @param buff     The buffer to read into (must be big enough!)
    * @param cnt      The number of bytes to read
    */
    void read(int addr, char *buff, int cnt);

    /** write a byte to FRAM
    * @param addr    The address SFRAM to write to
    * @param data       The byte to write there
    */
    void write(int addr, char data);

    /** write multiple bytes to FRAM from a buffer
    * @param addr    The FRAM address write to
    * @param buff     The buffer to write from
    * @param cnt      The number of bytes to write
    */
    void write(int addr, char *buff, int cnt);

private:
    SPI& _spi;
    DigitalOut _ncs;
    void prepareCommand(char cmd, int addr);
    void select();
    void deselect();
};

#endif