Помогите проверить скорость сохранения на SD карту

Тема в разделе "Arduino & Shields", создана пользователем БДмитрий, 13 мар 2017.

  1. rkit

    rkit Гуру

    Вы не поняли. На ту же самую страницу дозаписывать можно. Один раз очистил, а потом дозаписывай кусочками, пока страница не заполнится. А потом просто следующая страница. Никакого космического износа при логировании не протсходит.
    И контроллеры износа в качественных сд-картах есть.
     
    arkadyf нравится это.
  2. Faberge

    Faberge Administrator Администратор

    А вы знаете, что чтобы лишний раз не расходовать ресурс ячеек, контоллер флеш-памяти при удалении данных не стирает информацию из ячеек, а просто помечает сектора как свободные? Чтобы действительно очистить носитель, туда надо что-то записать. Иначе никак.

    Как будто я утверждал обратное. Но даже с контролем износа записывать данные 1000 раз в секунду - не самая лучшая идея.
     
  3. Столкнулся с ещё одной проблемой. Через 30 минут такой записи на карту время сохранения новой строчки постепенно увеличилось с 19 до 23 мс. Как я понял, это связано со структурой FAT32. Для того, что бы определить, куда записывать новую строку, необходимо пробежаться по всем кластерам и найти последний, а на это уходит время. По всей видимости, действительно надо писать напрямую без файловой системы. Это уже сложнее, хотя и с этим могу разобраться. Всё же хотелось узнать, что в моём случае является узким местом карта или контроллер.
     
  4. rkit

    rkit Гуру

    Для этого и существует буфер. Давайте не будем по кругу ходить, ладно?
     
  5. rkit

    rkit Гуру

    Узким местом является шина. Купите лицензированный сд-ридер - скорость увеличится в сотни раз.
     
    arkadyf нравится это.
  6. Faberge

    Faberge Administrator Администратор

    Собственно, я это и предлагал с самого начала делать.
     
  7. rkit

    rkit Гуру

    Он УЖЕ ЕСТЬ. Всё, бесполезно разговаривать.
     
  8. Да и по поводу смерти карты. Мне в этом вопросе это не важно, если она выдержит хотя бы один полный цикл записи во время регистрации. После этого карту можно будет заменить на новую. Только вот цикл у меня длительный - до пяти суток.
     
  9. Faberge

    Faberge Administrator Администратор

    Нет его там. Вы внимательно посмотрите на листинг в первом сообщении - значения по одному сразу записываются на SD карту.
     
  10. а пример со ссылкой на такой ридер можно?
     
  11. rkit

    rkit Гуру

    А вот это вопрос на миллион. Я неправильно сформулировал, наверное. Разработаете, а не купите.
     
  12. Faberge

    Faberge Administrator Администратор

    Пять суток на скорости 1кГц - это 432 миллиона измерений! Если каждый раз вы записываете хотя бы по 10 байт, это 4 Гбайта. Вам действительно нужно столько данных?
     
  13. Faberge

    Faberge Administrator Администратор

    Если вам еще интересно, я замерил скорость на своей плате с STM32, открытие файла, запись банального "Hello World!" и последующее закрытие файла занимают порядка 6.3 мс.
     
  14. :D, знаю, очень много данных, но задача такая. Из всех данных, правда потом надо вытащить только десять секунд. Но, во-первых я заранее не знаю когда произойдёт событие. А во-вторых, я не могу управлять платой ни по радио, ни по проводам, ни по свету, ни звуком. Поэтому автономный регистратор.
    :D Сюда ещё надо посчитать какая батарейка понадобится. Тоже весело получится
     
  15. Вот это уже интересно. А карточка какая, на какой объём и какой размер кластера в файловой системе?
     
  16. Faberge

    Faberge Administrator Администратор

    Так, может быть, если вам нужны только десять секунд, то стоит хранить в памяти только их? Это десять тысяч меток, если метка по 10 байт, то 100 Килобайт оперативной памяти. В кольцевом буфере просто сохраняете данные, если какое-то событие реально произошло, микроконтроллер поймет это по показанию акселерометра и запишет интересующую информацию на карту памяти. По-моему все автомобильные регистраторы так и работают.

    SanDisk, 16 Gb. Но тут скорее имеет значение что микроконтроллер у меня STM32 F7.
     
  17. Я про это думал. Не получится так. Там очень много ложных срабатываний будет. Поэтому надёжнее писать всё. А находить нужное событие по часам реального времени буду. Поэтому такая ужасная задача ставится.
    А за STM32 спасибо. Это уже что-то.
     
  18. Faberge

    Faberge Administrator Администратор

    Пожалуйста. Попробуйте, хотя у меня все равно есть подозрение, что это не самый лучший способ решения вашей задачи.
     
  19. Всё равно медленно. У STM32F7 частота процессора на порядок выше, чем у ардуины уно, а прирост скорости записи такой маленький. Может всё дело в протоколе SPI? По умолчанию частота шины установлена 4 МГц. Попробую увеличить на своей плате частоту до 8 МГц.
     
  20. Faberge

    Faberge Administrator Администратор

    Я вам это уже говорил, но еще раз повторю, скорость тактирования интерфейса SPI (да и вообще, любой периферии) на микроконтроллерах не должна быть равна скорости самого ядра, это разные вещи. Это во-первых.

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

    Я до этого с SD картой и библиотекой на своей плате особо не экспериментировал, но сейчас проверил: двенадцать раз (по числу символов в строке "Hello World!") записал на карточку созданный в ОЗУ массив в 1Кбайт (итого - 12 Кбайт). Результат - в основном 35мс, пару раз почему-то было 45мс, ну, положим даже 40мс в среднем. При этом объем записанной информации, еще раз, был в тысячу раз больше. Если бы время записи во флеш зависело от количества строго линейно, у меня должно было бы уйти больше 6 секунд (12 байт в предыдущем опыте - 6.3мс).

    Поэтому я еще раз говорю, вы сейчас просто забиваете гвозди микроскопом. Дело конечно ваше, но неэффективность вашего подхода мне совершенно очевидна. И я сильно сомневаюсь, что частота в 1кГц измерений вам реально нужна для ваших задач.