The "enable write status" command has to be sent before "write status" command to unlock memory area.
Fork of SST25VF by
Diff: SST25VF.h
- Revision:
- 0:1633dfa4b768
diff -r 000000000000 -r 1633dfa4b768 SST25VF.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SST25VF.h Sun Jan 15 13:51:16 2012 +0000 @@ -0,0 +1,88 @@ +/** SST25VF - drive the Microchip SST25VF Serial Flash using SPI +* +* Assumes spi mode is default (8,0). +* +* You can clock the SST25VF at up to >20MHz, so it supports the mbed's maximum SPI frequency of 12MHz. +*/ + +#include "mbed.h" + +/* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +* Caution: Do not write to adresses where data != 0xFF +* Data in selected adress range MUST be 0xFF (See datasheet) +* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +* ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +*/ + +#ifndef SST25VF_H +#define SST25VF_H + +#define SPI_FREQ 12000000 // 12Mhz is mbed max (one eight of periph. clock) + +#define waitShort() wait_us(10) +#define waitErase() wait_ms(50) + +// command codes for SST25VF +#define WRITE_STATUS 0x01 // called WRSR in datasheet +#define WRITE 0x02 // Byte-Program +#define READ 0x03 +#define WRDI 0x04 +#define READ_STATUS 0x05 // called RDSR +#define WREN 0x06 +//#define HSREAD 0x0B // High-Speed-Read +#define EWSR 0x50 // Enable-Write-Status-Register +#define CHIP_ERASE 0x60 +#define AAIWRITE 0xAD // word based write + +class SST25VF { +public: + /** Create an interface + * + * + * @param spi An SPI object + * @param ncs Not chip select pin - any free Digital pin will do + */ + SST25VF(SPI& spi, PinName ncs); + /** read a byte from SRAM + * @param address The address to read from + * @return the character at that address + */ + char read(long int address); + + /** read multiple bytes from SRAM into a buffer + * @param address The SRAM address to read from + * @param buffer The buffer to read into (must be big enough!) + * @param count The number of bytes to read + */ + void read(long int address, char * buffer, int count); + /** write a byte to SRAM + * @param address The address SRAM to write to + * @param byte The byte to write there + */ + void write(long int address, char byte); + /** write multiple bytes to SRAM from a buffer + * @param address The SRAM address write to + * @param buffer The buffer to write from + * @param count The number of bytes to write + */ + void write(long int address, char * buffer, int count); + + + void chipErase(); + char readStatus(); + +private: + SPI& _spi; + DigitalOut _ncs; + + void writeStatus(char status); + void prepareCommand(char command, long int address); + void select(); + void deselect(); + void wren(); + void unlock(); + void wrdi(); +}; + +#endif