|
|
  |
STM32F4 + FatFS + uSD, проблема со скоростью. |
|
|
|
Sep 4 2012, 15:26
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Serg_D @ Sep 4 2012, 16:36)  скорее всего оно форматирует с выравниваением (так чтоб блоки логические не пересекали границы физических страниц в флэшке) http://forum.ixbt.com/topic.cgi?id=27:9465Это я в курсе. И Чен про это писал, что РС форматирует флешки неправильно. Но вот для 1гб флешки - разницы никакой уже небыло, форматировал я ее на РС или в устройстве. Результат одинаковый. (С 4гб флешкой кроме скорости, еще и размер кластера при этом разный - РС на 4к делала, а по дефолту - 32к). еще интересно. что для 1гб флешки по мере приближения размера блока к размеру кластера, скорость растет кардинально, а для 4гб - кардинальный рост прекращается уже при блоке = 1/4 кластера, а при 1/2 кластера уже снижается медленее: Код Размер блока Скорость записи Скорость записи 1гб флешки, ФАТ16, 1гб флешки, ФАТ32, кластер 16К, MByte/s кластер 32К, MByte/s 512 0.077 0.25 1K 0.1 0.42 2K 0.2 0.82 4K 0.33 1.23 16K (1.03) 2.05 32K 1.03 (2.8) Скобками выделен размер блока равный размеру кластера Цитата А скорости чтения этого же файла не скажете сколько получается? особенно интересно было бы рандомное блоками по 32к например. Нет, не пробовал, только линейное, получил около 2 сек на 12байт файл, но засекал наручными часами, что в районе 2 сек ает болшую погрешность (и в это время входило открытие и закрытие файла). Завтра, если время будет, попробую что Вы просите.
|
|
|
|
|
Sep 4 2012, 16:29
|
Участник

Группа: Участник
Сообщений: 56
Регистрация: 3-12-04
Пользователь №: 1 307

|
А частоту клока карты в 48мгц не пробовали ставить?
|
|
|
|
|
Sep 4 2012, 17:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Serg_D @ Sep 4 2012, 18:29)  А частоту клока карты в 48мгц не пробовали ставить? Как? Fsdio = SDIOCLK/(DIV+2); ТАк что минимум 24 получается. В описании написано: * The SD Card frequency (SDIO_CK) is computed as follows: * * +---------------------------------------------+ * | SDIO_CK = SDIOCLK / (SDIO_INIT_CLK_DIV + 2) | * +---------------------------------------------+ * * In transfer mode and according to the SD Card standard, * make sure that the SDIO_CK frequency don't exceed 25MHz * and 50MHz in High-speed mode switch. * To be able to use a frequency higher than 24MHz, you should * use the SDIO peripheral in bypass mode. Refer to the * corresponding reference manual for more details. Я с этим "bypass mode" пока не разобрался. Но думаю, что "булылочное горлышко" пока не в этой частоте.
|
|
|
|
|
Nov 6 2012, 18:40
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Возникла проблема - пока писал на малой скорости все было ОК, потом перешел к скорости побольше, и выяснилось следующее: - говорили не раз, что по стандарты SD может давать задержку до 250мс. - исходя из этого был с хоршим запасом выбран буфер - запись у меня 200КБ/с, буфер примерно на 620мс. - пишу блоками по 4КБ. - uSD 1Gb, отформатирована в самом устройстве, вижу задержки 50-100мс, проблем нет. - uSD Kingston 4Gb, отформатирована в самом устройстве, каждые ~20 секунд возникат задержка в 900-950мс, и естествено моего буфера не хватает. Что теперь делать, не знаю.
|
|
|
|
|
Nov 8 2012, 10:06
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Allregia @ Nov 8 2012, 13:17)  2) Форматирование в устройстве при помощи FatFS f_mkfs() дает результаты гораздо лучше. Но все же в FatFs форматирование делается как для SD так и для SDHC не на 100% корректно. А что именно не устраивает в f_mkfs()?
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Nov 9 2012, 06:47
|
Местный
  
Группа: Свой
Сообщений: 476
Регистрация: 3-07-07
Из: Санкт-Петербург
Пользователь №: 28 866

|
Цитата(Allregia @ Nov 8 2012, 19:01)  Проблема описана в #22, #23. Решение проблемы - в #24 Я просто f_mkfs() использую и таких проблем пока не наблюдал. SDFormatter какой размер кластера выставляет?
--------------------
Ковырял чукча отверткой в ухе, звук в телевизоре и пропал.
|
|
|
|
|
Nov 9 2012, 07:47
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Lotor @ Nov 9 2012, 08:47)  Я просто f_mkfs() использую и таких проблем пока не наблюдал. Если бы у меня был буфер в 2 раза больше, или я писал бы в 2 раза медленее, я бы наверное этого тоже не заметил. Заметил потому что пауза ~1s, а буфер у меня только на 0.6s (чего при моей скорости записи согласно стандарту на карточку должно хватать с 3-е краным запасом!) Цитата SDFormatter какой размер кластера выставляет? Тот же самый - 32К на 4гб карточке. Но разница между просто РС, f_mksf и SDFormatter - поразительная!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|