Перейти к содержанию
    

STM32+FreeRTOS+FatFS - падение скорости записи на sd карту

12 минут назад, powerchip сказал:

повторяю, изначально время записи 6 мс, через 64 мс интервалы, т.е. при нормальной работе буфера более чем достаточно.

Вы гадаете на кофейной гуще. То что вы там чего-то "изначально" намерили не говорит не о чём. Нужно брать не измеренное время записи, а из документации. Максимальное во всём диапазоне температур, питающих напряжений, технологического разброса изготовления и степени износа карты.

И отделить мух от котлет - время записи секторов от времени стирания блоков.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, powerchip said:

поток данных 4096 байт раз в 64 мс

Тогда 500 / 64*4096=32000 - минимальный размер буфера.

 

10 minutes ago, powerchip said:

недостатка в памяти по сути нет

Есть!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, aaarrr сказал:

Тогда 500 / 64*4096=32000 - минимальный размер буфера.

Не совсем так. Не учли время записи.

как-то так: 4096/.064*(Ter+Twr) - это для случая когда одна карта. Если две карты - будет немного по-другому.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 minute ago, jcxz said:

Не учли время записи.

Ага, и горизонт завален. Ну, ждем правильную и максимально подробную выкладку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 минут назад, aaarrr сказал:

Ага, и горизонт завален. Ну, ждем правильную и максимально подробную выкладку.

Он ещё больше завалится, если использовать ФС. Если, как Вы утверждаете, макс.время стирания блока современных карт может достигать 500мс, то для ФС надо брать ещё бОльшее время задержки единичной операции модификации файла. Ведь при записи в файл может потребоваться не только стирание блока под файл, но и (если сильно не повезло) - то и стирание блока под элемент FAT и под элемент записи каталога, хранящего этот файл. Такое совпадение будет очень редким, но размер буфера должен его учитывать. А значит нужно его ещё на 3 умножить - до 1500мс!  :shok:

Конечно в структуре карты алгоритм работы FAT может быть учтён, и в начале карты могут находиться более быстрые блоки, но это уже, как Вы сами писали - закладываться на внутреннюю структуру карты.

А вот в кольце за раз нужно максимум один блок стирать. В любом случае.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 minutes ago, jcxz said:

макс.время стирания блока современных карт может достигать 500мс

Ну, я считал для старых, которые 250мс. Минимальная оценка. Но у ТС и этого нет, так что углубляться в детали бессмысленно.

 

9 minutes ago, jcxz said:

А вот в кольце за раз нужно максимум один блок стирать. В любом случае.

SD-карта с файловой системой, отличающейся от FAT, есть маргинальное решение. Даже обсуждать нечего.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, aaarrr said:

 

 

11 minutes ago, jcxz said:

Вы гадаете на кофейной гуще. То что вы там чего-то "изначально" намерили не говорит не о чём. Нужно брать не измеренное время записи, а из документации. Максимальное во всём диапазоне температур, питающих напряжений, технологического разброса изготовления и степени износа карты.

И отделить мух от котлет - время записи секторов от времени стирания блоков.

Не согласен. Арнументы:

1. Карты все разные, подстраиваться под одну нет смысла, т.к. завтра  воткнут в устройство другую но того же типа и класса. Повторяю, использовать можно только описание стандарта на карты  от SD CARD ASSOTIATION.

2. Думаю вы не хуже меня знаете как устроена и работате Flash память, минимальная единица стирания (назовем блоком и как правило их там много много, 65536 например, может отличаться в каждой микросхеме NAND) состоит из множества секторов (512 байт), и если мы хотим хоть байт записать в какой то сектор из блока, то сначала контроллер сотрет весь блок, потом мы его заполним постепенно и когда доберемся до сектора из другого блока то сотрет предварительно его - и думаю именно это и есть те самые задержки по 250 мс (максимальная величина оговаривается стандартом). Другими словами если мы пишем последовательно в ранее подготовленный блок (котроллером карты) то никаких лишних стираний не происходит, просто запись секторов, либо одного либо поточная если несколько. 

3. Делаем вывод: стирание блоков можно не рассматривать (да сначала затратили на него кучу времени, ну и все, дальше это нас не волнует) так как оно не имеет непосредственного отношения к записи одного конкретно сектора или совокупности секторов принадлежащих одному блоку.

4. Ну конечно еще кое какую работу контроллер делает, как то проверки всяких crc, определение и пометка битых секторов и т.д. т.п., но это все не постоянная работа контроллера, и не может сказываться на записи подряд абсолютно каждого сектора, тем более такого же не бывает что 2 недели все ОК и он ничего такого не делает а потом раз и при каждой записи начал кучу доп работы делать, тем самым затягивая время - если так произошло то это конкретный сбой в NAND и так просто массивной записью стиранием точно не устранить.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, aaarrr said:

SD-карта с файловой системой, отличающейся от FAT, есть маргинальное решение. Даже обсуждать нечего.

