Library to use 25LCxxx chips
Fork of 25LCxxx_SPI by
Diff: Ser25lcxxx.h
- Revision:
- 0:238ca4fdef8c
- Child:
- 2:3a3404dbd3eb
diff -r 000000000000 -r 238ca4fdef8c Ser25lcxxx.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Ser25lcxxx.h Wed Jan 26 22:14:41 2011 +0000 @@ -0,0 +1,72 @@ +#ifndef __SER25LCXXX_H__ +#define __SER25LCXXX_H__ + +#include "mbed.h" + +/** +A class to read and write all 25* serial SPI eeprom devices from Microchip (from 25xx010 to 25xx1024). + +One needs to provide total size and page size, since this cannot be read from the devices, +and the page size differs even by constant size (look up the data sheet for your part!) +*/ +class Ser25LCxxx +{ + public: + /** + create the handler class + @param spi the SPI port where the eeprom is connected. Must be set to format(8,3), and with a speed matching the one of your device (up to 5MHz should work) + @param enable the pin name for the port where /CS is connected + @param bytes the size of you eeprom in bytes (NOT bits, eg. a 25LC010 has 128 bytes) + @param pagesize the size of a single page, to provide overruns + */ + Ser25LCxxx(SPI *spi, PinName enable, int bytes, int pagesize); + + /** + destroys the handler, and frees the /CS pin + */ + ~Ser25LCxxx(); + + /** + read a part of the eeproms memory. The buffer will be allocated here, and must be freed by the user + @param startAdr the adress where to start reading. Doesn't need to match a page boundary + @param len the number of bytes to read (must not exceed the end of memory) + @return NULL if the adresses are out of range, the pointer to the data otherwise + */ + char* read(unsigned int startAdr, unsigned int len); + + /** + writes the give buffer into the memory. This function handles dividing the write into + pages, and waites until the phyiscal write has finished + @param startAdr the adress where to start writing. Doesn't need to match a page boundary + @param len the number of bytes to read (must not exceed the end of memory) + @return false if the adresses are out of range + */ + bool write(unsigned int startAdr, unsigned int len, const char* data); + + /** + fills the given page with 0xFF + @param pageNum the page number to clear + @return if the pageNum is out of range + */ + bool clearPage(unsigned int pageNum); + + /** + fills the while eeprom with 0xFF + */ + void clearMem(); + private: + bool writePage(unsigned int startAdr, unsigned int len, const char* data); + int readStatus(); + void waitForWrite(); + void enableWrite(); + + + SPI* _spi; + DigitalOut* _enable; + int _size,_pageSize; + +}; + + + +#endif