Szaflik Poziom 17

Joined: 12 Jun 2003 Posts: 446 Location: Gdańsk
|
#1
18 Aug 2010 21:29 [LPC2368][C/Keil][FatFS]Błędy przy próbie zapisu na kartę SD |
|
|
|
Witam
Mam problem z biblioteką FatFS (v.0.08). Implementuje ją w środowisku Keil uVision (v.3.70). Procesor to LPC2368. Komunikacja z kartą SD poprzez interfejs SPI.
Obsługa karty SD jest sprawdzona i działa (inicjalizacja, zapis/odczyt sektora).
Implementacja jest bardzo uproszczona (np. disk_ioctl zwraca jedynie RES_OK, zapis kilku bloków został zrobiony w petli for z wykorzystaniem komendy "WRITE_SINGLE_BLOCK" etc.)
Kod kompiluje się bez błędów, jednak przy próbie utworzenia pliku / katalogu na karcie SD funkcje zwracają kody błędów 0x08 (FR_EXIST, /* (8) Acces denied due to prohibited access */) oraz 0x09 (FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */).
Kod obsługi wygląda tak:
| Code: |
FIL plik;
UINT zapisanych_bajtow;
FATFS g_sFatFs;
FRESULT fresult;
/* Main Program */
int main (void)
{
fresult = f_mount(0, &g_sFatFs);
fresult = f_open(&plik,"test.txt", FA_CREATE_NEW);
fresult = f_write(&plik, "zawartosc pliku", 15, &zapisanych_bajtow);
fresult = f_close(&plik);
fresult = f_mkdir("katalog1");
while (1); /* Loop forever */
} |
Funkcja f_write:
| Code: |
DRESULT disk_write (
BYTE drv, /* Physical drive nmuber (0..) */
const BYTE *buff, /* Data to be written */
DWORD sector, /* Sector address (LBA) */
BYTE count /* Number of sectors to write (1..255) */ )
{
int i, result = 0 ;
if(count==1)
{
result = mmc_write_block(buff, sector);
if(result == 0) return RES_OK;
}
// translate the reslut code here
else
{
for(i=0;i<count;i++)
{
mmc_write_block(buff, sector);
}
if(result == 0) return RES_OK;
}
return RES_ERROR;
} |
Prosił bym o sugestie w czym może tkwić problem.
Ew. może ktoś ma trochę bogatsza bibliotekę obsługującą kartę SD na ten procek (z interfejsem SPI) ?
|
|
Szteker Poziom 6

Joined: 28 May 2004 Posts: 19
|
#2
05 Sep 2010 05:14 Re: [LPC2368][C/Keil][FatFS]Błędy przy próbie zapisu na kart |
|
|
|
Spróbuj z parametrami :
FA_CREATE_ALWAYS,FA_WRITE
| Code: |
| fresult = f_open(&plik,"test.txt", FA_CREATE_ALWAYS|FA_WRITE) |
FA_CREATE_ALWAYS nadpisze wtedy istniejący plik, a to FA_WRITE to tak dla bezpieczeństwa ja zawsze daje.
btw. LPC2368 ma interfejs pod karty SD (MCI).
|
|