Shimmer2r пишет SD карту FR_DISK_ERROR на FatFs.fopen
Я использую Shimmer 2r, и мне нужно писать на SD-карту с помощью TinyOs и FatFS.
Это мой файл TestSD_C.ns:
#define NEW_PRINTF_SEMANTICS
#include "printf.h"
#include "FatFs.h"
configuration TestSD_C {
}
implementation {
components MainC, TestSD_P;
TestSD_P -> MainC.Boot;
components FatFsP, diskIOC;
TestSD_P.FatFs -> FatFsP;
FatFsP.diskIO -> diskIOC;
FatFsP.diskIOStdControl -> diskIOC;
components new TimerMilliC() as Timer;
TestSD_P.Timer -> Timer;
components PrintfC, SerialStartC;
}
Это мой файл SDTest_P.ns:
#include "FatFs.h"
#include "Timer.h"
#include "printf.h"
module TestSD_P {
uses {
interface Boot;
interface FatFs;
interface Timer<TMilli> as Timer;
}
}
implementation{
FATFS fs;
FIL fp;
uint8_t mount;
uint8_t open;
void printError(uint8_t resWrite);
event void Boot.booted() {
call Timer.startPeriodic( 1000 );
mount = call FatFs.mount(&fs);
open = call FatFs.fopen(&fp, "test.txt", (FA_CREATE_ALWAYS | FA_WRITE | FA_READ));
}
event void Timer.fired(){
open = call FatFs.fopen(&fp, "test.txt", (FA_CREATE_ALWAYS | FA_WRITE | FA_READ));
printf("Mount: ");
printError(mount);
printf(" Open: ");
printError(open);
printf("\n");
printfflush();
}
async event void FatFs.mediaAvailable() {}
async event void FatFs.mediaUnavailable() {}
void printError(uint8_t resWrite){
if( resWrite == FR_OK )
printf( "OK" );
else if( resWrite == FR_INT_ERR )
printf( "FR_INT_ERR" );
else if( resWrite == FR_NOT_READY )
printf( "FR_NOT_READY" );
else if( resWrite == FR_INT_ERR )
printf( "FR_INT_ERR" );
else if( resWrite == FR_NO_FILE )
printf( "FR_NO_FILE" );
else if( resWrite == FR_INT_ERR )
printf( "FR_INT_ERR" );
else if( resWrite == FR_INVALID_NAME )
printf( "FR_INVALID_NAME" );
else if( resWrite == FR_DENIED )
printf( "FR_DENIED" );
else if( resWrite == FR_WRITE_PROTECTED )
printf( "FR_WRITE_PROTECTED" );
else if( resWrite == FR_INVALID_OBJECT )
printf( "FR_INVALID_OBJECT" );
else if( resWrite == FR_TIMEOUT )
printf( "FR_TIMEOUT" );
else if( resWrite == FR_DISK_ERR )
printf( "FR_DISK_ERR" );
else
printf( "ALTRO" );
}
}
Я всегда получаю FR_DISK_ERROR, когда пытаюсь открыть файл; как если он существует, так и если нет. Пробовал форматировать SD: ничего не изменилось. Я пробовал использовать:
/* Format the default drive with default parameters */
res = call FatFs.mkfs("", 0, work, sizeof work);
printError(res);
res = call FatFs.mount(&fs, "", 0);
printError(res);
но компилятор сообщает:
TestSD_P.nc:41: too many arguments to function `FatFs.mkfs'
TestSD_P.nc:45: too many arguments to function `FatFs.mount'
Как я могу исправить ошибку?