Кто-нибудь сталкивался с бесконечным циклом здесь: "sdcard.c ==> SD_WriteBlock() ==> while ((TransferEnd == 0) && (TransferError == SD_OK)){}" ?
Режим работы с флешкартой DMA.
Заранее спасибо!
P.S. Сам код:
Спойлер
Мой не работающий (взят из примера, присланного продавцом из Китая):Код: Выделить всё
#include "stm32f10x.h"
#include "sdcard.h"
#include "ff.h"
#include <stdio.h>
#include <string.h>
extern SD_CardInfo SDCardInfo;
extern SD_Error Status ;
extern u8 ASCII_Table[95][16];
SD_Error SD_InitAndConfig(void);
int main(void)
{
SD_InitAndConfig();
FIL file;
FATFS fs;
FRESULT res;
disk_initialize(0);
res = f_mount(0, &fs);
res = f_open(&file, "TEST.txt", FA_CREATE_ALWAYS | FA_WRITE);
res = f_lseek(&file,file.fsize);
res = f_printf (&file,"1234567890\r\n" );
res = f_close(&file);
res = f_mount(0, NULL);
while(1)
{
}
}
SD_Error SD_InitAndConfig(void)
{
/////////////////////////////////////////////////////////////////////
//////// SDCARD Initialisation //////////////////////////////////////
/////////////////Section adapted from ST example/////////////////////
/*---------- SD Init ---------- */
Status = SD_Init();
if (Status == SD_OK)
{
/*---------- Read CSD/CID MSD registers ----------*/
Status = SD_GetCardInfo(&SDCardInfo);
}
if (Status == SD_OK)
{
/*---------- Select Card ----------*/
Status = SD_SelectDeselect((u32) (SDCardInfo.RCA << 16));
}
if (Status == SD_OK)
{
Status = SD_EnableWideBusOperation(SDIO_BusWide_4b);
}
/* Set Device Transfer Mode to DMA */
if (Status == SD_OK)
{
Status = SD_SetDeviceMode(SD_DMA_MODE);//oet
// Status = SD_SetDeviceMode(SD_POLLING_MODE);
// Status = SD_SetDeviceMode(SD_INTERRUPT_MODE);
}
return Status;
}
P.P.S. Если эту строчку закоментировать, то всё нормально работает