12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- #ifndef __HW_SPI_FLASH_H__
- #define __HW_SPI_FLASH_H__
- #define HW_SPI_FLASH_DEVICE_NUMBER 1 //挂载的SPI FLASH数量
- typedef struct {
- char *name; /**< flash chip name */
- uint8_t mf_id; /**< manufacturer ID */
- uint8_t type_id; /**< memory type ID */
- uint8_t capacity_id; /**< capacity ID */
- uint32_t capacity; /**< flash capacity (bytes) */
- uint16_t write_mode; /**< write mode @see sfud_write_mode */
- uint32_t erase_gran; /**< erase granularity (bytes) */
- uint8_t erase_gran_cmd; /**< erase granularity size block command */
- } spi_flash_chip;
- typedef struct
- {
- uint32_t bytes_per_sector; //扇区字节数
- uint32_t sector_count; //扇区数
- uint32_t block_size; //块大小
- } spi_flash_block_geometry;
- typedef struct
- {
- int init_ok; //是否有检测到设备
- spi_flash_chip chip;
- spi_flash_block_geometry geometry;
- uint8_t addr_in_4_byte; //地址是否是4字节
- int block_size; //块大小
- int block_number; //块数量
- int retry_time; //重试次数
- int device; //对应总线设备编号
- } hw_spi_flash_device_t;
- /* SFUD support manufacturer JEDEC ID */
- #define SFUD_MF_ID_CYPRESS 0x01
- #define SFUD_MF_ID_FUJITSU 0x04
- #define SFUD_MF_ID_EON 0x1C
- #define SFUD_MF_ID_ATMEL 0x1F
- #define SFUD_MF_ID_MICRON 0x20
- #define SFUD_MF_ID_AMIC 0x37
- #define SFUD_MF_ID_SANYO 0x62
- #define SFUD_MF_ID_INTEL 0x89
- #define SFUD_MF_ID_ESMT 0x8C
- #define SFUD_MF_ID_FUDAN 0xA1
- #define SFUD_MF_ID_HYUNDAI 0xAD
- #define SFUD_MF_ID_SST 0xBF
- #define SFUD_MF_ID_MICRONIX 0xC2
- #define SFUD_MF_ID_GIGADEVICE 0xC8
- #define SFUD_MF_ID_ISSI 0xD5
- #define SFUD_MF_ID_WINBOND 0xEF
- /**
- * flash program(write) data mode
- */
- enum sfud_write_mode {
- SFUD_WM_PAGE_256B = 1 << 0, /**< write 1 to 256 bytes per page */
- SFUD_WM_BYTE = 1 << 1, /**< byte write */
- SFUD_WM_AAI = 1 << 2, /**< auto address increment */
- SFUD_WM_DUAL_BUFFER = 1 << 3, /**< dual-buffer write, like AT45DB series */
- };
- uint8_t spi_flash_read_status(int index, uint8_t reg_no);
- int spi_flash_write_status(int index, uint8_t reg_no, uint8_t status);
- int spi_flash_wait_busy(int index);
- int spi_flash_set_write_enable(int index, uint8_t enabled);
- int spi_flash_reset(int index);
- int spi_flash_read_jedec_id(int index);
- int spi_flash_write(int index, uint32_t addr, const uint8_t *dat, int size);
- int spi_flash_read(int index, uint32_t addr, uint8_t *dat, int size);
- int spi_flash_erase(int index, uint32_t addr, int size);
- int spi_flash_erase_chip(int index);
- int spi_flash_erase_write(int index, uint32_t addr, const uint8_t *data,int size);
- int hw_spi_flash_attach(int index, int device);
- #endif
|