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); }
Diff: FRAMSPI.cpp
- Revision:
- 0:27d10d94f7d9
diff -r 000000000000 -r 27d10d94f7d9 FRAMSPI.cpp --- /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