60 lines
2.2 KiB
C
60 lines
2.2 KiB
C
#ifndef _FLASH_N25Q_H_
|
|
#define _FLASH_N25Q_H_
|
|
|
|
|
|
#define N25Q_PAGE_SIZE (256)
|
|
|
|
#define N25Q_PAGE_TO_ADDR(page) (page << 8)
|
|
#define N25Q_SUBSECTOR_TO_ADDR(subsector) (subsector << 12)
|
|
#define N25Q_SECTOR_TO_ADDR(sector) (sector << 16)
|
|
|
|
#define CMD_WRITE_STATUS_REG (0x01)
|
|
#define CMD_PAGE_PROGRAM (0x02)
|
|
#define CMD_READ (0x03)
|
|
#define CMD_FAST_READ (0x0b)
|
|
#define CMD_QUAD_OUTPUT_FAST_READ (0x6b)
|
|
#define CMD_WRITE_DISABLE (0x04)
|
|
#define CMD_READ_STATUS_REG (0x05)
|
|
#define CMD_WRITE_ENABLE (0x06)
|
|
#define CMD_SUBSECTOR_ERASE (0x20)
|
|
#define CMD_CLEAR_FLAG_STATUS_REG (0x50)
|
|
#define CMD_READ_FLAG_STATUS_REG (0x70)
|
|
#define CMD_BULK_ERASE (0xC7)
|
|
#define CMD_SECTOR_ERASE (0xD8)
|
|
#define CMD_WRITE_LOCK_REG (0xE5)
|
|
#define CMD_READ_LOCK_REG (0xE8)
|
|
#define CMD_READ_ID (0x9F)
|
|
#define CMD_MULTI_IO_READ_ID (0xAF)
|
|
#define CMD_WRITE_ENHANCED_VOL_CONF_REG (0x61)
|
|
#define CMD_READ_ENHANCED_VOL_CONF_REG (0x65)
|
|
#define CMD_READ_VOL_CONF_REG (0x85)
|
|
#define CMD_WRITE_VOL_CONF_REG (0x81)
|
|
#define CMD_READ_NONVOL_CONF_REG (0xB5)
|
|
|
|
#define DUMMY_CNT (0xa)
|
|
|
|
|
|
typedef struct {
|
|
uint8_t manf_id;
|
|
uint8_t mem_type;
|
|
uint8_t mem_cap;
|
|
} n25q_id_t;
|
|
|
|
void flash_n25q_init(uint32_t controller, uint16_t clk_div);
|
|
void flash_n25q_set_spi_mode(uint8_t mode);
|
|
void flash_n25q_set_spi_controller(uint32_t controller);
|
|
n25q_id_t flash_n25q_read_id(uint8_t cmd);
|
|
void flash_n25q_write_enable(uint8_t en);
|
|
uint8_t flash_n25q_read_reg(uint8_t cmd);
|
|
void flash_n25q_write_reg(uint8_t cmd, uint8_t data);
|
|
uint8_t flash_n25q_read_status_reg();
|
|
uint8_t flash_n25q_is_busy();
|
|
void flash_n25q_read(uint8_t data[], uint32_t len, uint32_t addr);
|
|
void flash_n25q_subsector_erase(uint32_t subsector);
|
|
void flash_n25q_sector_erase(uint32_t sector);
|
|
void flash_n25q_page_program(uint8_t data[], uint32_t len, uint32_t page);
|
|
void flash_n25q_enable_quad_mode(uint8_t en);
|
|
void flash_n25q_set_dummy_clock_cycles(uint8_t num);
|
|
|
|
#endif
|