有了SPI以后我们经常用来操作flash,这里就不得不提SFUD是一种开源的串行SPI flash通用驱动库,首先需要在rtthread设置选项组件选项卡打开SFUD:
其实通过我们的勾勾选选就打开SFUD功能,实际上IDE的操作也很简单,加载spi_flash_sfud.c文件,并在rt_config.h的配置文件中定义宏RT_USING_SFUD即打开了该功能:
接下来我们需要利用SFUD组件将我们想要操作的SPI flash挂在到对应的总线上,首先通过list device命令查看当前的SPI总线是哪个,然后查看我们的SPI flash设备的CS片选是哪个引脚,然后通过组件提供的挂在函数尝试进行挂在该设备到总线,实际上就是SFUD利用SPI总线的API完成对flash的初始化并注册熬系统驱动中的过程。
/*3.编写挂在函数实现设备的挂在功能*/
/* SPI Flash 驱动 */
static int rt_hw_spi_flash_init(void)
{
/* 往总线 spi2 上挂载一个 spi20从设备 */
rt_hw_spi_device_attach("spi2", "spi20", GPIOB, GPIO_PIN_12); // CS 脚:PB12
/* 使用 SFUD 探测 spi20 从设备,并将 spi20 连接的 flash 初始化为块设备,名称 W25Q128 */
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi20"))
{
return -RT_ERROR;
};
return RT_EOK;
}
/* 导出到自动初始化 */
INIT_COMPONENT_EXPORT(rt_hw_spi_flash_init);
编译整个工程,并连接JLINK仿真器进行程序下载:
下载成功后,打开系统finsh串口我们会砍刀关于系统信息的打印,绿色字体部分为SFUD库加载情况及FLASH设备的挂在情况,通过list device命令我们可以砍刀我们定义的W25Q128设备已经加载成功,这个时候我们就是通过SFUD提供的库函数来操作我们的flash设备了。
关于使用SFUD挂在flash的过程到这里就结束了,感谢阅读~!