手把手教-单片机stm32基于w25q128使用文件系统

news2024/9/22 11:26:37

一、开发测试环境

①野火stm32f407开发板

②rtthread操作系统 

W25Q128的电路原理图:

b5a35bc94ff77d88e8b7aaad2f06b207.png

二、开发步骤

①使能spi驱动。

cdb0dc1365cc463b5e542a448666cb41.png

②使能spi bus/device 驱动,选择sfud驱动。

cc1c4e364f5544cbb5ea551c6c84111b.png

③开启dfs功能,选择elm文件系统。

aa8c306fd1efa868d89e5b3c48cb72c1.png

④保存,重新生成工程。

⑤下载到开发板,查看设备,可以看到设备spi1

75fae7e5e60ffc3128dbad5b87b165ab.png

⑥添加测试代码。

总线(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);

三、测试结果

a1cb4ca43e4b34626388d0d2d8a53907.png

可以看到正确获取到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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/739964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VueCli 脚手架使用

VueCli 脚手架 到目前为止&#xff0c;已经会了Vue基本使用&#xff08;去创建vue实例&#xff0c;创建之后再去挂载&#xff0c;挂载之后就去使用各种功能&#xff0c;挂载之后就可以使用其各种功能&#xff0c;data methods compute 以及各个生命周期&#xff0c;常用的属性以…

779. 最长公共字符串后缀

题面&#xff1a; 给出若干个字符串&#xff0c;输出这些字符串的最长公共后缀。 输入格式 由若干组输入组成。 每组输入的第一行是一个整数 NN。 NN 为 00 时表示输入结束&#xff0c;否则后面会继续有 NN 行输入&#xff0c;每行是一个字符串&#xff08;字符串内不含空白符&…

Redis深入 —— 持久化和事务

前言 最近的学习中&#xff0c;荔枝深入了解了Redis的持久化、Redis事务相关的知识点并整理相应的学习笔记&#xff0c;在这篇文章中荔枝也主要梳理了相应的笔记和基本知识&#xff0c;小伙伴们如果需要的话可以看看哈。 文章目录 前言 一、Redis持久化 1.1 RDB 1.1.1 Redi…

掌握驱动之道:L298N模块多方式驱动电机的优劣分析

L298N模块是一种常用的直流电机驱动模块&#xff0c;它可以通过控制输入端口来实现对电机的速度和方向的控制。L298N模块有3个输入端口&#xff1a;IN1、IN2和EN。 方法一&#xff1a;使用高级定时器输出通道和互补输出通道控制电机 将模块的IN1和IN2分别连接到STM32高级定时器…

Python GUI编程利器:Tkinker中的事件处理(11)

​ 小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日目标 学习下事件处理的相关知识点&#xff1a; 事件处理四要素 事件序列 事件绑定 今天要实现如下效果&#xff1…

Java在Excel中进行数据分析

摘要&#xff1a;本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处&#xff1a;葡萄城官网&#xff0c;葡萄城为开发者提供专业的开发工具、解决方案和服务&#xff0c;赋能开发者。 前一段时间淘宝出了一个“淘宝人生”的模块&#xff0c;可以看从注册淘宝账号至今的消…

k8s实战3-使用Helm在AKS上发布应用

AKS(Azure Kubenetes Service)是微软云azure上的K8s服务。 主要分为三步 1 连接到AKS 2 用kubectl发布应用 3 用Helm发布应用 1 登录 az login 2 连接dp-npr-dsm-aks&#xff08;Dsm项目的AKS&#xff09; az account set --subscription {{subID}} az aks get-credent…

指针的进阶(一)

目录 1. 字符指针 方法一 方法二 字符指针面试题 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组传参和指针传参 4.1 一维数组传参 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 5. 函数指针 代码一 代…

Windows用户怎么取消访问共享文件夹的密码

