Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread学习营
【内核和外设学习营】十里 FatFS文件系统上挂载SD卡实验
发布于 2018-09-07 18:21:42 浏览:3316
订阅该版
* 本帖最后由 hyz_rtt 于 2018-9-7 18:23 编辑 * 1、实验要求: 要求硬件上:(1)有SD卡接口, 并插入SD卡 ;(2)有一路串口用来做 msh shell 终端。 软件上:BSP 中已经实现如下驱动:串口驱动,SD卡驱动。 2、准备工作: 硬件:野火霸天虎stm32407开发板 软件:rtt3.1.0bsp下stm32f4xx-HAL、rtt3.1.0 bsp下stm32f429-apollo以及env0.7.1 3、示例代码 ```#include
#include
void sd_test(void) { rt_device_t dev; while(1) { dev = rt_device_find("sd0"); if(dev != RT_NULL) { if(dfs_mount("sd0", "/", "elm", 0, 0) == 0) { rt_kprintf("sd card mount to / success!
"); } else { rt_kprintf("sd card mount to / failed!
"); } break; } rt_thread_delay(50); } }```然后在用户主函数里调用sd_test()函数。 4、实验步骤 (1)env配置芯片型号stm32f407ZG、外部时钟源HSE25M ![xinpian.png](/uploads/201809/07/172231rxrv0xvdxqdom2et.png) (2)进入RT-Thread Components选项 ![env组件配置.png](/uploads/201809/07/172436ofjfjf66zqrcgvr6.png) 1)数字1处进入finsh shell功能选中,其他无需改动 2)数字2处配置文件系统 ![文件系统.png](/uploads/201809/07/172801uerqygb0jr4g4y4f.png) 3)数字3处Device Drivers配置底层框架(PIN可不选) ![框架.png](/uploads/201809/07/173125wom88rtd8rktki3k.png) 4)数字4处配置libc,和c语言相关的,使用文件系统尽量选择,不然会出一些错误 ![libc.png](/uploads/201809/07/173438sz19t9tpzi1p1g9p.png) (3)配置好后,scons --target=mdk5重新生成工程 (4)关于SD卡驱动的事情 stm32f4xx-HAL里没有SD卡的底层驱动,这里我是从stm32f429-apollo的底层驱动drivers文件夹里拷贝的 ![F1N}P78X{TC~XI)W`P1BCGN.png](/uploads/201809/07/174050hffmii87tc8utia2.png) 鉴于驱动里调用了SD相关的.c文件里的函数,所以要更换如下文件 使用stm32f429-apollo库里的: stm32f4xx_hal_sd.c stm32f4xx_hal_sd.h stm32f4xx_ll_sdmmc.c stm32f4xx_ll_sdmmc.h 替换stm32f4xx-HAL 中的下面文件: stm32f4xx_hal_sd.c stm32f4xx_hal_sd.h stm32f4xx_ll_sdmmc.c stm32f4xx_ll_sdmmc.h (5)对于不同的开发板,我们需要对sd驱动文件drv_sdio_sd.c里void HAL_SD_MspInit(SD_HandleTypeDef *hsd) 函数里的SD卡初始化根据自己的开发板进行修改,确保硬件配置无误。 (6)有时候不选中相关的驱动,env会自动屏蔽相关的头文件,造成编译错误,一些定义在对应库文件里的变量报 出无法找到的错误,可在如下图中文件对相关宏定义进行操作。 ![conf.png](/uploads/201809/07/174732qp2w3f00yf000vb0.png) (7)加入示例代码,在用户主函数里调用进行编译,无错误,无警告,烧录下载。 5、实验结果 (1)烧录后,串口打印如下 ![sd卡未复位.png](/uploads/201809/07/175505ssttg3j583cgrdgc.png) 然后利用mkfs命令创建文件系统,发送命令。 (2)示例代码里是进行sd卡挂载的程序,确保此程序运行前提下,在(1)步骤完成后,复位按钮复位开发板, 串口助手输出如下: ![复位后看到sd卡挂载成功.png](/uploads/201809/07/175903f4gw1h8sv52yhyx1.png) 成功挂载。 6、遇到的问题 (1)SD卡驱动文件没有; (2)解决驱动问题后,加入驱动文件,编译后无错,但烧录后串口无任何显示; (3)挂载失败 7、解决方法 (1)从stm32f429-apollo拷贝驱动并修改硬件配置,编译有错后,更换sd相关的库文件,编译无错误。 (2)进入仿真跟踪模式,到rt_hw_board_init()里调用的rt_components_board_init()函数走不动了,然后进入 rt_components_board_init()函数,发现程序跑到rt_components_board_init()的(*fn_ptr)();这句话,跑不动了。 然后看到下面界面停留在红圈处(由于当时未截图,此图只是演示一下从哪里看到的信息) ![自动初始化.png](/uploads/201809/07/181020rp0w08f08928tt84.png) 当时一直点击(*fn_ptr)()往下一步执行,就发现在图中右下角红圈处一直走不动,鼠标点击上去, 显示rt_hw_sdcard_init(),此函数是自动初始化执行的,即INIT_BOARD_EXPORT(rt_hw_sdcard_init), 然后换成INIT_APP_EXPORT(rt_hw_sdcard_init),就解决问题了。 至于为啥换了就解决了,我也不清楚,我是在论坛里看到别人处理此种类似错误,就尝试一下。 对于原因也没看到为啥,如果有懂的小伙伴,欢迎解释:lol
查看更多
4
个回答
默认排序
按发布时间排序
yqiu
2018-09-07
这家伙很懒,什么也没写!
恩,组件初始化相关的内容正在往书中写呢; 初始化顺序 宏接口 描述 1 INIT_BOARD_EXPORT(fn) 非常早期的初始化,此时调度器还未启动 2 INIT_PREV_EXPORT(fn) 主要是用于纯软件的初始化、没有太多依赖的函数 3 INIT_DEVICE_EXPORT(fn) 外设驱动初始化相关,比如网卡设备 4 INIT_COMPONENT_EXPORT(fn) 组件初始化,比如文件系统或者LWIP 5 INIT_ENV_EXPORT(fn) 系统环境初始化,比如挂载文件系统 6 INIT_APP_EXPORT(fn) 应用初始化,比如GUI应用
whj467467222
认证专家
2018-09-07
开源,分享,交流,共同进步
自动初始化是有优先级的,你可以在源码里找到注释
hyz_rtt
2018-09-07
这家伙很懒,什么也没写!
>自动初始化是有优先级的,你可以在源码里找到注释 --- 恩恩 好的
hyz_rtt
2018-09-07
这家伙很懒,什么也没写!
>恩,组件初始化相关的内容正在往书中写呢; > >初始化顺序 宏接口 描述 --- 谢谢大神指导,以前只知道自动初始化,但是具体没啥了解,会好好再学习。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.3k
关于作者
hyz_rtt
这家伙很懒,什么也没写!
提问
10
回答
38
被采纳
0
关注TA
发私信
相关问题
1
stm32f407+lan8720 lwip2.0 作业提交
2
玩溜GD32303E-EVAL BSP系列(五)----设备连接网络
3
onenet应用连不上云端
4
【文件系统】晴天文件匹配
5
rtt semc sdram 基于操作系统怎么初始化驱动设备
6
RT-Thread移植笔记
7
RT-Thread内核移植+LoIIs+STM32F103C8+StdLib
8
EVN编译报错,求助大神
9
【内核和外设学习营】十里 简单LED闪亮测试
10
【内核和外设学习营】 十里 串口指令控制RGB灯点亮的颜色
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部