spi_flash.h 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef SPI_FLASH_H
  2. #define SPI_FLASH_H
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <unistd.h>
  8. #ifdef PRINTF_STDLIB
  9. #include <stdio.h>
  10. #endif
  11. #ifdef PRINTF_CUSTOM
  12. #include "tinystdio.h"
  13. #endif
  14. #define SPI_FLASH_SECTOR_SIZE 4096
  15. #define SPI_FLASH_SECTORS_IN_BLOCK_NUMBER 16
  16. #define SPI_FLASH_BLOCK_SIZE 16//4
  17. #define SPI_FLASH_BLOCK_NUMBER 32
  18. // SPI flash partitioning layout
  19. #define LOG_FLASH_SECTOR_OFFSET 4
  20. #if HARDWARE_BT6711 || HARDWARE_BT6711_V1
  21. // assuming 512 sectors
  22. #define ALARM_LOG_FLASH_SECTOR_OFFSET 174
  23. #define SECTOR_COUNT 170
  24. #define FIRMWARE_UPDATE_SECTOR_OFFSET 344
  25. #define FIRMWARE_UPDATE_SECTOR_COUNT (512 - FIRMWARE_UPDATE_SECTOR_OFFSET)
  26. #else // HARDWARE_BT6711
  27. #define ALARM_LOG_FLASH_SECTOR_OFFSET 258
  28. #define SECTOR_COUNT (spi_flash_desc.sector_count/2 - LOG_FLASH_SECTOR_OFFSET)
  29. #endif // HARDWARE_BT6711
  30. #if defined ( __ICCARM__ )
  31. typedef int ssize_t;
  32. #endif
  33. typedef struct {
  34. bool present;
  35. // uint16_t sector_size;
  36. uint32_t sector_size;
  37. uint8_t sector_erase_op;
  38. uint16_t sector_count;
  39. } spi_flash_desc_t;
  40. extern spi_flash_desc_t spi_flash_desc;
  41. extern bool spi_flash_init(void);
  42. extern ssize_t spi_flash_read(int addr, void *buf, size_t len, uint32_t timeout);
  43. extern ssize_t spi_flash_write(int addr, const void *buf, size_t len, uint32_t timeout);
  44. extern int spi_flash_erase_sector(int addr, uint32_t timeout);
  45. extern int spi_flash_chip_erase(uint32_t timeout);
  46. extern bool spi_flash_test(void);
  47. #endif /* SPI_FLASH_H */