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);
}
Revision:
0:27d10d94f7d9
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/FRAMSPI.cpp	Sun Oct 21 17:10:30 2012 +0000
@@ -0,0 +1,81 @@
+/* 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();
+}
\ No newline at end of file