x

Dependents:   20180621_FT813

Committer:
JackB
Date:
Mon Jul 23 12:23:33 2018 +0000
Revision:
0:0411eff88bac
FRAM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JackB 0:0411eff88bac 1 /* FRAM_SPI - Ramtron FRAM FM24VXX series driver
JackB 0:0411eff88bac 2 * Copyright (c) 2012 Oleg Evsegneev
JackB 0:0411eff88bac 3 * Released under the MIT License: http://mbed.org/license/mit
JackB 0:0411eff88bac 4 *
JackB 0:0411eff88bac 5 * Datasheet http://www.ramtron.com/files/datasheets/FM25V02_ds.pdf
JackB 0:0411eff88bac 6 */
JackB 0:0411eff88bac 7
JackB 0:0411eff88bac 8 #ifndef FRAMSPI_
JackB 0:0411eff88bac 9 #define FRAMSPI_
JackB 0:0411eff88bac 10
JackB 0:0411eff88bac 11 #include "mbed.h"
JackB 0:0411eff88bac 12
JackB 0:0411eff88bac 13 // commands
JackB 0:0411eff88bac 14 #define READ 0x03
JackB 0:0411eff88bac 15 #define WRITE 0x02
JackB 0:0411eff88bac 16 #define READ_STATUS 0x05 // RDSR
JackB 0:0411eff88bac 17 #define WRITE_ENABLED 0x06 // WREN
JackB 0:0411eff88bac 18 #define WRITE_STATUS 0x01 // WRSR
JackB 0:0411eff88bac 19 #define READ_ID 0x9F // RDID
JackB 0:0411eff88bac 20 #define READ_SN 0xC3 // RSN
JackB 0:0411eff88bac 21
JackB 0:0411eff88bac 22 /** An interface for the Ramtron FM25VXX FRAM over SPI
JackB 0:0411eff88bac 23 *
JackB 0:0411eff88bac 24 *
JackB 0:0411eff88bac 25 *
JackB 0:0411eff88bac 26 * @code
JackB 0:0411eff88bac 27 * #include "mbed.h"
JackB 0:0411eff88bac 28 * #include "FRAMSPI.h"
JackB 0:0411eff88bac 29 *
JackB 0:0411eff88bac 30 * SPI spi(p5,p6,p7);
JackB 0:0411eff88bac 31 * FRAMSPI fram(spi,p8);
JackB 0:0411eff88bac 32 * Serial pc(USBTX, USBRX);
JackB 0:0411eff88bac 33 *
JackB 0:0411eff88bac 34 * int main() {
JackB 0:0411eff88bac 35 * char wdata[] = "Hello world!";
JackB 0:0411eff88bac 36 * char rdata[14];
JackB 0:0411eff88bac 37 *
JackB 0:0411eff88bac 38 * fram.write(0, wdata, 13); // 12 symbols + zero terminator
JackB 0:0411eff88bac 39 * fram.read(0, rdata, 13);
JackB 0:0411eff88bac 40 *
JackB 0:0411eff88bac 41 * pc.printf("data: %s", rdata);
JackB 0:0411eff88bac 42 * }
JackB 0:0411eff88bac 43 * @endcode
JackB 0:0411eff88bac 44 * connections:
JackB 0:0411eff88bac 45 * chip pin 1 to any GPIO. Chip select (!S)
JackB 0:0411eff88bac 46 * chip pin 2 SO to MISO. Write (!W)
JackB 0:0411eff88bac 47 * chip pin 3 to Vout or N/C
JackB 0:0411eff88bac 48 * chip pin 4 to Gnd
JackB 0:0411eff88bac 49 * chip pin 5 SI to MOSI
JackB 0:0411eff88bac 50 * chip pin 6 SCK to sck
JackB 0:0411eff88bac 51 * chip pin 7 to Vout. !Hold
JackB 0:0411eff88bac 52 * chip pin 8 to Vout
JackB 0:0411eff88bac 53 */
JackB 0:0411eff88bac 54
JackB 0:0411eff88bac 55 class FRAMSPI {
JackB 0:0411eff88bac 56
JackB 0:0411eff88bac 57 public:
JackB 0:0411eff88bac 58 /** Create an interface
JackB 0:0411eff88bac 59 *
JackB 0:0411eff88bac 60 * @param spi An SPI object
JackB 0:0411eff88bac 61 * @param ncs Chip select pin
JackB 0:0411eff88bac 62 */
JackB 0:0411eff88bac 63 FRAMSPI(SPI& spi, PinName ncs);
JackB 0:0411eff88bac 64
JackB 0:0411eff88bac 65 /** read chip 8 byte device ID
JackB 0:0411eff88bac 66 */
JackB 0:0411eff88bac 67 void readID(char *buff);
JackB 0:0411eff88bac 68
JackB 0:0411eff88bac 69 /** read chip 2 byte serial number
JackB 0:0411eff88bac 70 */
JackB 0:0411eff88bac 71 void readSN(char *buff);
JackB 0:0411eff88bac 72
JackB 0:0411eff88bac 73 /** read a byte from FRAM
JackB 0:0411eff88bac 74 * @param addr The address to read from
JackB 0:0411eff88bac 75 * @return the byte at that address
JackB 0:0411eff88bac 76 */
JackB 0:0411eff88bac 77 char read(int addr);
JackB 0:0411eff88bac 78
JackB 0:0411eff88bac 79 /** read multiple bytes from FRAM into a buffer
JackB 0:0411eff88bac 80 * @param addr The FRAM address to read from
JackB 0:0411eff88bac 81 * @param buff The buffer to read into (must be big enough!)
JackB 0:0411eff88bac 82 * @param cnt The number of bytes to read
JackB 0:0411eff88bac 83 */
JackB 0:0411eff88bac 84 void read(int addr, char *buff, int cnt);
JackB 0:0411eff88bac 85
JackB 0:0411eff88bac 86 /** write a byte to FRAM
JackB 0:0411eff88bac 87 * @param addr The address SFRAM to write to
JackB 0:0411eff88bac 88 * @param data The byte to write there
JackB 0:0411eff88bac 89 */
JackB 0:0411eff88bac 90 void write(int addr, char data);
JackB 0:0411eff88bac 91
JackB 0:0411eff88bac 92 /** write multiple bytes to FRAM from a buffer
JackB 0:0411eff88bac 93 * @param addr The FRAM address write to
JackB 0:0411eff88bac 94 * @param buff The buffer to write from
JackB 0:0411eff88bac 95 * @param cnt The number of bytes to write
JackB 0:0411eff88bac 96 */
JackB 0:0411eff88bac 97 void write(int addr, char *buff, int cnt);
JackB 0:0411eff88bac 98
JackB 0:0411eff88bac 99 private:
JackB 0:0411eff88bac 100 SPI& _spi;
JackB 0:0411eff88bac 101 DigitalOut _ncs;
JackB 0:0411eff88bac 102 void prepareCommand(char cmd, int addr);
JackB 0:0411eff88bac 103 void select();
JackB 0:0411eff88bac 104 void deselect();
JackB 0:0411eff88bac 105 };
JackB 0:0411eff88bac 106
JackB 0:0411eff88bac 107 #endif