Нужна помощь клуба.
Процессор STM32F407VG, 168МГц.
Использую SDIO 4 бита на 24Мгц. DMA. Запись/чтение через SD_ReadMultiBlocks/SD_WriteMultiBlocks.
На всех сигналах SDIO пуллапы 10к.
проверочный код:
Код
SDInitResult=SD_Init();
if(SDInitResult==SD_OK) LEDOn(LED1); else LEDOn(LED2);
if(SDInitResult==SD_OK){
if ( f_mount( 1, &MSD_fatfs ) != FR_OK ){
LEDOn(LED2); // fatfs initialisation fails
}else{
res = f_open(&myfile, "1:test_sd.dat", FA_CREATE_ALWAYS | FA_WRITE);
for(i=0; i<3000;i++){
res=f_write(&myfile, buffer,4096, &bw);
}
f_close(&myfile);
f_mount(1, NULL);
if(res==0)
LEDOn(LED2);
else
LEDOn(LED1);
}
}
Итого, записывается 3тыс блоков по 4096 байт, засекаю секундомером.
На флешке PQI 1Gb (FAT) - 36 секунд, получается 340кБайт/сек или 2.7мбит/с
На Кингстон 4Gb (FAT32) - 60с, т.е. 200 кБайт/сек, или 1.6мбит/с.
Дополнение - при изменении блока с 4к на 16к, на 4гб фат32 флешке те-эе 60 сек., а на 1гб фат16 уменшилось до 12 сек, т.е. 1МБайт/с или 8 МБит/с.
У кого какие результаты получались? Я честно говоря, ожидал скорости побольше (хотя для конкретной задачи мне ее хватит.
И попутно другой вопрос - я первый раз с FatFs работаю, функия f_write начинается и ждет пока не закончиться запись блока. Т.е оно блокирует на время записи всю программу и не очень понятно зачем тогда DMA?
Это можно как-то обойти без OS ?