Если мне не изменяет склероз, то скрещивание FAT и кольцевого буфера тут (в конференции в смысле, не в этой теме) уже обсуждали. Можно сделать 1 файл на всю карту и писать в нём по кольцу. И все будут довольны :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 минуты назад, powerchip сказал:

Не согласен. Арнументы:

А в чём несогласны-то? Вы повторили всё то, что я и писал.

23 минуты назад, powerchip сказал:

Другими словами если мы пишем последовательно в ранее подготовленный блок (котроллером карты) то никаких лишних стираний не происходит, просто запись секторов, либо одного либо поточная если несколько. 

Ключевое слово "ранее подготовленный". Т.е. - стёртый. А кто его заранее стёр? До начала работы Вы стираете все блоки карты? И каким интересно образом Вы этого добиваетесь с учётом того, что сама идеология ФС требует "записи поверх"?

27 минут назад, xvr сказал:

Если мне не изменяет склероз, то скрещивание FAT и кольцевого буфера тут (в конференции в смысле, не в этой теме) уже обсуждали. Можно сделать 1 файл на всю карту и писать в нём по кольцу. И все будут довольны :)

...и не забыть запретить файловой системе обновлять запись каталога после каждой записи. А какой тогда смысл в ФС, если только при помощи костылей удаётся приблизить её работу к работе кольца?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

33 minutes ago, powerchip said:

4. Ну конечно еще кое какую работу контроллер делает, как то проверки всяких crc, определение и пометка битых секторов...

...сбор мусора с переносом данных из одного блока в другой с последующим стиранием первого.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

28 minutes ago, xvr said:

Если мне не изменяет склероз, то скрещивание FAT и кольцевого буфера тут (в конференции в смысле, не в этой теме) уже обсуждали. Можно сделать 1 файл на всю карту и писать в нём по кольцу. И все будут довольны :)

 

Да это все понятно, можно много разных решений придумать, и работать будут. Но взгляните на вещи реально, предлагая оригинальные решения организации записи на карту вы тем самым указывайте на невозможность нормального выполнения тривиальной записи файла на sd карту средствами FatFS. Ну это же простейшая задача, просто писать файлы блоками по 4 К с интервалом 64 мс, и решается на любом микроконтроллере, неважно SDIO или SPI, с файловой системой (и какой именно) или без, и карта 10 класса без вопросов позволяет это делать. На самом деле для этой задачи не нужны какие то оригинальные решения, использование FatFS вполне для этого годиться. Думаю не только мне но и многим интересно  выяснить в чем ошибка при данной реализации, что с картой или файловой системой на ней происходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, powerchip said:

карта 10 класса без вопросов позволяет это делать

Нет, не позволяет. У карты 10 класса средняя скорость записи составляет >10МБайт/с. Но никаких гарантий равномерности нет.

 

4 minutes ago, powerchip said:

Думаю не только мне но и многим интересно  выяснить в чем ошибка при данной реализации

Уже много раз написали: недостаточная буферизация.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, aaarrr said:

Нет, не позволяет. У карты 10 класса средняя скорость записи составляет >10МБайт/с. Но никаких гарантий равномерности нет.

 

Уже много раз написали: недостаточная буферизация.

Вы читали начало темы? Изначально карта работает нормально, с ней что то  случается в последствии что приводит к постоянно медленной записи через FatFS. Что мне  не известно. Может вы знаете, так подскажите, а писать про то что недостаточная буферизация не стоит, это очевидно что при большом размере буфера (например для записи раз в 1 сек) я бы даже ничего не заметил. Вопрос не в достаточности буфера, а в том что с картой происходит?

Среднюю скорость никто не гарантирует, но если запись постоянно медленная то и средняя не получится соответствующей стандарту.

Буферизация нужна для того чтоб большие задержки сгладить, а не постоянные для записи каждого сектора или части секторов, они должны писаться быстро. И недостаточной буферизация не изначально а становиться н едостаточной из за возникшей проблемы, а не с изначальным поведением карты (или поведением после устранения проблемы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, powerchip сказал:

Среднюю скорость никто не гарантирует, но если запись постоянно медленная то и средняя не получится соответствующей стандарту.

Отсутствие багов в вашем ПО тоже никто не гарантирует. Из-за которых и может средняя скорость падать.

Проверьте карту, написав простейшее ПО на компе, которое просто пишет периодически файлы на карту и меряет скорость. Выключив кеш естественно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, powerchip said:

Изначально карта работает нормально, с ней что то  случается в последствии что приводит к постоянно медленной записи через FatFS.  Что мне  не известно.

Что-то случается, да. А с другой картой случится что-то другое, но тоже неизвестное. Это нормальная работа карты.

 

3 minutes ago, powerchip said:

если запись постоянно медленная то и средняя не получится соответствующей стандарту

Если запись осуществляется блоками по 4КБайт - конечно. Для карт 10 класса скорость по стандарту измеряется при записи блоками по 512КБайт и более.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...