QSPI是Motorola公司推出的SPI接口的扩展,比SPI应用更加广泛。在SPI协议的基础上,Motorola公司对其功能进行了增强,大幅提升了数据交换能力。QSPI 是一种专用的通信接口,连接单、双或四(条数据线) SPI Flash 存储介质。
本驱动程序提供了FT2000/4、D2000、E2000平台的QSPI功能
FT2000/4、D2000上包含 1 个通用 QSPI 接口控制器,作为QSPI Flash接口使用,片最大支持 2Gb(256MB)的容量,最大支持连接四个相同容量的Flash
.
├── fqspi_norflash.c
├── fqspi_norflash.h
├── fqspi_g.c
├── fqspi_hw.c
├── fqspi_hw.h
├── fqspi_sinit.c
├── fqspi.h
└── fqspi.c
以下部分将指导您完成 FQSPI 驱动的软件配置:
关于 SFUD 框架的使用,可以参考sfud.md
typedef struct
{
u32 instance_id; /* Id of device */
uintptr base_addr; /* Base address of qspi */
uintptr mem_start; /* Start address of qspi memory */
u32 capacity; /* Flash capacity */
u32 dev_num; /* Qspi device number */
u32 channel; /* channel number */
} FQspiConfig;
typedef struct
{
FQspiConfig config;
FQspiRdCfgDef rd_cfg;
FQspiWrCfgDef wr_cfg;
FQspiCommandPortDef cmd_def;
FQspiCsTimingCfgDef cs_timing_cfg;
u32 is_ready; /**< Device is initialized and ready */
u32 flash_size; /* size of QSPI flash */
} FQspiCtrl;
typedef enum
{
FQSPI_TRANSFER_1_1_1 = 0x0,
FQSPI_TRANSFER_1_1_2 = 0x1,
FQSPI_TRANSFER_1_1_4 = 0x2,
FQSPI_TRANSFER_1_2_2 = 0x3,
FQSPI_TRANSFER_1_4_4 = 0x4,
FQSPI_TRANSFER_2_2_2 = 0x5,
FQSPI_TRANSFER_4_4_4 = 0x6
}FQspiTransferMode;
typedef enum
{
FQSPI_FLASH_CAP_4MB = 0b000,
FQSPI_FLASH_CAP_8MB = 0b001,
FQSPI_FLASH_CAP_16MB = 0b010,
FQSPI_FLASH_CAP_32MB = 0b011,
FQSPI_FLASH_CAP_64MB = 0b100,
FQSPI_FLASH_CAP_128MB = 0b101,
FQSPI_FLASH_CAP_256MB = 0b110,
} FQspiFlashCapcityType;
typedef enum
{
FQSPI_SCK_DIV_128 = 0x0,
FQSPI_SCK_DIV_2 = 0x1,
FQSPI_SCK_DIV_4 = 0x2,
FQSPI_SCK_DIV_8 = 0x3,
FQSPI_SCK_DIV_16 = 0x4,
FQSPI_SCK_DIV_32 = 0x5,
FQSPI_SCK_DIV_64 = 0x6
}FQspiSckDivType;
typedef enum
{
FQSPI_ADDR_SEL_3 = 0x0,
FQSPI_ADDR_SEL_4 = 0x1,
}FQspiAddrType;
const FQspiConfig *FQspiLookupConfig(u32 instance_id)
Note:
FQspiCfgInitialize
函数的入参使用Input:
Return:
FError FQspiCfgInitialize(FQspiCtrl *instance_p, const FQspiConfig *input_config_p);
Note:
Input:
FQspiCtrl *instance_p, FQSPI驱动控制数据
const FQspiConfig *input_config_p, FQSPI驱动配置数据
Return:
void FQspiDeInitialize(FQspiCtrl *instance_p)
Note:
Input:
Return:
无
FError FQspiCommandPortConfig(FQspiCtrl *pctrl)
Note:
Input:
Return:
FError FQspiRdCfgConfig(FQspiCtrl *pctrl)
Note:
Input:
Return:
FError FQspiSetLdPortData(FQspiCtrl *pctrl, const u8 *buf, size_t len)
Note:
Input:
FQspiCtrl *pctrl, FQSPI驱动控制数据
const u8 *buf, 写缓存,存储要写入的数据
size_t len, 要读取的buf长度
Return:
FError FQspiFlashSpecialInstruction(FQspiCtrl *pctrl, u8 cmd, u8 *buf, size_t len);
Note:
Input:
FQspiCtrl *pctrl, FQSPI驱动控制数据
u8 cmd, 读寄存器状态的指令,具体参见flash芯片手册
u8 *buf, 读缓存,存储读到的寄存器值
size_t len, 要读取的buf长度
Return:
FError FQspiFlashWriteReg(FQspiCtrl *pctrl, u8 command, const u8 *buf, size_t len)
Note:
Input:
FQspiCtrl *pctrl, FQSPI驱动控制数据
u8 command, 写寄存器的指令
const u8 *buf, 写缓存,存储写入的寄存器值
size_t len, 要写入的buf长度
Return:
FError FQspiFlashReadDataConfig(FQspiCtrl *pctrl, u8 command)
Note:
Input:
FQspiCtrl *pctrl, FQSPI驱动控制数据
u8 command 读flash数据的指令,具体参见flash芯片手册
Return:
size_t FQspiFlashReadData(FQspiCtrl *pctrl, u32 chip_addr, u8 *buf, size_t len)
Note:
Input:
FQspiCtrl *pctrl, FQSPI驱动控制数据
u32 chip_addr, 读数据的起始地址
u8 *buf 读缓存, 存储读到的数据
size_t len, 要读取的buf长度
Return:
FError FQspiFlashWriteData(FQspiCtrl *pctrl, u8 command, u32 chip_addr, const u8 *buf, size_t len)
Note:
Input:
FQspiCtrl *pctrl, FQSPI驱动控制数据
u8 command 写flash数据的指令,具体参见flash手册
u32 chip_addr, 写数据的起始地址
u8 *buf 写缓存, 存储要写入的数据
size_t len, 要写入的buf长度
Return:
void FQspiSetPortData(uintptr base_addr, const u8 *buf, size_t len)
Note:
Input:
uintptr base_addr, QSPI控制器基地址
const u8 *buf 写缓存, 存储要写入的数据
size_t len, 要写入的buf长度
Return:
void FQspiGetPortData(uintptr base_addr, u8 *buf, size_t len)
Note:
Input:
uintptr base_addr, QSPI控制器基地址
const u8 *buf 读缓存, 存储读出的数据
size_t len, 要读取的buf长度
Return:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。