This is a library to talk to STs SPI EEPROM with part number M95xxx.
Revision 0:e4a388ac74a0, committed 2019-08-17
- 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