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.cpp

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

File content as of revision 0:27d10d94f7d9:

/* FRAMSPI - 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
*/

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

FRAMSPI::FRAMSPI(SPI& spi, PinName ncs) : _spi(spi), _ncs(ncs) {
    deselect();
}

void FRAMSPI::select() {
    _ncs = 0;
}

void FRAMSPI::deselect() {
    _ncs = 1;
}

void FRAMSPI::readID( char *buff ) {
    select();
    _spi.write(READ_SN);
    for( int i=0; i<8; i++ )
        buff[i] = (char) _spi.write(0);
    deselect();
}

void FRAMSPI::readSN( char *buff ) {
    select();
    _spi.write(READ_SN);
    for( int i=0; i<2; i++ )
        buff[i] = (char) _spi.write(0);
    deselect();
}

void FRAMSPI::prepareCommand(char cmd, int addr) {
    if( cmd == WRITE ){
        select();
        _spi.write(WRITE_ENABLED);
        deselect();
    }
    select();
    _spi.write(cmd);
    _spi.write(addr >> 8);
    _spi.write(addr & 0xFF);
}

// write
void FRAMSPI::write(int addr, char byte) {
    prepareCommand(WRITE, addr);
    _spi.write(byte);
    deselect();
}

void FRAMSPI::write(int addr, char *buff, int cnt) {
    prepareCommand(WRITE, addr);
    for (int i = 0; i < cnt; i++) {
        _spi.write(buff[i]);
    }
    deselect();
}

// read
char FRAMSPI::read(int addr) {
    char res;
    prepareCommand(READ, addr);
    res = _spi.write(0);
    deselect();
    return res;
}

void FRAMSPI::read(int addr, char * buff, int cnt) {
    prepareCommand(READ, addr);
    for (int i = 0; i < cnt; i++) {
        buff[i] = _spi.write(0);
    }
    deselect();
}