前言
apollo通过QSPI接口外扩flash芯片W25Q256的驱动
一、工程配置
第一步:
在RT-Thread stuido中创建工程,在设置->组件中使用SPI,配置如下图所示
外扩W25Q256通过QSPI接口与stm32f767连接,因此使能QSPI功能,同时开启SFUD,是一款开源的串行 SPI Flash 通用驱动库,能够支持不同品牌及规格的 Flash,提高了涉及到 Flash 功能的软件的可重用性及可扩展性。
第二步:
在board.h文件中按提示进行QSPI的配置
根据硬件原理图,在cubemx中配置QSPI接口,并将生成代码
void HAL_QSPI_MspInit(QSPI_HandleTypeDef* hqspi)
复制到board.c文件的末尾。
打开stm32f7xx_hal_config.h文件,使能QSPI模块,用于加载相关头文件
#define HAL_QSPI_MODULE_ENABLED
二、代码测试
测试代码如下:
#include "drv_qspi.h"
#include "spi_flash_sfud.h"
#define QSPI_BUS_NAME "qspi1"
#define QSPI_DEVICE_NAME "qspi10"
#define W25Q_FLASH_NAME "W25Q256FV"
#define QSPI_CS_PIN GET_PIN(B,6)
static int rt_qspi_flash_init(void)
{
rt_err_t result=RT_ERROR;
result =stm32_qspi_bus_attach_device(QSPI_BUS_NAME, QSPI_DEVICE_NAME, (rt_uint32_t)QSPI_CS_PIN, 4, RT_NULL, RT_NULL);
if(result!=RT_EOK)
{
return -RT_ERROR;
}
#ifdef RT_USING_SFUD
if (rt_sfud_flash_probe(W25Q_FLASH_NAME, QSPI_DEVICE_NAME) == RT_NULL)
return -RT_ERROR;
#endif
return RT_EOK;
}
测试结果
通过list_device指令可以查看挂载的设备,包括QSPI总线,QSPI设备和flash;
使用sfud组件的sf probe qspi10指令,可以测试flash是否初始化成功。