void w25q80bv_write_enable(w25q80bv_driver_t* const drv) { w25q80bv_wait_while_busy(drv); uint8_t data[] = { W25Q80BV_WRITE_ENABLE }; spi_bus_transfer(drv->bus, data, ARRAY_SIZE(data)); }
void spiflash_write_enable(spiflash_driver_t* const drv) { spiflash_wait_while_busy(drv); uint8_t data[] = { SPIFLASH_WRITE_ENABLE }; spi_bus_transfer(drv->target, data, ARRAY_SIZE(data)); }
/* Release power down / Device ID */ uint8_t w25q80bv_get_device_id(w25q80bv_driver_t* const drv) { uint8_t data[] = { W25Q80BV_DEVICE_ID, 0xFF, 0xFF, 0xFF, 0xFF }; spi_bus_transfer(drv->bus, data, ARRAY_SIZE(data)); return data[4]; }
/* Release power down / Device ID */ uint8_t spiflash_get_device_id(spiflash_driver_t* const drv) { uint8_t data[] = { SPIFLASH_DEVICE_ID, 0xFF, 0xFF, 0xFF, 0xFF }; spi_bus_transfer(drv->target, data, ARRAY_SIZE(data)); return data[4]; }
void w25q80bv_get_unique_id(w25q80bv_driver_t* const drv, w25q80bv_unique_id_t* unique_id) { uint8_t data[] = { W25Q80BV_UNIQUE_ID, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; spi_bus_transfer(drv->bus, data, ARRAY_SIZE(data)); for(size_t i=0; i<8; i++) { unique_id->id_8b[i] = data[5+i]; } }
void spiflash_get_unique_id(spiflash_driver_t* const drv, spiflash_unique_id_t* unique_id) { uint8_t data[] = { SPIFLASH_UNIQUE_ID, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; spi_bus_transfer(drv->target, data, ARRAY_SIZE(data)); for(size_t i=0; i<8; i++) { unique_id->id_8b[i] = data[5+i]; } }
void spiflash_chip_erase(spiflash_driver_t* const drv) { uint8_t device_id; device_id = 0; while(device_id != drv->device_id) { device_id = spiflash_get_device_id(drv); } spiflash_write_enable(drv); spiflash_wait_while_busy(drv); uint8_t data[] = { SPIFLASH_CHIP_ERASE }; spi_bus_transfer(drv->target, data, ARRAY_SIZE(data)); }
void w25q80bv_chip_erase(w25q80bv_driver_t* const drv) { uint8_t device_id; device_id = 0; while(device_id != W25Q80BV_DEVICE_ID_RES) { device_id = w25q80bv_get_device_id(drv); } w25q80bv_write_enable(drv); w25q80bv_wait_while_busy(drv); uint8_t data[] = { W25Q80BV_CHIP_ERASE }; spi_bus_transfer(drv->bus, data, ARRAY_SIZE(data)); }
uint8_t w25q80bv_get_status(w25q80bv_driver_t* const drv) { uint8_t data[] = { W25Q80BV_READ_STATUS1, 0xFF }; spi_bus_transfer(drv->bus, data, ARRAY_SIZE(data)); return data[1]; }
uint8_t spiflash_get_status(spiflash_driver_t* const drv) { uint8_t data[] = { SPIFLASH_READ_STATUS1, 0xFF }; spi_bus_transfer(drv->target, data, ARRAY_SIZE(data)); return data[1]; }