Serial flash memory, binary access

Dependents:   S25FL216K_USBFileSystem SPItest S25FL216K_USBFileSystem S25FL216K_FATFileSystem

Committer:
Sissors
Date:
Wed Jul 31 19:17:11 2013 +0000
Revision:
1:2bcefc9e64f8
Parent:
0:3cb41d985302
v1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:3cb41d985302 1 #ifndef S25FL216K_H
Sissors 0:3cb41d985302 2 #define S25FL216K_H
Sissors 0:3cb41d985302 3
Sissors 0:3cb41d985302 4 #include "mbed.h"
Sissors 0:3cb41d985302 5
Sissors 0:3cb41d985302 6 #define S25FL_WRITE_STATUS 0x01
Sissors 0:3cb41d985302 7 #define S25FL216K_WRITE 0x02
Sissors 0:3cb41d985302 8 #define S25FL216K_READ 0x03
Sissors 0:3cb41d985302 9 #define S25FL216K_RDSR 0x05
Sissors 0:3cb41d985302 10 #define S25FL216K_WREN 0x06
Sissors 0:3cb41d985302 11 #define S25FL216K_SECTOR_ERASE 0x20
Sissors 0:3cb41d985302 12 #define S25FL216K_CHIP_ERASE 0xC7
Sissors 0:3cb41d985302 13 #define S25FL216K_BLOCK_ERASE 0xD8
Sissors 0:3cb41d985302 14 #define S25FL216K_JEDEC 0x9F
Sissors 0:3cb41d985302 15
Sissors 1:2bcefc9e64f8 16 /**
Sissors 1:2bcefc9e64f8 17 * Class to write/read from S25FL216K serial flash memory
Sissors 1:2bcefc9e64f8 18 *
Sissors 1:2bcefc9e64f8 19 * This class is used for binary access, for file system access
Sissors 1:2bcefc9e64f8 20 * there is S25FL216K_USBFileSystem.
Sissors 1:2bcefc9e64f8 21 *
Sissors 1:2bcefc9e64f8 22 * No write restrictions are implemented, the memory also should not
Sissors 1:2bcefc9e64f8 23 * have write restrictions enabled, this is factory default.
Sissors 1:2bcefc9e64f8 24 */
Sissors 0:3cb41d985302 25 class S25FL216K {
Sissors 0:3cb41d985302 26 public:
Sissors 1:2bcefc9e64f8 27
Sissors 1:2bcefc9e64f8 28 /** Constructor
Sissors 1:2bcefc9e64f8 29 *
Sissors 1:2bcefc9e64f8 30 * @param mosi - Mosi pin to be used
Sissors 1:2bcefc9e64f8 31 * @param miso - Miso pin to be used
Sissors 1:2bcefc9e64f8 32 * @param sclk - Sclk pin to be used
Sissors 1:2bcefc9e64f8 33 * @param cs - CS pin to be used
Sissors 1:2bcefc9e64f8 34 */
Sissors 0:3cb41d985302 35 S25FL216K(PinName mosi, PinName miso, PinName sclk, PinName cs);
Sissors 0:3cb41d985302 36
Sissors 1:2bcefc9e64f8 37 /** Checks if communication with the device functions
Sissors 0:3cb41d985302 38 *
Sissors 0:3cb41d985302 39 * @return - true upon succesfull communication, false if it failed
Sissors 0:3cb41d985302 40 */
Sissors 0:3cb41d985302 41 bool testConnection( void );
Sissors 0:3cb41d985302 42
Sissors 1:2bcefc9e64f8 43 /** Read a number of memory locations
Sissors 1:2bcefc9e64f8 44 *
Sissors 1:2bcefc9e64f8 45 * Take into account reading will stay within the page (256B) the address is in
Sissors 1:2bcefc9e64f8 46 *
Sissors 1:2bcefc9e64f8 47 * @param address - start address to read from
Sissors 1:2bcefc9e64f8 48 * @param buffer - char array to read the data into
Sissors 1:2bcefc9e64f8 49 * @param length - number of samples to read
Sissors 1:2bcefc9e64f8 50 */
Sissors 0:3cb41d985302 51 void read(int address, char *buffer, int length);
Sissors 0:3cb41d985302 52
Sissors 1:2bcefc9e64f8 53 /** Write a number of memory locations
Sissors 1:2bcefc9e64f8 54 *
Sissors 1:2bcefc9e64f8 55 * Take into account writing will stay within the page (256B) the address is in
Sissors 1:2bcefc9e64f8 56 *
Sissors 1:2bcefc9e64f8 57 * @param address - start address to write to
Sissors 1:2bcefc9e64f8 58 * @param buffer - char array to read the data from
Sissors 1:2bcefc9e64f8 59 * @param length - number of samples to write
Sissors 1:2bcefc9e64f8 60 * @param block - true (default) to block until writing is finished
Sissors 1:2bcefc9e64f8 61 */
Sissors 0:3cb41d985302 62 void write(int address, char *buffer, int length, bool block = true);
Sissors 0:3cb41d985302 63
Sissors 1:2bcefc9e64f8 64 /** Erase a sector (4KB)
Sissors 1:2bcefc9e64f8 65 *
Sissors 1:2bcefc9e64f8 66 * @param address - address in the sector that needs to be erased
Sissors 1:2bcefc9e64f8 67 * @param block - true (default) to block until erasing is finished
Sissors 1:2bcefc9e64f8 68 */
Sissors 0:3cb41d985302 69 void eraseSector(int address, bool block = true);
Sissors 1:2bcefc9e64f8 70
Sissors 1:2bcefc9e64f8 71 /** Erase a block (64KB)
Sissors 1:2bcefc9e64f8 72 *
Sissors 1:2bcefc9e64f8 73 * @param address - address in the block that needs to be erased
Sissors 1:2bcefc9e64f8 74 * @param block - true (default) to block until erasing is finished
Sissors 1:2bcefc9e64f8 75 */
Sissors 0:3cb41d985302 76 void eraseBlock(int address, bool block = true);
Sissors 1:2bcefc9e64f8 77
Sissors 1:2bcefc9e64f8 78 /** Erase the entire chip
Sissors 1:2bcefc9e64f8 79 *
Sissors 1:2bcefc9e64f8 80 * @param block - true (default) to block until erasing is finished
Sissors 1:2bcefc9e64f8 81 */
Sissors 0:3cb41d985302 82 void eraseChip(bool block = true);
Sissors 0:3cb41d985302 83
Sissors 1:2bcefc9e64f8 84 /** Check if writing/erasing is being performed
Sissors 1:2bcefc9e64f8 85 *
Sissors 1:2bcefc9e64f8 86 * @return - true if busy, false if idle
Sissors 1:2bcefc9e64f8 87 */
Sissors 0:3cb41d985302 88 bool isBusy( void );
Sissors 0:3cb41d985302 89
Sissors 0:3cb41d985302 90 private:
Sissors 1:2bcefc9e64f8 91
Sissors 1:2bcefc9e64f8 92 char getStatus( void );
Sissors 1:2bcefc9e64f8 93 void setWriteEnable( void );
Sissors 1:2bcefc9e64f8 94
Sissors 0:3cb41d985302 95 SPI _spi;
Sissors 0:3cb41d985302 96 DigitalOut _cs;
Sissors 0:3cb41d985302 97
Sissors 0:3cb41d985302 98
Sissors 0:3cb41d985302 99
Sissors 0:3cb41d985302 100
Sissors 0:3cb41d985302 101
Sissors 0:3cb41d985302 102 };
Sissors 0:3cb41d985302 103
Sissors 0:3cb41d985302 104
Sissors 0:3cb41d985302 105
Sissors 0:3cb41d985302 106 #endif