Skip to main content
jdcowpland
Associate III
January 31, 2014
Question

f_utime

  • January 31, 2014
  • 19 replies
  • 4232 views
Posted on January 31, 2014 at 09:31

Anyone got any experience using the f_utime function from chan's fatfs? I've got a function that uses it to put a timestamp on a file I create on an SD card, but it returns INVALID_NAME every time. Not quite sure why. Anybody have any ideas? (Btw, I'm using a STM32F415VG if that helps). My code looks like this:

FRESULT set_timestamp (char *obj)
{
FILINFO fno;
RTC_TimeTypeDef RTC_TimeStructure;
RTC_DateTypeDef RTC_DateStructure;
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStructure);
RTC_GetDate(RTC_Format_BIN,&RTC_DateStructure);
int hour = RTC_TimeStructure.RTC_Hours;
int min = RTC_TimeStructure.RTC_Minutes;
int sec = RTC_TimeStructure.RTC_Seconds;
int month = RTC_DateStructure.RTC_Month;
int mday = RTC_DateStructure.RTC_Date;
int year = RTC_DateStructure.RTC_Year;
year+=2000;
fno.fdate = (WORD)(((year - 1980) << 9) | month << 5 | mday);
fno.ftime = (WORD)(hour <<11 | min <<5 | sec/2 );
return f_utime(obj, &fno);
}

#fatfs
This topic has been closed for replies.

19 replies

Tesla DeLorean
Guru
February 3, 2014
Posted on February 03, 2014 at 15:44

Check the _FS_RPATH setting

http://elm-chan.org/fsw/ff/en/filename.html

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
jdcowpland
Associate III
February 26, 2014
Posted on February 26, 2014 at 13:48

From what I understand from that link, the following should work, but it doesn't:

res = f_chdir(''1:\dir1'');

res = f_chdir(''\dir2'');

It has no problem with the first line, but the second line says no file. Has anyone tried directories within directories with fatfs?

chen
Associate II
February 26, 2014
Posted on February 26, 2014 at 15:15

Hi

It has been a while !

OK, I think the first one works because it explicitly has he drive. The path has to be complete - including the drive letter.

The latter does not work because FatFS does not know what the drive is.

It work on a PC because on a PC, there is a hidden variable that holds the current drive and gets filled in if it is not specified.

Incidentally, why is the drive label ''1'' ?

jdcowpland
Associate III
February 26, 2014
Posted on February 26, 2014 at 15:52

I have 

_FS_RPATH == 1 in my code, which according to the fatfs documentation means ''

When relative path feature is enabled (

_FS_RPATH == 1

), specified path is followed from the root directory if a heading separator is exist. If not, it is followed from the current directory set with 

http://elm-chan.org/fsw/ff/en/chdir.html

 function.

'' Surely that means I don't need the drive number if I'm already in that drive? The reason I'm using drive 1 is that I have two drives(sd card and usb).

Tesla DeLorean
Guru
February 26, 2014
Posted on February 26, 2014 at 16:02

Is the structure \DIR1\DIR2? Or what exactly?

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
jdcowpland
Associate III
February 26, 2014
Posted on February 26, 2014 at 16:14

Yes, this is what it looks like from windows: E:\dir1\dir2

Tesla DeLorean
Guru
February 26, 2014
Posted on February 26, 2014 at 16:26

Wouldn't the expect syntax then be relative?

res = f_chdir(''1:/dir1'');

res = f_chdir(''dir2'');

or

res = f_chdir(''1:/dir1/dir2'');

Tips, Buy me a coffee, or three.. PayPal Venmo (See Profile) Up vote any posts that you find helpful, it shows what's working..
chen
Associate II
February 26, 2014
Posted on February 26, 2014 at 16:28

''

I have 

_FS_RPATH == 1 in my code, which according to the fatfs documentation means ''

When relative path feature is enabled (

_FS_RPATH == 1

), specified path is followed from the root directory if a heading separator is exist. If not, it is followed from the current directory set with 

http://elm-chan.org/fsw/ff/en/chdir.html

 function.

'' Surely that means I don't need the drive number if I'm already in that drive?''

When you say ''

I have 

_FS_RPATH == 1 in my code

'' - can the fatfs code see the define during compilation?

''i

f not, it is followed from the current directory set with 

http://elm-chan.org/fsw/ff/en/chdir.html

 function.

'' Surely that means I don't need the drive number if I'm already in that drive?''

Has the f_chdir() been called before?

jdcowpland
Associate III
February 26, 2014
Posted on February 26, 2014 at 16:37

Working! Thanks Clive. Looks like it was confusion over ''\'' or ''/''. Just used f_chdir(''1:/dir1/dir2'') and it worked :)