硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2259|回复: 5
收起左侧

[其它] SD卡读文件失败

[复制链接]
回帖奖励 4 个金币 回复本帖可获得 1 个金币奖励! 每人限 1 次

4

主题

9

回帖

64

积分

初级会员

积分
64
发表于 2018-5-9 16:41:26 | 显示全部楼层 |阅读模式
本帖最后由 caifaraday 于 2018-5-9 16:44 编辑

最近在移植文件系统,读文件和创建文件都OK,比如读取Hello.txt或者创建txt并写入数据都是OK的,但是现在想在SD卡里读取一个bmp图片,却返回失败。
具体是在使用f_read()读取bmp时,文件系统系统先使用SD_ReadMultiBlocks()读取多字节,这一步还是OK的,到了下一步会使用SD_ReadBlock()读取单字节,
这个时候返回的不是FR_OK,我用串口监视调试打印(见图1)出来发现返回的是3,也就是
FR_NOT_READY3
较低层的disk_initialize函数报告存储设备不能准备好工作。怀疑有下列可能之一。
· 驱动器中没有介质。
· 存储设备错误的低层实现。
· 错误的硬件配置。
· 存储设备损坏。
搜狗截图18年05月09日1632_1.png

图1
请问哪位高手知道为什么会这样呢?

还有我注释掉SD_ReadMultiBlocks()和SD_ReadBlock()里面的串口打印后,第一次执行SD_ReadBlock()都出错,是程序执行太快了吗?

回复

使用道具 举报

4

主题

9

回帖

64

积分

初级会员

积分
64
 楼主| 发表于 2018-5-9 18:11:17 | 显示全部楼层
本帖最后由 caifaraday 于 2018-5-9 18:17 编辑

最新发现:现在发现f_read()读取小于等于1024时,即blocksize=512的整数倍时,读取是没问题的,因为是整数倍,不会使用SD_ReadBlock(),所以不会出错,现在基本确定是使用SD_ReadMultiBlocks()后再使用SD_ReadBlock()就会出错,但具体原因是什么造成的还不清楚,希望高手指点一下
回复

使用道具 举报

4

主题

9

回帖

64

积分

初级会员

积分
64
 楼主| 发表于 2018-5-9 19:30:10 | 显示全部楼层
找到解决办法,就是重新格式化SD卡时,单元大小选为512字节,我不理解这个大小是不是指Blocksize的大小,因为用分区工具看SD卡时,没格式化之前扇区大小显示是512,如果我没记错的话,SD卡的扇区大小是固定的,即512字节,那么这个格式化时选择的单元大小有是指什么呢?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107050
QQ
发表于 2018-5-10 03:10:08 | 显示全部楼层

回帖奖励 +1 个金币

不好意思,楼主,刚回复你的问题。
SD卡的扇区大小是固定的512字节。而格式化的单元大小是文件系统的。
回复

使用道具 举报

4

主题

9

回帖

64

积分

初级会员

积分
64
 楼主| 发表于 2018-5-10 09:13:45 | 显示全部楼层
eric2013 发表于 2018-5-10 03:10
不好意思,楼主,刚回复你的问题。
SD卡的扇区大小是固定的512字节。而格式化的单元大小是文件系统的。

现在格式化单元大小是512,读取没问题,但是不管读取多大的文件,都只是反复调用SD_ReadBlock()来读的,不会使用SD_ReadMultiBlocks()来读取,请问如何解决格式化大小为1024时,使用SD_ReadMultiBlocks()后再使用SD_ReadBlock()就会出错的问题?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107050
QQ
发表于 2018-5-11 00:17:01 | 显示全部楼层
caifaraday 发表于 2018-5-10 09:13
现在格式化单元大小是512,读取没问题,但是不管读取多大的文件,都只是反复调用SD_ReadBlock()来读的,不 ...

你的是不是F1系列,如果是F1系列的话,没辙了,里面使用DMA,使用了DMA的刷,数据空间要做四字节对齐。所以每次读出小于等于512是最方便的方案了。

而F4系列因为DMA有FIFO功能,可以做非4字节对齐。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-16 08:35 , Processed in 0.173850 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表