Initial commit: TXW82x FPV v2.7.0.7-42229 SDK + project sources
This commit is contained in:
153
sdk/include/hal/spi_nor.h
Normal file
153
sdk/include/hal/spi_nor.h
Normal file
@@ -0,0 +1,153 @@
|
||||
#ifndef _HAL_SPI_NOR_H_
|
||||
#define _HAL_SPI_NOR_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
#include "osal/mutex.h"
|
||||
#include "osal/atomic.h"
|
||||
|
||||
|
||||
/**
|
||||
* @brief spi nor mode
|
||||
*/
|
||||
enum spi_nor_mode {
|
||||
SPI_NOR_NORMAL_SPI_MODE,
|
||||
SPI_NOR_DUAL_SPI_MODE,
|
||||
SPI_NOR_QUAD_SPI_MODE,
|
||||
SPI_NOR_QPI_MODE,
|
||||
SPI_NOR_XIP_MODE,
|
||||
};
|
||||
|
||||
struct spi_nor_flash;
|
||||
|
||||
enum spi_nor_cmd {
|
||||
SPI_NOR_CMD_READ_JEDEC_ID,
|
||||
SPI_NOR_CMD_POWER_DOWN,
|
||||
SPI_NOR_CMD_POWER_UP,
|
||||
|
||||
SPI_NOR_CMD_COSTUM_ERASE,
|
||||
SPI_NOR_CMD_COSTUM_READ,
|
||||
SPI_NOR_CMD_COSTUM_WRITE,
|
||||
|
||||
SPI_NOR_CMD_SEC_ERASE,
|
||||
SPI_NOR_CMD_SEC_PROGRAM,
|
||||
SPI_NOR_CMD_SEC_READ,
|
||||
|
||||
SPI_NOR_CMD_SUSPEND,
|
||||
SPI_NOR_CMD_RESUME,
|
||||
|
||||
SPI_NOR_CMD_4B_ADDR,
|
||||
};
|
||||
|
||||
enum spi_nor_erase_mode {
|
||||
SPI_NOR_ERASE_SECTOR,
|
||||
SPI_NOR_ERASE_BLOCK,
|
||||
SPI_NOR_ERASE_CHIP,
|
||||
};
|
||||
|
||||
struct spi_nor_bus {
|
||||
void (*open)(struct spi_nor_flash *flash);
|
||||
void (*close)(struct spi_nor_flash *flash);
|
||||
void (*erase)(struct spi_nor_flash *flash, uint32 mode, uint32 addr);
|
||||
void (*read)(struct spi_nor_flash *flash, uint32 addr, uint8 *buf, uint32 size);
|
||||
void (*program)(struct spi_nor_flash *flash, uint32 addr, uint8 *buf, uint32 size);
|
||||
int32(*ioctl)(struct spi_nor_flash *flash, uint32_t cmd, uint32_t param1, uint32_t param2);
|
||||
};
|
||||
|
||||
struct spi_nor_regval {
|
||||
uint8 *buff;
|
||||
uint32 size;
|
||||
};
|
||||
|
||||
struct bpreg_cfg {
|
||||
uint8_t srx : 2,
|
||||
len : 3,
|
||||
idx : 3;
|
||||
uint8_t val;
|
||||
uint8_t mask;
|
||||
};
|
||||
|
||||
struct bp_area {
|
||||
uint8_t bpv:4,
|
||||
sec:1,
|
||||
tb :1,
|
||||
rev:2;
|
||||
uint32_t area[2];
|
||||
};
|
||||
|
||||
struct bp_info {
|
||||
uint32_t area_cnt : 9,
|
||||
disable_cmp : 1,
|
||||
tb_shift : 5,
|
||||
cmp_shift : 5,
|
||||
pre_cmd : 8,
|
||||
rev : 4;
|
||||
struct bp_area *areas;
|
||||
};
|
||||
|
||||
struct spi_nor_flash {
|
||||
struct dev_obj dev;
|
||||
os_mutex_t lock;
|
||||
atomic_t ref;
|
||||
enum spi_nor_mode mode;
|
||||
uint32 size, sector_size, page_size, block_size;
|
||||
uint32 bp_partition_size; //块保护分区大小
|
||||
uint32 vendor_id, product_id;
|
||||
const struct spi_nor_bus *bus;
|
||||
struct spi_device *spidev;
|
||||
struct {
|
||||
uint32 clk, clk_mode, wire_mode, cs;
|
||||
} spi_config;
|
||||
struct bpreg_cfg bpbk[4];
|
||||
struct bp_info *bpi;
|
||||
int (*bp_conv) (
|
||||
struct spi_nor_flash *flash,
|
||||
uint32_t addrl, uint32_t addru,
|
||||
struct bpreg_cfg *bp
|
||||
);
|
||||
uint8_t bits_of_addr;
|
||||
};
|
||||
|
||||
const struct spi_nor_bus *spi_nor_bus_get(enum spi_nor_mode mode);
|
||||
|
||||
int32 spi_nor_open(struct spi_nor_flash *flash);
|
||||
|
||||
void spi_nor_close(struct spi_nor_flash *flash);
|
||||
|
||||
void spi_nor_read(struct spi_nor_flash *flash, uint32 addr, uint8 *buf, uint32 len);
|
||||
|
||||
void spi_nor_write(struct spi_nor_flash *flash, uint32 addr, uint8 *buf, uint32 len);
|
||||
|
||||
void spi_nor_sector_erase(struct spi_nor_flash *flash, uint32 sector_addr);
|
||||
|
||||
void spi_nor_block_erase(struct spi_nor_flash *flash, uint32 block_addr);
|
||||
|
||||
void spi_nor_chip_erase(struct spi_nor_flash *flash);
|
||||
|
||||
void spi_nor_sec_erase(struct spi_nor_flash *flash, uint32 addr);
|
||||
|
||||
void spi_nor_sec_program(struct spi_nor_flash *flash, uint32 addr, struct spi_nor_regval *values);
|
||||
|
||||
void spi_nor_sec_read(struct spi_nor_flash *flash, uint32 addr, struct spi_nor_regval *values);
|
||||
|
||||
void spi_nor_custom_read(struct spi_nor_flash *flash, void *param);
|
||||
|
||||
void spi_nor_custom_write(struct spi_nor_flash *flash, void *param);
|
||||
|
||||
void spi_nor_custom_erase(struct spi_nor_flash *flash, void *param);
|
||||
|
||||
void spi_nor_power_down(struct spi_nor_flash *flash);
|
||||
|
||||
void spi_nor_power_up(struct spi_nor_flash *flash);
|
||||
|
||||
void spi_nor_read_jedec_id(struct spi_nor_flash *flash, uint8 *buff);
|
||||
|
||||
int32 spi_nor_attach(struct spi_nor_flash *flash, uint32 dev_id);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user