OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4436|回复: 4

使用FATFS文件系统对64GB容量SD卡进行读写,写完之后电脑上显示未初始化,求助

[复制链接]

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-12-5
在线时间
19 小时
发表于 2022-4-8 11:12:09 | 显示全部楼层 |阅读模式
20金钱
现在使用FATFS文件系统对64GB大小的SD进行读写测试,每个文件写512MB,写五六个还可以在电脑上读出来,再往大了写电脑就提示SD卡未初始化,求教各位大神

最佳答案

查看完整内容[请看2#楼]

反反复复测试发现,向SD卡写入数据的瓶颈是在4GB左右,不由让人想起SDIO接口寻址的问题,如果地址为32位,即寻址范围在0~2^32,所以猜测有可能是这方面出现了问题。查阅资料和分析代码之后,可知:(1)Diskio.c文件:在FATfs文件系统应用中,如下图,此时函数参数中sector表示的是扇区地址,DWORD表示32位,且每个扇区有512字节,这是有ffconf.h头文件中定义的,所以可以访问2^32*512个地址,即可以访问4G*512字节的容量,没有问 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-12-5
在线时间
19 小时
 楼主| 发表于 2022-4-8 11:12:10 | 显示全部楼层
本帖最后由 爱吃鱼的宇仔 于 2022-4-13 16:21 编辑

反反复复测试发现,向SD卡写入数据的瓶颈是在4GB左右,不由让人想起SDIO接口寻址的问题,如果地址为32位,即寻址范围在0~2^32,所以猜测有可能是这方面出现了问题。
查阅资料和分析代码之后,可知:
1Diskio.c文件:在FATfs文件系统应用中,如下图,此时函数参数中sector表示的是扇区地址,DWORD表示32位,且每个扇区有512字节,这是有ffconf.h头文件中定义的,所以可以访问2^32*512个地址,即可以访问4G*512字节的容量,没有问题。

(2)我们继续继续看SD_WriteDisk()函数里面的内容:由下图可知,两个函数将参数中的sector扇区地址左移了9位赋值给lsector,即扩大了512倍,正好符合一个扇区512字节的数据的理论。然后将lsector64位)传给sd_block_write()函数中,接着看这个函数接口(步骤三);
(3)函数接口里,如下图:参数readaddr表示数据的字节地址,32位宽度,而传进来的参数为64位,所以当我们在FATfs文件系统应用层向SD卡写入大于4GB的数据时,将会产生溢出,把32位宽度以上的值舍弃掉,所以才会导致写入数据失败,将此参数变量改成uint64_t就可以接收完整的64位宽的参数即可以访问大于4G地址。
6.png

到此,FATfs文件系统不能写大于4GB数据的问题觉得到解决了。

回复

使用道具 举报

13

主题

644

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1976
金钱
1976
注册时间
2021-4-16
在线时间
505 小时
发表于 2022-4-8 14:30:20 | 显示全部楼层
原子的板子的话只能使用32G的SD卡。
回复

使用道具 举报

5

主题

355

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4497
金钱
4497
注册时间
2019-4-30
在线时间
890 小时
发表于 2022-4-8 16:41:17 | 显示全部楼层
用新版的fatfs可以识别更大的卡
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2022-4-9 00:36:07 | 显示全部楼层
用exFAT就可以
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 21:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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