17 #ifndef MBED_SPINAND_BLOCK_DEVICE_H 18 #define MBED_SPINAND_BLOCK_DEVICE_H 20 #include "drivers/QSPI.h" 21 #include "blockdevice/BlockDevice.h" 22 #include "platform/Callback.h" 24 #ifndef MBED_CONF_SPINAND_QSPI_IO0 25 #define MBED_CONF_SPINAND_QSPI_IO0 NC 27 #ifndef MBED_CONF_SPINAND_QSPI_IO1 28 #define MBED_CONF_SPINAND_QSPI_IO1 NC 30 #ifndef MBED_CONF_SPINAND_QSPI_IO2 31 #define MBED_CONF_SPINAND_QSPI_IO2 NC 33 #ifndef MBED_CONF_SPINAND_QSPI_IO3 34 #define MBED_CONF_SPINAND_QSPI_IO3 NC 36 #ifndef MBED_CONF_SPINAND_QSPI_SCK 37 #define MBED_CONF_SPINAND_QSPI_SCK NC 39 #ifndef MBED_CONF_SPINAND_QSPI_CSN 40 #define MBED_CONF_SPINAND_QSPI_CSN NC 42 #ifndef MBED_CONF_SPINAND_QSPI_POLARITY_MODE 43 #define MBED_CONF_SPINAND_QSPI_POLARITY_MODE 0 45 #ifndef MBED_CONF_SPINAND_QSPI_FREQ 46 #define MBED_CONF_SPINAND_QSPI_FREQ 40000000 53 enum spinand_bd_error {
54 SPINAND_BD_ERROR_OK = 0,
55 SPINAND_BD_ERROR_DEVICE_ERROR = BD_ERROR_DEVICE_ERROR,
56 SPINAND_BD_ERROR_PARSING_FAILED = -4002,
57 SPINAND_BD_ERROR_READY_FAILED = -4003,
58 SPINAND_BD_ERROR_WREN_FAILED = -4004,
59 SPINAND_BD_ERROR_INVALID_ERASE_PARAMS = -4005,
60 SPINAND_BD_ERROR_DEVICE_NOT_UNIQUE = -4006,
61 SPINAND_BD_ERROR_DEVICE_MAX_EXCEED = -4007
68 enum spinand_polarity_mode {
69 SPINAND_POLARITY_MODE_0 = 0,
70 SPINAND_POLARITY_MODE_1
73 #define SPINAND_MAX_ACTIVE_FLASH_DEVICES 10 128 PinName io1 = MBED_CONF_SPINAND_QSPI_IO1,
129 PinName io2 = MBED_CONF_SPINAND_QSPI_IO2,
130 PinName io3 = MBED_CONF_SPINAND_QSPI_IO3,
131 PinName sclk = MBED_CONF_SPINAND_QSPI_SCK,
132 PinName csel = MBED_CONF_SPINAND_QSPI_CSN,
133 int clock_mode = MBED_CONF_SPINAND_QSPI_POLARITY_MODE,
134 int freq = MBED_CONF_SPINAND_QSPI_FREQ);
166 virtual int read(
void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t
size);
180 virtual int program(
const void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size);
194 virtual int erase(mbed::bd_addr_t addr, mbed::bd_size_t size);
232 virtual mbed::bd_size_t
size()
const;
238 virtual const char *
get_type()
const;
246 int add_new_csel_instance(PinName csel);
249 int remove_csel_instance(PinName csel);
256 mbed::bd_addr_t addr, mbed::bd_size_t *size);
266 mbed::bd_size_t tx_length,
const char *rx_buffer, mbed::bd_size_t rx_length);
276 int _set_quad_enable();
279 int _clear_block_protection();
282 int _set_write_enable();
285 bool _is_mem_ready();
296 static int _number_of_active_spinand_flash_csel;
297 static PinName *_active_spinand_flash_csel_arr;
299 int _unique_device_status;
318 uint8_t _dummy_cycles;
321 uint32_t _init_ref_count;
322 bool _is_initialized;
virtual int get_erase_value() const
Get the value of storage byte after it was erased.
~SPINANDBlockDevice()
Destruct SPINANDBlockDevie.
virtual mbed::bd_size_t size() const
Get the total size of the underlying device.
virtual const char * get_type() const
Get the BlockDevice class type.
virtual int erase(mbed::bd_addr_t addr, mbed::bd_size_t size)
Erase blocks on a block device.
A hardware device capable of writing and reading blocks.
virtual mbed::bd_size_t get_erase_size() const
Get the size of a eraseable block.
BlockDevice for SPI NAND flash devices over QSPI bus.
SPINANDBlockDevice(PinName io0=NC, PinName io1=NC, PinName io2=NC, PinName io3=NC, PinName sclk=NC, PinName csel=NC, int clock_mode=0, int freq=40000000)
Create SPINANDBlockDevice - An SPI NAND Flash Block Device over QSPI bus.
virtual int init()
Initialize a block device.
virtual int deinit()
Deinitialize a block device.
virtual mbed::bd_size_t get_read_size() const
Get the size of a readable block.
virtual int read(void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size)
Read blocks from a block device.
enum qspi_address_size qspi_address_size_t
Address size in bits.
int qspi_inst_t
Type representing a QSPI instruction.
uint8_t qspi_alt_size_t
Alternative size in bits.
enum qspi_bus_width qspi_bus_width_t
QSPI Bus width.
virtual int program(const void *buffer, mbed::bd_addr_t addr, mbed::bd_size_t size)
Program blocks to a block device.
A QSPI Driver, used for communicating with QSPI slave devices.
virtual mbed::bd_size_t get_program_size() const
Get the size of a programable block.
enum qspi_status qspi_status_t
QSPI return status.