реклама на сайте
подробности

 
 
> STM32F103 + MicroSD + USB = Mass Storage, низкая скорость чтения - записи -- нужна оптимизация
IanPo
сообщение Dec 13 2014, 12:44
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 14-10-10
Пользователь №: 60 152



Здравствуйте!
Я успешно адаптировал пример с сайта ST USB MassStorage на своей плате (использовал F103VCT6).
Однако, измеренная скорость чтения оказалась 200, а записи - 36 кБайт/с.
На карточку ( TRANSCEND 2 G MicroSD ) с ПК пишутся файлы по 2МБайт, поэтому надо побыстрее.
Как я понял, в обмене задействован блок 512 байт, равный сектору ( 8 блоков по 64=MAX_BULK_SIZE).
Функция WriteMultiBLocks у меня работает около 12 мс (из-за встроенного цикла задержки, без которого
пишет быстро, почти 1 МБ/с, но только в файлах одни нули потом ), отсюда 512/0.012 = 42 кБ/с, минус
накладные расходы, получаем 36 кБайт. Замена на WriteBlock (пишется все равно 1 сектор) и ReadBlock
дала прирост до 280 при чтении и 70 кБайт/с при записи соответственно. Все равно, этого мало.
Мне нужны советы по оптимизации модуля sdio_stm32f1 или увеличения блока с 512 Б до 16КБ, например,
тогда можно было бы поднять скорость обмена и использовать Write- и ReadMultiBlocks, время выполнения
будет примерно те же 12 мс (замерял на блоках 12КБ).
Проект прилагаю (основан на примере ST и STM32Primer2_GPS_Tracker-master от Nemui Trinomius.
Ссылки на рабочие проекты приветствуются, особенно gcc и iar.
Прикрепленные файлы
Прикрепленный файл  STM32_USB_FS_Device_Lib_V4.0.0.7z ( 251.19 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IanPo
сообщение Dec 13 2014, 21:34
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 14-10-10
Пользователь №: 60 152



Я уже это делал - убирал из функции WriteMultiBlocks цикл задержки - скорость записи увеличивалась до 1 МБайт/с, но на карточку в файл писались нули sm.gif
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 13 2014, 21:38
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(IanPo @ Dec 14 2014, 01:34) *
но на карточку в файл писались нули sm.gif

Еще раз. Никуда и ничего не пишите. Вообще. Просто отбрасывайте данные от хоста, но сообщайте ему, что они записаны успешно. Вам сейчас нужно выяснить, где проблема - в USB или в карточке ...
Go to the top of the page
 
+Quote Post
IanPo
сообщение Dec 14 2014, 11:45
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 14-10-10
Пользователь №: 60 152



Цитата(kovigor @ Dec 14 2014, 00:38) *
Еще раз. Никуда и ничего не пишите. Вообще. Просто отбрасывайте данные от хоста, но сообщайте ему, что они записаны успешно. Вам сейчас нужно выяснить, где проблема - в USB или в карточке ...

Сделал вот так:
Код
uint16_t MAL_Write(uint8_t lun, uint32_t Memory_Offset, uint32_t *Writebuff, uint16_t Transfer_Length)
{
    switch (lun)
    {
        case 0:
            Status = SD_OK;
            //SD_WriteBlock( (uint8_t*)Writebuff, Memory_Offset, Transfer_Length );
            if ( Status != SD_OK )
            {
            return MAL_FAIL;
            }
            break;
        default:
            return MAL_FAIL;
    }
    return MAL_OK;
}

Ничего не пишется теперь. Скорость записи средняя 667 КБ/с, местами до 1 МБ/с.
Т.е. почти на порядок выше.
Go to the top of the page
 
+Quote Post
kovigor
сообщение Dec 14 2014, 12:29
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(IanPo @ Dec 14 2014, 15:45) *
Ничего не пишется теперь. Скорость записи средняя 667 КБ/с, местами до 1 МБ/с.
Т.е. почти на порядок выше.

Вот, отсюда и пляшите. Примите за аксиому (пока), что со всеми оптимизациями вам удастся удвоить это число. Но пока оставьте его, как есть, и отложите оптимизации на потом.
А теперь начинаем писать, а не отбрасывать. Для начала - в ОЗУ МК. Что при этом поменялось ?
P.S. Какой частотой тактируется карточка ?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 06:04
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016