STM32F4 FATFS f_open failure questions

ChibiOS public support forum for topics related to the STMicroelectronics STM32 family of micro-controllers.

Moderator: RoccoMarco

Post Reply
forrestjon
Posts: 13
Joined: Mon Jun 16, 2014 10:11 pm

STM32F4 FATFS f_open failure questions

Post by forrestjon »

Hello,

I am working with the STM32F4Discovery board and making a ChibiOS project which utilizes FATFS to write sectors of data to an SD card.
My SD card interface is 4 bit wide.

I have successfully used the FATFS with the Discovery board to read and write files before attempting to move the project to ChibiOS.

Basing my work on the demo project for the STM32F4, I have generated a simple program to open the files system, create a file and write some simple text to the file.
My function calls are all within main().
Each time I run the program f_getfree() fails.
Within f_getfree(), the function chk_mounted() always fails.
After commenting out f_getfree() f_open() always fails.

I wonder if I am missing something from my functions calls here. My main function is below.

Any advice would be greatly appreciated.

Thanks,

Forrest

int main(void) {

halInit();
chSysInit();

// Initialize the SDIO drivers.
sdcStart(&SDCD1, &sdccfg);
// Connect to the SD card:
sdcConnect(&SDCD1);
// Set up the file system:
chThdSleepMilliseconds(100);
// Mount the file system:
err = f_mount(0, &SDC_FS);
if (err != FR_OK){
chSysHalt();
}
else{
fs_ready = TRUE;
}
chThdSleepMilliseconds(100);

err = f_getfree("/", &clusters, &fsp);
if (err != FR_OK) {
chSysHalt();
}
chThdSleepMilliseconds(100);
// Create the test file:
err = f_open(&FileObject, "0:chtest.txt", FA_WRITE | FA_OPEN_ALWAYS);
if (err != FR_OK) {
chSysHalt();
}
// Write some text to the file:
err = f_write(&FileObject, teststring, sizeof(teststring), (void *)&bytes_written);
if (err != FR_OK) {
chSysHalt();
}
// Close the file:
err = f_close(&FileObject);
if (err != FR_OK) {
chSysHalt();
}

// Initialize the timer used for the ISR.
// Set up a general purpose timer structure.
static GPTConfig FiveMsTImerCfg =
{
1000000, // Timer Clock Freq in Hz
// TODO: look at this more indepth later to determine if we are using the
// most power efficient clock set up that we can use here.
FiveMsTimerCallBack // Timer callback function
};
// Start the 5ms timer and set it to run continuously:
// Timer triggers at 5000us (5ms) and calls the callback function FiveMsTImerCfg.
gptStart(&GPTD14, &FiveMsTImerCfg);
gptStartContinuous(&GPTD14, 5000);


/*
* Creates the example thread.
*/
chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);

/*
* Normal main() thread activity, in this demo it does nothing except
* sleeping in a loop and check the button state, when the button is
* pressed the test procedure is launched with output on the serial
* driver 2.
*/
while (TRUE) {
if (palReadPad(GPIOA, GPIOA_BUTTON))
TestThread(&SD2);
chThdSleepMilliseconds(500);
}
}
User avatar
Giovanni
Site Admin
Posts: 14892
Joined: Wed May 27, 2009 8:48 am
Has thanked: 1202 times
Been thanked: 996 times

Re: STM32F4 FATFS f_open failure questions

Post by Giovanni »

Hi,

Check if the SD pins are programmed with the correct alternate mode.

Giovanni
forrestjon
Posts: 13
Joined: Mon Jun 16, 2014 10:11 pm

Re: STM32F4 FATFS f_open failure questions

Post by forrestjon »

Hi,

The pin configuration in board.h was the problem indeed.

Thanks for the tip!

-Forrest
Tabulous
Posts: 518
Joined: Fri May 03, 2013 12:02 pm
Has thanked: 7 times
Been thanked: 18 times

Re: STM32F4 FATFS f_open failure questions

Post by Tabulous »

Have alook at this post i did

viewtopic.php?f=14&t=1698
forrestjon
Posts: 13
Joined: Mon Jun 16, 2014 10:11 pm

Re: STM32F4 FATFS f_open failure questions

Post by forrestjon »

Hi Tabulous,

I was able to get things going yesterday by editing my own board file.
Thanks for the reference design files.
I'll keep them on hand for later.

-Forrest
Post Reply