| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- #include "board.h"
- #include "sfud.h"
- #include "snfud.h"
- #include "mmcsd_core.h"
- /**
- * read flash data
- *
- * @param flash flash device
- * @param addr start address
- * @param size read size
- * @param data read data pointer
- *
- * @return result
- */
- int flash_read(uint32_t addr, size_t size, uint8_t *data)
- {
- #if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
- static sfud_flash *sflash = NULL;
- if (!sflash) {
- sflash = sfud_get_device(0);
- }
- return sfud_read(sflash, addr, size, data);
- #elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
- static sfud_flash *snflash = NULL;
- if (!snflash) {
- snflash = snfud_get_device(0);
- }
- return snfud_read(snflash, addr, size, data);
- #else
- return emmc_read(addr, size, data);
- #endif
- }
- /**
- * write flash data (no erase operate)
- *
- * @param flash flash device
- * @param addr start address
- * @param data write data
- * @param size write size
- *
- * @return result
- */
- int flash_write(uint32_t addr, size_t size, const uint8_t *data)
- {
- #if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
- static sfud_flash *sflash = NULL;
- if (!sflash) {
- sflash = sfud_get_device(0);
- }
- return sfud_write(sflash, addr, size, data);
- #elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
- static sfud_flash *snflash = NULL;
- if (!snflash) {
- snflash = snfud_get_device(0);
- }
- return snfud_write(snflash, addr, size, data);
- #else
- return emmc_write(addr, size, (uint8_t *)data);
- #endif
- }
- /**
- * erase and write flash data
- *
- * @param flash flash device
- * @param addr start address
- * @param size write size
- * @param data write data
- *
- * @return result
- */
- int flash_erase_write(uint32_t addr, size_t size, const uint8_t *data)
- {
- #if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
- static sfud_flash *sflash = NULL;
- if (!sflash) {
- sflash = sfud_get_device(0);
- }
- return sfud_erase_write(sflash, addr, size, data);
- #elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
- static sfud_flash *snflash = NULL;
- if (!snflash) {
- snflash = snfud_get_device(0);
- }
- return snfud_erase_write(snflash, addr, size, data);
- #else
- return emmc_write(addr, size, (uint8_t *)data);
- #endif
- }
- /**
- * erase flash data
- *
- * @note It will erase align by erase granularity.
- *
- * @param flash flash device
- * @param addr start address
- * @param size erase size
- *
- * @return result
- */
- int flash_erase(uint32_t addr, size_t size)
- {
- #if DEVICE_TYPE_SELECT == SPI_NOR_FLASH
- static sfud_flash *sflash = NULL;
- if (!sflash) {
- sflash = sfud_get_device(0);
- }
- return sfud_erase(sflash, addr, size);
- #elif DEVICE_TYPE_SELECT == SPI_NAND_FLASH
- static sfud_flash *snflash = NULL;
- if (!snflash) {
- snflash = snfud_get_device(0);
- }
- return snfud_erase(snflash, addr, size);
- #else
- return 0;
- #endif
- }
|