sd卡挂载返回FR_NOT_READY等错误

前言

        本文章主要是例举文件系统挂载sd卡时出现的一下问题总结。本人用的芯片是GDF103系列,最近项目要使用sd进行读取文件,因此查阅了资料进行开发。一开始是使用了SPI方式连接,例程是原子哥的stm32进行改的,但多次调试都是卡死在发送cmd0命令那里,连获取卡信息都没成功,就更不要谈文件系统了。后面重新用sdio进行连线,并且用gd官方的例程进行调试。最终成功获取卡信息并打印,但挂载时一直返回FR_NOT_READY,也就是3号错误。但是我已经能打印卡信息 了,证明初始化是没问题的。我也找了挺多博客,话不多说,下面是链接:

1. 文件系统的FATFS变量是局部或者是全局指针,如果在系统中可能有问题,应该定义为全局变量,挂载时进行取址

fatfs 移植, f_open返回 FR_NOT_ENABLED-OpenEdv-开源电子网


2. 文件系统的ffconf.h头文件挂载数量默认为1个存储器,要同时挂载多个应该修改,并且设立对应的全局变量或者宏定义来调整diskio.c各个函数选项

FATFS 0.13 f_mount(&fs,““,1)挂载失败的原因_mode option 0:do not mount (delayed mount), 1:moun-优快云博客


3. 挂载时如果失败了,可能是存储介质还没准备好,再次进行挂载即可

FATFS 0.13 f_mount(&fs,““,1)挂载失败的原因_mode option 0:do not mount (delayed mount), 1:moun-优快云博客


4. 可能是挂载的磁盘大小和扇区数量宏定义设置不对,要根据自己的存储器进行设置

FATFS文件系统异常FR_NOFILESYSTEM_fatfs文件关了重新打开显示无文件系统-优快云博客

5. 重点,也是本人的最终问题解决:由于初始化后就可以打印卡信息,那么就是连接上了,但是挂载这里没成功,最后发现是文件系统挂载调用的sd卡初始化,返回值是29,在disk_initialize里面判断是如果返回值>=0那么就是错误,而我的初始化返回值是29是ok。所以就搞乌龙了,最后在我的初始化函数里面加一个返回值判断即可。如图:

 diskio.c 文件

sdcard.c文件


总结

      其实在此之前遇到过HardFault_Handler死循环等错误,但是做开发就是这样,永远不可能一帆风顺的完成需求,总会遇到许许多多奇奇怪怪的拦路小妖怪。而发现它,解决它,这个过程就是学习,不过也希望大家都能遇到bug很快将其消灭。最后,送上大佛压阵

//                             _ooOoo_  
//                            o8888888o  
//                              88" . "88  
//                               (| -_- |)  
//                               O\ = /O  
//                         ____/`---'\____  
//                              . ' \\| |// `.  
//                             / \\||| : |||// \  
//                          / _||||| -:- |||||- \  
//                             | | \\\ - /// | |  
//                          | \_| ''\---/'' | |  
//                         \ .-\__ `-` ___/-. /  
//                     ___`. .' /--.--\ `. . __  
//                   ."" '< `.___\_<|>_/___.' >'"".  
//                    | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                   \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖保佑             永无BUG 
//          佛曰:  
//                  写字楼里写字间,写字间里程序员;  
//                  程序人员写程序,又拿程序换酒钱。  
//                  酒醒只在网上坐,酒醉还来网下眠;  
//                  酒醉酒醒日复日,网上网下年复年。  
//                  但愿老死电脑间,不愿鞠躬老板前;  
//                  奔驰宝马贵者趣,公交自行程序员。  
//                  别人笑我忒疯癫,我笑自己命太贱;  
//                  不见满街漂亮妹,哪个归得程序员?
 

<think>好的,用户想知道在Ubuntu系统中如何挂载SD。根据提供的引用内容,我需要整理出具体的步骤。首先,用户提到在WSL中手动挂载的方法,但可能他们现在需要的是原生Ubuntu的解决方案。引用1中的步骤是手动创建目录并用mount命令挂载,引用2提到了使用fstab自动挂载,而引用3则涉及自动挂载工具。 用户的问题可能分为两种情况:手动临时挂载和设置自动挂载。需要分步骤说明。首先,检查SD是否被系统识别,使用lsblk或fdisk命令。然后创建挂载点目录,比如在/mnt或用户目录下。接着使用mount命令挂载,这里需要注意文件系统类型,比如vfat或exfat,可能需要安装exfat支持。如果用户希望开机自动挂载,需要获取UUID并编辑/etc/fstab文件,添加对应的条目。另外,引用3提到使用自动挂载工具,可能需要安装udisks2等软件包,但用户可能更倾向于手动方法。 需要注意的是,文件系统类型不同,挂载参数可能不同,比如vfat可能需要指定编码选项,避免乱码。此外,权限问题也可能影响挂载后的访问,可能需要chmod或chown设置。如果遇到问题,比如挂载失败,可以检查dmesg日志或系统日志排查错误。 最后,生成相关问题时要覆盖手动挂载、自动挂载、权限设置、故障排除等方面,帮助用户全面了解。</think>### Ubuntu系统挂载SD步骤详解 #### 一、手动挂载SD(临时方案) 1. **插入SD并确认设备标识符** 使用命令查看存储设备列表: ```bash lsblk # 或 sudo fdisk -l ``` 找到SD对应的设备名(如`/dev/sdb1`或`/dev/mmcblk0p1`),注意容量匹配。 2. **创建挂载目录** ```bash sudo mkdir /mnt/sdcard # 或在用户目录下创建,如~/sdcard ``` 3. **执行挂载命令** - **FAT32/exFAT文件系统**: ```bash sudo mount -t vfat /dev/sdb1 /mnt/sdcard # 若为exFAT需先安装exfat-fuse ``` *注:若文件名乱码,可添加选项`-o iocharset=utf8`[^3]* - **NTFS文件系统**: ```bash sudo mount -t ntfs-3g /dev/sdb1 /mnt/sdcard ``` 4. **验证挂载** ```bash df -h # 检查挂载点是否显示SD容量 ``` #### 二、开机自动挂载(永久方案) 1. **获取SD的UUID和文件系统类型** ```bash sudo blkid /dev/sdb1 # 输出示例:UUID="xxxx-xxxx" TYPE="vfat" ``` 2. **编辑`/etc/fstab`文件** ```bash sudo nano /etc/fstab ``` 添加以下行(替换实际参数): ```bash UUID=xxxx-xxxx /home/用户名/sdcard vfat defaults,uid=1000,gid=1000 0 2 ``` *说明:`uid`和`gid`需替换为当前用户的ID(通过`id -u`查看)[^2]* 3. **测试配置并重启** ```bash sudo mount -a # 验证配置是否正确 reboot ``` #### 三、卸载SD ```bash sudo umount /mnt/sdcard # 卸载前确保无进程占用 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡丘. 钦爱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值