SPI Flash block device
SPIFBlockDevice class hierarchy
This API is a block device for NOR-based SPI flash devices that support SFDP.
Note: Multiple protocols exist for SPI flash devices. This driver is for the SFDP SPI flash protocol. If your device uses the DataFlash protocol, you need the DataflashBlockDevice
NOR-based SPI flash supports byte-sized read and writes, with an erase size of around 4 kbytes. An erase sets a block to all 1s, with successive writes clearing set bits.
To configure this class, please see our BlockDevice configuration documentation.
SPIFBlockDevice class reference
| Public Member Functions | |
| SPIFBlockDevice (PinName mosi=NC, PinName miso=NC, PinName sclk=NC, PinName csel=NC, int freq=40000000) | |
| Creates a SPIFBlockDevice on a SPI bus specified by pins. More... | |
| virtual int | init () |
| Initialize a block device. More... | |
| virtual int | deinit () |
| Deinitialize a block device. More... | |
| ~SPIFBlockDevice () | |
| Desctruct SPIFBlockDevice. More... | |
| virtual int | read (void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size) |
| Read blocks from a block device. More... | |
| virtual int | program (const void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size) |
| Program blocks to a block device. More... | |
| virtual int | erase (mbed::bd_addr_t addr, mbed::bd_size_t size) |
| Erase blocks on a block device. More... | |
| virtual mbed::bd_size_t | get_read_size () const |
| Get the size of a readable block. More... | |
| virtual mbed::bd_size_t | get_program_size () const |
| Get the size of a programable block. More... | |
| virtual mbed::bd_size_t | get_erase_size () const |
| Get the size of an erasable block. More... | |
| virtual mbed::bd_size_t | get_erase_size (mbed::bd_addr_t addr) const |
| Get the size of minimal erasable sector size of given address. More... | |
| virtual int | get_erase_value () const |
| Get the value of storage byte after it was erased. More... | |
| virtual mbed::bd_size_t | size () const |
| Get the total size of the underlying device. More... | |
| virtual const char * | get_type () const |
| Get the BlockDevice class type. More... | |
| virtual int | sync () |
| Ensure data on storage is in sync with the driver. More... | |
| virtual int | trim (bd_addr_t addr, bd_size_t size) |
| Mark blocks as no longer in use. More... | |
| virtual bool | is_valid_read (bd_addr_t addr, bd_size_t size) const |
| Convenience function for checking block read validity. More... | |
| virtual bool | is_valid_program (bd_addr_t addr, bd_size_t size) const |
| Convenience function for checking block program validity. More... | |
| virtual bool | is_valid_erase (bd_addr_t addr, bd_size_t size) const |
| Convenience function for checking block erase validity. More... | |
| Static Public Member Functions | |
| static BlockDevice * | get_default_instance () |
| Return the default block device. More... | |
SPIFBlockDevice example
#include "mbed.h"
#include "SPIFBlockDevice.h"
// Create flash device on SPI bus with PTE5 as chip select
SPIFBlockDevice spif(PTE2, PTE4, PTE1, PTE5);
int main()
{
printf("spif test\n");
// Initialize the SPI flash device, and print the memory layout
spif.init();
printf("spif size: %llu\n", spif.size());
printf("spif read size: %llu\n", spif.get_read_size());
printf("spif program size: %llu\n", spif.get_program_size());
printf("spif erase size: %llu\n", spif.get_erase_size());
// Write "Hello World!" to the first block
char *buffer = (char *)malloc(spif.get_erase_size());
sprintf(buffer, "Hello World!\n");
spif.erase(0, spif.get_erase_size());
spif.program(buffer, 0, spif.get_erase_size());
// Read back what was stored
spif.read(buffer, 0, spif.get_erase_size());
printf("%s", buffer);
// Deinitialize the device
spif.deinit();
}