This is a library to talk to STs SPI EEPROM with part number M95xxx.

Files at this revision

API Documentation at this revision

Comitter:
JamesStockton
Date:
Sat Aug 17 08:49:04 2019 +0000
Commit message:
This is a library to talk to ST SPI EEPROM with part number M95xxx.

Changed in this revision

SPIMem.cpp Show annotated file Show diff for this revision Revisions of this file
SPIMem.h Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPIMem.cpp	Sat Aug 17 08:49:04 2019 +0000
@@ -0,0 +1,57 @@
+
+
+#include "SPIMem.h"
+
+
+SPIMem::SPIMem(PinName _mosi, PinName _miso, PinName _sckl, PinName _cs) : spi(_mosi, _miso, _sckl), cs(_cs) {
+    cs = 1;
+    
+    spi.frequency(20000000);
+}
+
+void SPIMem::writeEnable(void) {
+    cs = 0;
+    spi.write(WREN);
+    cs = 1;
+}
+
+void SPIMem::writeDisable(void) {
+    cs = 0;
+    spi.write(WRDI);
+    cs = 1;
+}
+
+void SPIMem::write(uint16_t addr, uint8_t val) {
+    writeEnable();
+    
+    cs = 0;
+    spi.write(WRITE);
+    spi.write((uint8_t)(addr >> 8));
+    spi.write((uint8_t)addr);
+    spi.write(val);
+    cs = 1;
+}
+
+int SPIMem::read(uint16_t addr) {
+    cs = 0;
+    spi.write(READ);
+    spi.write((uint8_t)(addr >> 8));
+    spi.write((uint8_t)addr);
+    int data = spi.write(0x00);
+    cs = 1;
+    
+    return data;
+}
+
+void SPIMem::burstWrite(uint16_t addr, char *data, uint16_t len) {
+    writeEnable();
+    
+    cs = 0;
+    spi.write(WRITE);
+    spi.write((uint8_t)(addr >> 8));
+    spi.write((uint8_t)addr);
+    for(int i=0; i<len; i++) {
+        spi.write(data[i]);
+    }
+    cs = 1;
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SPIMem.h	Sat Aug 17 08:49:04 2019 +0000
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+#ifndef SPIMEM_H
+#define SPIMEM_H
+
+#include "mbed.h"
+
+
+
+#define WREN 0x06
+#define WRDI 0x04
+#define RDSR 0x05
+#define WRSR 0x01
+#define READ 0x03
+#define WRITE 0x02
+
+#define PAGE_SIZE 32
+
+
+class SPIMem {
+public:
+
+    SPIMem(PinName _mosi, PinName _miso, PinName _sckl, PinName _cs);
+    
+    void writeEnable(void);
+    void writeDisable(void);
+    
+    void write(uint16_t addr, uint8_t val);
+    int read(uint16_t addr);
+    
+    void burstWrite(uint16_t addr, char *data, uint16_t len);
+    void burstRead(uint16_t addr, char *data, uint16_t len);
+    
+    
+    
+private:
+    SPI spi;
+    DigitalOut cs;
+};
+
+#endif
\ No newline at end of file