Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
IMX.RT1052
TFcard
RTthread在RT1052上的文件系统挂载与卸载
发布于 2021-02-19 11:05:08 浏览:1920
订阅该版
前置条件:RTthread版本3.1.4,MCU为RT1052CVL5B,TF卡无热插拔检测,即CD脚悬空; 问题发现:程序正常运行后,TF卡正常挂载,在未使用unmount指令卸载该TF卡时直接拔出该TF卡,再继续使用ls等指令时发现程序异常,表象为死在某个循环中无法退出; 后经测试发现,在程序正常运行后,断开某个引脚,即移除某个电阻使其断路,再继续使用ls等指令时发现程序异常,表象仍为死在某个循环中无法退出; 硬件电路如下图所示: [1.jpg](https://oss-club.rt-thread.org/uploads/20210219/4b2eafd8c18c7a19a784ba821aa901b4.jpg) [2.jpg](https://oss-club.rt-thread.org/uploads/20210219/1e8a20b1618bb869b2abdf3a2794aafd.jpg) 问题提出:1.请问在不改变硬件电路的情况下,如何检测TF卡状态是否异常;2.在不改变硬件电路的情况下,当TF卡异常时,如何保证操作该TF卡(如读、写、遍历等)不发生程序异常,即如何从死循环中退出?
查看更多
3
个回答
默认排序
按发布时间排序
DQUL_6050
2021-05-11
这家伙很懒,什么也没写!
@baixian 该问题最终采用了一个取巧的方案临时解决的,在不改变代码结构及硬件的基础上,大体思路是判断打开一个固定文件的成功与否来实现mount & umount,下面是具体的实现过程: 1.在不修改上电初始化,如init_sd等代码的基础上,新增一个优先级为28的线程;该线程的创建条件为SD卡mount success,线程成功创建,表明此时SD卡存在且正常工作; 2.该线程主要运行两个case,分别是SD卡是否存在且正常工作的条件; a)case 1:SD存在且正常工作 b)case 2:SD不存在 c)其他case:do nothing 3.case 1:执行只读打开 fopen() SD卡某个固定文件操作, a)若SD卡正常工作,则正常关闭该文件 fclose(); b)若SD卡被异常移除,则此时fopen的返回值可能会异常,同时会存在block_dev.c文件的一个判断“if (cmd.err || data.err || stop.err)”成立,串口上你能看到“mmcsd request blocks error”的打印信息,此时需要执行如下操作: i.dfs_unmount("/"); ii.rt_device_unregister(rt_device_find("sd0"));//卸载设备 iii.然后清除你自设的相关标志位,同时下次执行该线程时将会进入case2; 4.case 2:每次执行等待mail信息操作,等待1s,判断返回值,函数接口为result = mmcsd_wait_cd_changed(RT_TICK_PER_SECOND); a)返回值if (result == MMCSD_HOST_PLUGED),表征SD卡基本通信恢复,此时需要执行挂载操作dfs_mount("sd0", "/", "elm", 0, 0),基本上都能挂载成功; b)返回值result = 其他值,do nothing; 5.该线程每次挂起1s;目的是不让该线程持续运行。 注:需要注意一些绝对路径与相对路径的区别、fclose的时机以及LOG_E()的使用等等,这都是我踩过的坑。 以上。
whj467467222
认证专家
2021-02-19
开源,分享,交流,共同进步
可以给你一个思路: SD卡不要挂载到 根目录,创建一个 `romfs` 作为根目录,在 `romfs` 上创建一个 `sdcard` 的文件夹,把你的 SD 卡挂到这个 `sdcard` 目录上。 如果你能`open` 到 `sdcard` 目录下的文件或者文件夹,说明卡工作正常,如果不能那就说明卡有问题了,这个时候你的函数也会给你返回错误值。 可以参考:https://github.com/RT-Thread-Studio/sdk-bsp-stm32h750-realthread-artpi/blob/9465b820fda72fcdb1ffe03102c7fdc820e28677/projects/art_pi_blink_led/board/port/filesystem.c#L34 如果我的回答帮助到你了,请采纳。
baixian
2021-05-09
这家伙很懒,什么也没写!
请问问题解决了吗
撰写答案
登录
注册新账号
关注者
0
被浏览
1.9k
关于作者
DQUL_6050
这家伙很懒,什么也没写!
提问
1
回答
1
被采纳
0
关注TA
发私信
相关问题
1
RT1061/1052 带 RTT + LWIP和LPSPI,有什么坑要注意吗?
2
SFUD无法探测到flash
3
rt1052 bootloader跳转需要注意啥
4
野火imxrt1052的bsp中缺少drv_sdio.c文件
5
microPython移植到正点原子RT1052开发板出现问题
6
rt1052能支持ap6181的驱动吗
7
用野火的imx RT1052 EVK PRO 注册SPI Flash的问题
8
rt1052+rt_thread移植lwip一直ping不通
9
请问一下前辈野火rt1052在RT-Thread下的spi驱动应该怎样编写?
10
rt1052 移植cm_backtrace库,无法定位错误
推荐文章
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
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部