jcxz 243 1 апреля, 2017 Опубликовано 1 апреля, 2017 · Жалоба Вывод: похоже, что FatFs от Чана тут не при чём... До этого на этой карте тестировал другую FAT32 - Похоже, что там что-то не так. А тут всё норм. Ещё вроде желательно, чтобы все структуры (начала копий FAT, бутзапись, корневой каталог) были выровнены по границе блока стирания карты. Тогда вроде операции записи выполняются значительно быстрее. Размер блока стирания указан в CSD. Может на той проблемной карте было невыровнено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ioann_II 0 1 апреля, 2017 Опубликовано 1 апреля, 2017 · Жалоба Ещё вроде желательно, чтобы все структуры (начала копий FAT, бутзапись, корневой каталог) были выровнены по границе блока стирания карты. Тогда вроде операции записи выполняются значительно быстрее. Размер блока стирания указан в CSD. Может на той проблемной карте было невыровнено. Проверить теперь сложнее - карту уже отформатировал.... Но поковыряю FAT32, ту, что упоминал ранее, возможно найду причину... тогда напишу. На этой карте читал регистр CSD - так кратность стирания там 1 байт (они называют это granularity). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hold 0 12 октября, 2017 Опубликовано 12 октября, 2017 (изменено) · Жалоба На обычной SD 2 ГБ емкостью получал скорости записи 3.7 МБ/с, чтения 7.3 МБ/с. STM32F429, SDIO 4бит, DMA(тупое ожидание окончания записи), FatFs_R0.13. Писал файл размером 32 МБ из SDRAM и читал его же в SDRAM. Хочется большой скорости - нужно писать большими блоками, можно собирать предварительно в буфер в SDRAM, затем скопом писать. Если писать теже самые 32МБ но блоками по 512 байт, то скорость записи всего около 200КБ/с, на порядок меньше. Возможно не оптимальный драйвер, да и надо найти карточку SDHC классом повыше попроверять. 17/10/12 14:55:34->[EXT MEM: SDCARD]->Write end, speed: 3889 KB/s ( 33 554 432 (32.00 MB) in 8424 ms) 17/10/12 14:55:34->[EXT MEM: SDCARD]->Read end, speed: 7534 KB/s ( 33 554 432 (32.00 MB) in 4349 ms) Изменено 12 октября, 2017 пользователем Hold Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 54 12 октября, 2017 Опубликовано 12 октября, 2017 · Жалоба Если писать теже самые 32МБ но блоками по 512 байт, то скорость записи всего около 200КБ/с, на порядок меньше. Возможно не оптимальный драйвер, да и надо найти карточку SDHC классом повыше попроверять. Это не проблема ФС, а карты памяти, ибо флеш не оптимизирован за запись мелкими кусками(менее 4К). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hold 0 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба Нашел карту SDHC 4 класс 8 ГБ. Или что-то с картой не так, или с драйвером: 17/10/13 11:36:04->[EXT MEM: SDCARD]->Free: 7 833 767 936 (7.29 GB) 17/10/13 11:36:04->[EXT MEM: SDCARD]->Total: 7 846 363 136 (7.30 GB) 17/10/13 11:36:13->[EXT MEM: SDCARD]->Write end, speed: 557 KB/s ( 4 194 304 (4.00 MB) in 7345 ms) 17/10/13 11:36:13->[EXT MEM: SDCARD]->Read end, speed: 5165 KB/s ( 4 194 304 (4.00 MB) in 793 ms) Читает/пишет без ошибок, однако скорость никуда не годится. На ПК показывает 4 МБ/с Надо поискать 10-й класс. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 13 октября, 2017 Опубликовано 13 октября, 2017 (изменено) · Жалоба Это не проблема ФС, а карты памяти, ибо флеш не оптимизирован за запись мелкими кусками(менее 4К). а там (в либе) ограничение на 512 может быть, так что (в некоторых случаях) никак Изменено 13 октября, 2017 пользователем Огурцов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 54 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба а там (в либе) ограничение на 512 может быть, так что (в некоторых случаях) никак Дак ведь в настройках фатфса все прекрасно правиться :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба Читает/пишет без ошибок, однако скорость никуда не годится. На ПК показывает 4 МБ/с Надо поискать 10-й класс. Это не столько от класса карточки зависит, сколько от организации программы и от организации карточки. Попробуйте разобраться, на что именно у Вас тратится основное время, например, при file append: 1) поиск первого кластера файла в FAT 2) прохождение по цепочке кластеров до последнего 3) чтение нужного сектора 3а) поиск свободного кластера (если нужен) 4) обновление сектора 5) запись сектора обратно 6) обновление FAT и всех копий FAT (изменение длины файла, добавка кластера в цепочку если нужно) Только (5) и (6) от класса карточки и зависят, остальное- от быстродействия программы и расположения файла на карточке. Тут гораздо больше чтения, чем записи. И очень часто этот бесконечный поиск-обновление FAT занимает много времени. Я в критичной к времени записи задаче (запись кольцевого файла кэша определенной длины) делал при старте поиск цепочки кластеров нужной длины, объявлял их занятыми файлом, и далее напрямую пихал туда данные. Было значительно быстрее чем на каждый 200-байтовый чих проходить полную стандартную цепочку с поиском в FAT. В общем случае помогает укорочение цепочки в FAT (использование длинного кластера), нахождение файла в начале карточки (первые кластеры) и несегментированность карточки (кластеры файла следуют друг за другом). Ну и расположение файлов в корневой директории, чтобы цепочка поиска была короче. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hold 0 13 октября, 2017 Опубликовано 13 октября, 2017 (изменено) · Жалоба Да, дело было в размере кластера. Флешку не форматнул, проверял как есть. В итоге кластер был всего лишь 4КБ. Поставил кластер 64КБ, скорость выросла: 17/10/13 16:01:15->[EXT MEM: SDCARD]->Write end, speed: 3700 KB/s ( 33 554 432 (32.00 MB) in 8856 ms) 17/10/13 16:01:15->[EXT MEM: SDCARD]->Read end, speed: 7824 KB/s ( 33 554 432 (32.00 MB) in 4188 ms) Понятно что с таким размером кластера, невыгодно хранить много мелких файлов, т.к. зарезервируется слишком много пустого места. Для сравнения взял обычную SD на 2 гб, кластер также 64 КБ 17/10/13 16:03:52->[EXT MEM: SDCARD]->Write end, speed: 3666 KB/s ( 33 554 432 (32.00 MB) in 8937 ms) 17/10/13 16:03:52->[EXT MEM: SDCARD]->Read end, speed: 7814 KB/s ( 33 554 432 (32.00 MB) in 4193 ms) Нашлась карта SDXC на 64 Гб, 10 класс. Кластер также выставил в 64 кбайта, стоит exFAT. Скорость уже куда интереснее: 17/10/13 16:11:20->[EXT MEM: SDCARD]->Free: 63 830 753 280 (59.44 GB) 17/10/13 16:11:20->[EXT MEM: SDCARD]->Total: 63 831 015 424 (59.44 GB) 17/10/13 16:11:27->[EXT MEM: SDCARD]->Write end, speed: 7063 KB/s ( 33 554 432 (32.00 MB) in 4639 ms) 17/10/13 16:11:27->[EXT MEM: SDCARD]->Read end, speed: 7813 KB/s ( 33 554 432 (32.00 MB) in 4194 ms) Изменено 13 октября, 2017 пользователем Hold Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба Понятно что с таким размером кластера, невыгодно хранить много мелких файлов, т.к. зарезервируется слишком много пустого места. Думаете что-то сэкономить, взяв маленькую, но быструю SD-карточку? И не надейтесь. Сейчас уже не могу по нормальной цене найти Сандиск 10-й класс 8GB, только 16GB. Хотя еще прошлой зимой весь ебей был ими завален, но зато тогда уже закончились 4GB. Так что или нужно оптимизироваться под низкоскоростные, либо не думать об объеме. Кстати, у меня из нескольких сотен SD карточек (Сандиск), после агрессивной нон-стоп работы в течении нескольких лет уже штук 8 стали в странную позу (не битые сектора, а что-то в электронике- работают только первые пару секунд и отваливаются). Вот думаю, может потому что 10-й класс и нужно что-то низкоскоростное и более дубовое брать... Проблема в том, что пока удостоверюсь в их надежности (через годик-два), их уже перестанут выпускать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Hold 0 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба У меня интерес по поводу скорости был скорее академический, да и скорости мне такие не нужны. Флешка нужна лишь в качестве логгера, объемы данных смешные, запись редкая. Отлаживал драйвер SDIO (DMA + выравнивание и прочие грабли), прикручивал к FatFs, решил глянуть а сколько вообще скорости можно достить (мало ли, вдруг задача будет). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба решил глянуть а сколько вообще скорости можно достить (мало ли, вдруг задача будет). Проблема эту достигнутую скорость удержать. Попробуйте повторить опыт в наиболее плохом режиме, возможном во время эксплуатации (кластер не меняется, меняется только содержимое карточки): 1) карточка почти полностью забита- то есть нужно дописывать в последние, например, 10% карточки 2) файлы сильно сегментированы и FAT целиком не вмещается в буфер RAM 3) файл "засунут" в глубину структуры папок, а не в лежит в корне диска. Вложенные папки- это вообще важный момент для оптимизации времени доступа. Я как-то видел серьезные тормоза из-за непонимания программистом работы FAT - удалялись устаревшие файлы из сабдиректориев, но зато не удалялись сами директории. И бедный МК бегал по всей вложенной структуре из сотен пустых папок, чтобы дойти до последней, в которой таки и был актуальный требующий обновления файл. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 54 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба вложенной структуре из сотен пустых папок, чтобы дойти до последней, в которой таки и был актуальный требующий обновления файл. Жесть какая-то :crying: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 13 октября, 2017 Опубликовано 13 октября, 2017 · Жалоба В общем случае помогает укорочение цепочки в FAT (использование длинного кластера), нахождение файла в начале карточки (первые кластеры) и несегментированность карточки (кластеры файла следуют друг за другом). Ну и расположение файлов в корневой директории, чтобы цепочка поиска была короче. У автора, судя из письма, имеется SDRAM. Простое и очевидное решение в этом случае - кеширование по чтению. Тогда описанные Вами проблемы минимизируются. Кеширование на уровне ниже FatFS. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VCucumber 0 13 октября, 2017 Опубликовано 13 октября, 2017 (изменено) · Жалоба Дак ведь в настройках фатфса все прекрасно правиться :laughing: предполагается, что чен чем-то думал а вообще, соглашусь - стоит просто проверить Изменено 13 октября, 2017 пользователем Огурцов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться