一、开发测试环境
①野火stm32f407开发板
②rtthread操作系统
W25Q128的电路原理图:
二、开发步骤
①使能spi驱动。
②使能spi bus/device 驱动,选择sfud驱动。
③开启dfs功能,选择elm文件系统。
④保存,重新生成工程。
⑤下载到开发板,查看设备,可以看到设备spi1
⑥添加测试代码。
总线(spi1)挂载spi从设备(spi10);
使用 SFUD 探测 spi10 从设备,并将 spi10 连接的 flash 初始化为块设备,名称 W25Q128;
挂载文件系统。
#include <rtthread.h>
#include <board.h>
#include <spi_flash.h>
#include <dfs_fs.h>
int w25q128_init(void)
{
//往总线 spi1 上挂载一个 spi10 从设备
extern rt_err_t rt_hw_spi_device_attach(const char *bus_name, const char *device_name, GPIO_TypeDef *cs_gpiox, uint16_t cs_gpio_pin);
rt_hw_spi_device_attach("spi1","spi10",GPIOG,GPIO_PIN_6);
//使用 SFUD 探测 spi10 从设备,并将 spi10 连接的 flash 初始化为块设备,名称 W25Q128
extern rt_spi_flash_device_t rt_sfud_flash_probe(const char *spi_flash_dev_name, const char *spi_dev_name);
if (RT_NULL == rt_sfud_flash_probe("W25Q128", "spi10"))
{
return -RT_ERROR;
}
return 0;
}
INIT_DEVICE_EXPORT(w25q128_init);
//MSH_CMD_EXPORT(w25q128_init ,w25q128 spi sfud init);
static int bsp_w25q_mount(void)
{
int k=5;
while (k--)
{
if(rt_device_find("spi10") != RT_NULL)
{
if (dfs_mount("W25Q128", "/", "elm", 0, 0) == 0)
{
return 0;
}
}
rt_thread_mdelay(3000);
}
dfs_mkfs("elm", "W25Q128");
return -1;
}
static int dfs_w25q_mount_init(void)
{
if(bsp_w25q_mount()==-1)
{
if (dfs_mount("W25Q128", "/", "elm", 0, 0) == 0)
{
rt_kprintf("mount W25Q128 ok\r\n");
return 0;
}
return -1;
}
else
{
rt_kprintf("mount W25Q128 ok\r\n");
return 0;
}
}
static int mount_w25q_init(void)
{
if(-1 == dfs_w25q_mount_init())
{
return -1;
}
else
{
// if(-1 == mkdir_para() )
// {
// return -1;
// }
}
return 0;
}
//INIT_APP_EXPORT(mount_w25q_init);
MSH_CMD_EXPORT(mount_w25q_init ,w25q128 fs mount);
三、测试结果
可以看到正确获取到w25q128的信息,虚拟文件系统也挂载到根目录。
欢迎关注个人公众号:嵌入式学习与实践
参考:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/sfud/an0048-sfud
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/components/dfs/an0012-dfs