#ifndef SPI_FLASH_H #define SPI_FLASH_H #include #include #include #include #include #ifdef PRINTF_STDLIB #include #endif #ifdef PRINTF_CUSTOM #include "tinystdio.h" #endif #define SPI_FLASH_SECTOR_SIZE 4096 #define SPI_FLASH_SECTORS_IN_BLOCK_NUMBER 16 #define SPI_FLASH_BLOCK_SIZE 16//4 #define SPI_FLASH_BLOCK_NUMBER 32 // SPI flash partitioning layout #define LOG_FLASH_SECTOR_OFFSET 4 #if HARDWARE_BT6711 || HARDWARE_BT6711_V1 // assuming 512 sectors #define ALARM_LOG_FLASH_SECTOR_OFFSET 174 #define SECTOR_COUNT 170 #define FIRMWARE_UPDATE_SECTOR_OFFSET 344 #define FIRMWARE_UPDATE_SECTOR_COUNT (512 - FIRMWARE_UPDATE_SECTOR_OFFSET) #else // HARDWARE_BT6711 #define ALARM_LOG_FLASH_SECTOR_OFFSET 258 #define SECTOR_COUNT (spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET) #endif // HARDWARE_BT6711 #if defined ( __ICCARM__ ) typedef int ssize_t; #endif typedef struct { bool present; // uint16_t sector_size; uint32_t sector_size; uint8_t sector_erase_op; uint16_t sector_count; } spi_flash_desc_t; extern spi_flash_desc_t spi_flash_desc; extern bool spi_flash_init(void); extern ssize_t spi_flash_read(int addr, void *buf, size_t len, uint32_t timeout); extern ssize_t spi_flash_write(int addr, const void *buf, size_t len, uint32_t timeout); extern int spi_flash_erase_sector(int addr, uint32_t timeout); extern int spi_flash_chip_erase(uint32_t timeout); extern bool spi_flash_test(void); #endif /* SPI_FLASH_H */