金牌会员
 
- 积分
- 1898
- 金钱
- 1898
- 注册时间
- 2012-10-28
- 在线时间
- 357 小时
|
5金钱
#define FILE_BUF_LENGTH (2048)
__align(4) u8 filebuf[FILE_BUF_LENGTH] = {0};
FRESULT DownloadDataToSDFunc_EPA_ACTS(void)
{
static u32 ReadSaveToSD_Pointer = 0, ReadSaveToSD_PointerBack = 0;
uint32_t byteamount ;
uint32_t readpointer ;
char csx[30];
uint8 err;
UINT bw,br; // 文件读/写字节计数
FRESULT res;
FATFS fs;
FIL file;
DIR dir;
if(SysParameter.InfoData.Tag18000Total == 0) //if(SysParameter.InfoData.AlarmPacketWritePointer == 0)
{
return FR_NO_FILE; //没有可以写入的文件,自定义的返回类型
}
if( SD_Detect() != SD_NOT_PRESENT ) //检测磁盘是否插好
{
SDIO_POWER_EN_ON;
OSTimeDly(OS_TICKS_PER_SEC/10);
Read_Clock();
sprintf((char*)csx,"/AVANTE/AAL%02d%02d.dat",RtcTime.month,RtcTime.dom);
if(disk_initialize(0) == SD_OK)
{
res = f_mount(0, &fs); // Register a work area for logical drive 0
res = f_opendir (&dir,"/AVANTE");
if(FR_OK != res)
{
res = f_mkdir("/AVANTE");
if(FR_EXIST == res) //已经存在同名的文件或目录
{
}
else if(FR_OK != res)
{
f_mount(0, NULL);
SDIO_POWER_EN_OFF;
OSSemPost(SPIOperateSem);
return res;
}
}
res = f_open(&file, (char*)csx, FA_READ | FA_WRITE | FA_OPEN_ALWAYS); //打开目标文件,如果没有则创建
if (res != FR_OK)
{
f_mount(0, NULL);
SDIO_POWER_EN_OFF;
return res;
}
SysParameter.InfoData.Tag18000Total=365; //这个值/2,写入的数据没有问题,否则写入到sd卡的数据有错误
byteamount = (u32)(18 * (SysParameter.InfoData.Tag18000Total));
readpointer = 0 ;
while(byteamount > readpointer)
{
if(byteamount > (readpointer + FILE_BUF_LENGTH))
{
Flash_Read((TAG18000_STA_ADDR + readpointer), FILE_BUF_LENGTH, (uint8*)&filebuf[0]); //从spi的flash里面读取数据,这个数据在写入时已经是校验过的,绝对是对的,而且读取的数//据通过串口看也是对的
res = f_lseek(&file, f_size(&file)); //这个文件大小好像始终都是0 ????????????
res = f_write(&file, (uint8*)&filebuf[0], FILE_BUF_LENGTH, &bw);
if (bw != (FILE_BUF_LENGTH)) //说明写入有错误
{
f_mount(0, NULL);
SDIO_POWER_EN_OFF;
return res;
}
readpointer += FILE_BUF_LENGTH ;
}
else
{
memset((uint8*)&filebuf[0], 0, FILE_BUF_LENGTH);
Flash_Read((TAG18000_STA_ADDR + readpointer), (byteamount - readpointer), (uint8*)&filebuf[0]);
res = f_lseek(&file, f_size(&file)); //这个文件大小好像始终都是0 ????????????
res = f_write(&file, (uint8*)&filebuf[0], byteamount - readpointer, &bw);
if (bw != (byteamount - readpointer)) //说明写入有错误
{
f_mount(0, NULL);
SDIO_POWER_EN_OFF;
return res;
}
readpointer = byteamount ;
}
}
f_close(&file);
f_mount(0, NULL);
SDIO_POWER_EN_OFF;
}
}
else
{
SDIO_POWER_EN_OFF;
return FR_DISK_ERR;
}
return FR_OK;
}
大神们看看问题出在哪里啊 ???
|
|