cancel
Showing results for 
Search instead for 
Did you mean: 

FR_DISK_ERROR always is returned by f_open.

Ali Esmailpor
Associate III

Hi all.

My team has been working on a project that contains a SD card based on Standard Library. Recently we've decided to migrate to HAL and it started.

Fortunately, All part of our project were changed as well as possible to HAL and they're working great but we don't know why SD card doesn't work well.

We have not changed peripheral's configuration clocks, but we had to change "clock frequency of the SDMMC controller" to 1.5MHz in HAL while it was 24MHz in STDLibrary. Because, it didn't work at all.

In addition, our customers are using a wide range of SD card types and all of them are OK but not great. I mean, FR_DISK_ERR is returned a lot in during of working but our device tries to get FR_OK.

Unfortunately, we always receive FR_DISK_ERR in some SD cards while, it worked all the time in our STDLibrary version.

Furthermore, we've found if "f_mount" function was called once and after that you take away the SD card and put it again, it will never work until you reset your microcontroller.

My microcontroller is STM32F427VI and SDIO configured as same as this:

 hsd.Instance = SDIO;

 hsd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;

 hsd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;

 hsd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_DISABLE;

 hsd.Init.BusWide = SDIO_BUS_WIDE_1B;

 hsd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;

 hsd.Init.ClockDiv = 14;

and it's working with 4bits wide bus.

Also, my device's clock is 96MHz and "APB2 Peripheral Clock" is 48MHz.

Edited (2020/02/24):

Finally, it worked when I updated my HAL Library to STM32Cube_FW_F4_V1.24.2. But HAL still doesn't work as well as Standard Peripheral. For example, I can't set 'ClockDiv' to '0' (24MHz) yet. It doesn't work at all. Now I set 'ClockDiv' to '1' (16MHz) that's not good enough for my project but I have to. Or if you take SDCard away and insert it again when program is working you can not init FATFS with f_mount. It's not going to work at all. You have to init SDIO Peripheral again by yourself. Unfortunately, now I can't put any time for getting more detail about what's going on in my schedule. Maybe in future.

32 REPLIES 32
dbgarasiya
Senior II

All ther best

Thank you so much. I'll check it and let you know.

It doesn't work. I think the reason is totally related to my SDIO's configuration.

I have a SD card that works correctly with Standard Library but not with HAL.

As same as my project it didn't work.

dbgarasiya
Senior II

this project is for stm32f779bi , you have to port it for your controller ,it just help you as refrence

if not check hardware connections

all pins getting enable or not? means proper supply

best of luck

Yes I did change it to F4 series configuration.

All of pins are enabled and well supplied.

I think these are not my problems.

I have to remind it that my device doesn't work when I set up the clock of SDIO to 24MHz as the highest clock possible.

I'm doing some test and after that I'm going to let you know.

Thank you, pal. ;)

dbgarasiya
Senior II

Have you solved out problem?

Not yet. I'm working on it.

dbgarasiya
Senior II

which controller you are using , ? study double check datasheet , or refrence manual related to clock

i think you are ok reated to firmware

dbgarasiya
Senior II

Have you solved out this problem?