FATFS文件系统打开、读取文件的时候,f_read 返回FR_OK ,但是读取的数据长度一直是0的问题

文章讲述了在STM32F407通过SDIO与SD卡通信时,遇到文件大小信息获取错误的问题,经分析发现是由于SDIO时钟频率过低导致的。解决办法是提高系统时钟频率,确保SDIO时钟在工作范围内,以满足低频通信的时序要求。

f_read 返回FR_OK ,但是读取的数据长度一直是0的现象:打开的是一个较小文件(不足1k)是能正确获取文件大小信息,打开一个较大文件(1.87MB)时返回FR_OK,文件大小信息是0

原因:SDIO时钟频率过低

我使用的是stm32f407vet6 通过sdio方式和SD卡通信

问题发现解决过程:

1、在问题出现前stm32使用的系统时钟频率是168mhz,为使产品符合低功耗要求降低频率至50mhz运行后出现问题,遂猜测和问题原因可能和系统时钟频率有关

2、通过逻辑分析仪检测SDIO 的CLK脚发现 在系统时钟为50MHZ时CLK脚频率为7mhz左右,168mhz 时CLK脚频率为24mhz左右。7mhz 时 f_open无法正确获取文件大小信息, 24mhz 时 f_open正确获取文件大小信息(强烈建议逻辑分析仪的采样频率要保证是被检测频率的10倍才能保证采样结果不失真!)

3、通过cube了解到stm32f407vet6的sdio 的工作频率范围为187khz-24mhz

工作频率计算方法为SDIO_CK = SDIOCLK / [CLKDIV + 2],其中CLKDIV(分频值)我的代码中已经设置为0

 50MHZ时时钟配置如下,此时SDIOCLK为14.285mhz,   SDIOCLK / [CLKDIV + 2]=7mhz,印证逻辑分析仪的采样结果,由cube时钟树图知上述公式中SDIOCLK的值取决于PLL中的Q值 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

凌乱的小老弟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值