许多Windows系统用户在访问共享文件夹的时候却提示需要输入密码才可访问。这一步给很多人造成了困扰&#xff0c;其实我们可以取消访问共享文件夹密码。请看下面的两个方法。 方法一&#xff1a; 搜索 网络和共享中心。点击 更改高级共享设置。在最底下密码保护的共享那项&…

用C#写汉诺塔问题

假设要将n个圆盘从A->C&#xff0c;中间可以借助B&#xff0c;那么递归思路是这样的&#xff0c;我们先将除最大的一个圆盘外的其它n-1个圆盘从A->B,借助C&#xff0c;然后将最大的一个圆盘搬到C&#xff0c;最后将刚才的n-1个盘子&#xff0c;从B->C借助A&#xff0c…

Qt完成闹钟提示

未启动: 启动&#xff1a; .cpp #include "widget.h" #include "ui_widget.h"void Widget::btn1_slots() {//点击启动开始定时event_timer this->startTimer(1000);btn1->setEnabled(false);btn2->setEnabled(true);edit2->setEnabled(false…

一个月学通Python(十三):高级Python必须掌握的进阶知识点

专栏介绍 结合自身经验和内部资料总结的Python教程,每天3章,1个月就能全方位的完成Python的学习并进行实战开发。加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础》 文章目录 专栏介绍Python语言进阶1. 数据结构和算法2. 函数的使用方式3. 面向对象相关知识…

Todo-List案例版本五

安装库npm i pubsub-js 消息的订阅与发布 src/App.vue <template><div class"app"><h1>{{ msg }}</h1><School/><Student/></div> </template><script> import Student from ./components/Student import …

微信小程序常用组件的简单使用 view,scroll-view,swiper,swiper-item,text,rich-text,button,image

微信小程序常用组件的简单使用 1. view组件2. scroll-view 组件3. swiper 和 swiper-item 组件3.1. swiper组件中的常用属性 4. text 和 rich-text组件4.1. text组件4.2. rich-text 组件 5. button 组件6. image组件6.1. image的mode属性 1. view组件 view组件就类似于html中的…

问题总结(持续更新,欢迎补充)

文章目录 前言webshell流量特征内存马蜜罐应急响应Windows 事件ID如何是误报还是攻击&#xff08;如何判断是否攻击成功&#xff09;研判的思路渗透测试思路内网渗透相关溯源反制反序列化&#xff08;Shiro、Weblogic、Log4j&#xff09;CDNMySQL5.5版本以上和以下读写权限的区…

linux 系统errno 对应参考及代码

结论 linux下系统errno都有对应的说明描述&#xff0c;发生错误时获取errno即可知道具体问题描述 如下图 代码如下 golang版 package main import ("syscall""strings""fmt" ) func main() {for i : 0; i < 200; i {if !strings.HasPrefi…

【开源项目】自动化运维平台spug

Spug 基本介绍 Spug是面向中小型企业设计的轻量级无Agent的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、应用发布部署、在线任务计划、配置中心、监控、报警等一系列功能。 批量执行: 主机命令在线批量执行在线终端: 主机支持浏览器在线终端登录…

为什么技术牛逼的人,不能直接提为项目经理?

早上好&#xff0c;我是老原。 很多来私信我职业规划的小友&#xff0c;有很大一部分都是从事了大几年&#xff0c;10年的技术开发大佬…… 到这个层级的大佬&#xff0c;他们最大的困惑是&#xff1a;到我这个年纪/级别还有必要转管理吗&#xff1f; 是否有必要&#xff0c…

X6 基于VUE流程编辑器开发

先看效果图 主要插件X6 x6-vue-shape antv/x6-plugin-dnd 代码太多没有整理出来

个人云服务器搭建MQTT服务器

个人云服务器搭建MQTT服务器 文章目录 个人云服务器搭建MQTT服务器1️⃣ 前言2️⃣ EMQX部署 1️⃣ 前言 MQTT &#x1f449;MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;即消息队列遥测传输协议 • 是一个轻量的发布订阅模式消息传输协议&#xff0c;专门…