hw_spi_flash.h 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef __HW_SPI_FLASH_H__
  2. #define __HW_SPI_FLASH_H__
  3. #define HW_SPI_FLASH_DEVICE_NUMBER 1 //挂载的SPI FLASH数量
  4. typedef struct {
  5. char *name; /**< flash chip name */
  6. uint8_t mf_id; /**< manufacturer ID */
  7. uint8_t type_id; /**< memory type ID */
  8. uint8_t capacity_id; /**< capacity ID */
  9. uint32_t capacity; /**< flash capacity (bytes) */
  10. uint16_t write_mode; /**< write mode @see sfud_write_mode */
  11. uint32_t erase_gran; /**< erase granularity (bytes) */
  12. uint8_t erase_gran_cmd; /**< erase granularity size block command */
  13. } spi_flash_chip;
  14. typedef struct
  15. {
  16. uint32_t bytes_per_sector; //扇区字节数
  17. uint32_t sector_count; //扇区数
  18. uint32_t block_size; //块大小
  19. } spi_flash_block_geometry;
  20. typedef struct
  21. {
  22. int init_ok; //是否有检测到设备
  23. spi_flash_chip chip;
  24. spi_flash_block_geometry geometry;
  25. uint8_t addr_in_4_byte; //地址是否是4字节
  26. int block_size; //块大小
  27. int block_number; //块数量
  28. int retry_time; //重试次数
  29. int device; //对应总线设备编号
  30. } hw_spi_flash_device_t;
  31. /* SFUD support manufacturer JEDEC ID */
  32. #define SFUD_MF_ID_CYPRESS 0x01
  33. #define SFUD_MF_ID_FUJITSU 0x04
  34. #define SFUD_MF_ID_EON 0x1C
  35. #define SFUD_MF_ID_ATMEL 0x1F
  36. #define SFUD_MF_ID_MICRON 0x20
  37. #define SFUD_MF_ID_AMIC 0x37
  38. #define SFUD_MF_ID_SANYO 0x62
  39. #define SFUD_MF_ID_INTEL 0x89
  40. #define SFUD_MF_ID_ESMT 0x8C
  41. #define SFUD_MF_ID_FUDAN 0xA1
  42. #define SFUD_MF_ID_HYUNDAI 0xAD
  43. #define SFUD_MF_ID_SST 0xBF
  44. #define SFUD_MF_ID_MICRONIX 0xC2
  45. #define SFUD_MF_ID_GIGADEVICE 0xC8
  46. #define SFUD_MF_ID_ISSI 0xD5
  47. #define SFUD_MF_ID_WINBOND 0xEF
  48. /**
  49. * flash program(write) data mode
  50. */
  51. enum sfud_write_mode {
  52. SFUD_WM_PAGE_256B = 1 << 0, /**< write 1 to 256 bytes per page */
  53. SFUD_WM_BYTE = 1 << 1, /**< byte write */
  54. SFUD_WM_AAI = 1 << 2, /**< auto address increment */
  55. SFUD_WM_DUAL_BUFFER = 1 << 3, /**< dual-buffer write, like AT45DB series */
  56. };
  57. uint8_t spi_flash_read_status(int index, uint8_t reg_no);
  58. int spi_flash_write_status(int index, uint8_t reg_no, uint8_t status);
  59. int spi_flash_wait_busy(int index);
  60. int spi_flash_set_write_enable(int index, uint8_t enabled);
  61. int spi_flash_reset(int index);
  62. int spi_flash_read_jedec_id(int index);
  63. int spi_flash_write(int index, uint32_t addr, const uint8_t *dat, int size);
  64. int spi_flash_read(int index, uint32_t addr, uint8_t *dat, int size);
  65. int spi_flash_erase(int index, uint32_t addr, int size);
  66. int spi_flash_erase_chip(int index);
  67. int spi_flash_erase_write(int index, uint32_t addr, const uint8_t *data,int size);
  68. int hw_spi_flash_attach(int index, int device);
  69. #endif