Allregia 9 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба скорее всего оно форматирует с выравниваением (так чтоб блоки логические не пересекали границы физических страниц в флэшке) 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 сек ает болшую погрешность (и в это время входило открытие и закрытие файла). Завтра, если время будет, попробую что Вы просите. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg_D 0 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба А частоту клока карты в 48мгц не пробовали ставить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 4 сентября, 2012 Опубликовано 4 сентября, 2012 · Жалоба А частоту клока карты в 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" пока не разобрался. Но думаю, что "булылочное горлышко" пока не в этой частоте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба Еще интересный факт: при переводе SDIO в 1-битный режим (а точнее - блокировании перевода в 4-х битный), время записи 12МБ блоками по 4К на 4ГБ флешке увеличилось не в 4 раза а всего в полтора, с 10с до 14с, а на 1ГБ флешке почти не изменилось - было 37с стало 39с. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 69 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба Факты есть, а системы нет. Вам нужно проверить работу интерфейса, начиная с самого нижнего уровня, то есть: 1. Запустили чтение N мегабайт с карты в "пустоту" без FS. 2. Оценили время передачи блока 3. Оценили время нахождения карты в BUSY 4. На основании пунктов 2 и 3 сделали выводы о качестве работы ПО 5. Повторяем процедуру при различных длинах последовательности секторов То же самое для записи. Когда будут получены убедительные цифры на нижнем уровне, можно будет переходить к "тюнингу" FS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба Да, конечно. Я просто рассказываю интересные моменты, с которыми столкнулся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 6 ноября, 2012 Опубликовано 6 ноября, 2012 · Жалоба Возникла проблема - пока писал на малой скорости все было ОК, потом перешел к скорости побольше, и выяснилось следующее: - говорили не раз, что по стандарты SD может давать задержку до 250мс. - исходя из этого был с хоршим запасом выбран буфер - запись у меня 200КБ/с, буфер примерно на 620мс. - пишу блоками по 4КБ. - uSD 1Gb, отформатирована в самом устройстве, вижу задержки 50-100мс, проблем нет. - uSD Kingston 4Gb, отформатирована в самом устройстве, каждые ~20 секунд возникат задержка в 900-950мс, и естествено моего буфера не хватает. Что теперь делать, не знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 7 ноября, 2012 Опубликовано 7 ноября, 2012 · Жалоба Посмотрел более внимательно флешка входит в паузу 430мс, потом после записи 7-8 блоков по 4К опять входит в такую-же паузу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба Отформатировал карточку в компе при помощи SDFormatter - и все секундные паузы пропали! Остались изредка 60-180мс, что укладывается в стандарт и в мой буфер с тройным запасом. Возросла также скорость записи на 1Гб карточке вдвое, и на 4Гб карточке - на ~30% Можно сделать следующие выводы: 1) Форматирование обычным способом в компе дает крайне негативные результаты. 2) Форматирование в устройстве при помощи FatFS f_mkfs() дает результаты гораздо лучше. Но все же в FatFs форматирование делается как для SD так и для SDHC не на 100% корректно. 3) Форматирование в компе специальной утилитой делается корректно и дает отличный результат. Надеюсь кому-то поможет, а если кто додумается как исправить FatFs чтобы она тоже корректно форматировала, будет просто отлично. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба 2) Форматирование в устройстве при помощи FatFS f_mkfs() дает результаты гораздо лучше. Но все же в FatFs форматирование делается как для SD так и для SDHC не на 100% корректно. А что именно не устраивает в f_mkfs()? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба А что именно не устраивает в f_mkfs()? Видимо, надо сравнивать результаты работы SDFormatter vs f_mkfs() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 8 ноября, 2012 Опубликовано 8 ноября, 2012 · Жалоба А что именно не устраивает в f_mkfs()? Проблема описана в #22, #23. Решение проблемы - в #24 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
lotor 0 9 ноября, 2012 Опубликовано 9 ноября, 2012 · Жалоба Проблема описана в #22, #23. Решение проблемы - в #24 Я просто f_mkfs() использую и таких проблем пока не наблюдал. SDFormatter какой размер кластера выставляет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 9 ноября, 2012 Опубликовано 9 ноября, 2012 · Жалоба Я просто f_mkfs() использую и таких проблем пока не наблюдал. Если бы у меня был буфер в 2 раза больше, или я писал бы в 2 раза медленее, я бы наверное этого тоже не заметил. Заметил потому что пауза ~1s, а буфер у меня только на 0.6s (чего при моей скорости записи согласно стандарту на карточку должно хватать с 3-е краным запасом!) SDFormatter какой размер кластера выставляет? Тот же самый - 32К на 4гб карточке. Но разница между просто РС, f_mksf и SDFormatter - поразительная! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 9 ноября, 2012 Опубликовано 9 ноября, 2012 · Жалоба Может после форматирования SDFormatter'ом карточка считает, что все (или почти все) страницы стёрты, потому не затрачивает время на их очистку перед записью? Что будет, если карту заполнить до упора, потом стереть файлы (не форматировать) и проверить скорость? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться