Я создаю систему регистрации данных, которая регистрирует данные на SD-карте с высокой скоростью, около 20000-30000 байт в секунду. Но библиотека SD в Arduino в настоящее время записывает данные со скоростью около 4500-5000 байт в секунду, что слишком медленно.
Я прочитал этот хак, чтобы улучшить скорость записи , но мне интересно, возможен ли более прямой подход, возможно, путем настройки SPISettings .
sd-card
spi
datalogging
baud-rate
Ашиш Ранджан
источник
источник
Ответы:
OK. Итак, я попробовал SDFat lib. Эта библиотека определенно лучше стандартной библиотеки SD, которая поставляется с adruino. Но это не то, как я решил свою проблему низкой скорости передачи данных.
Я следовал указаниям автора библиотеки SDFat из этого поста .
Согласно fat16lib , чтобы увеличить скорость передачи данных, мы должны использовать flush () с умом. Мы хотели бы записывать () данные в каждом цикле, но нам нужно только сбрасывать () один раз каждые 100 циклов или около того, в зависимости от того, сколько данных записывается в каждом цикле. Кроме того, обязательно сохраните флаг в SD.open () как «O_WRITE | O_CREAT 'вместо' FILE_WRITE '.
Это, безусловно, увеличило скорость. Но мне нужно больше!
Хранение данных в двоичном формате ( см. Этот блог ) еще больше повысило производительность.
Моя текущая скорость составляет примерно 100-120 Кбит / с (это килобайт) с SD-картой класса 4!
Наконец, я хочу поблагодарить вас, ребята, за вашу помощь.
источник
Многие факторы будут определять, сможете ли вы достичь желаемой скорости. Только некоторые из них.
1. Ваше программное обеспечение
SdFat библиотека быстрее , чем стандартный SD библиотеки Arduino IDE. Он также имеет простую в использовании функцию совместимости со стандартной библиотекой SD. Попробуйте это.
2. Ваше оборудование
Вы должны использовать SD-карту высокого класса. Как вы, наверное, знаете, SD-карты сортируются по классам производительности. Большинство людей в Интернете рекомендуют SD-карту SanDisk.
источник
Избегайте рукопожатия, получая буфер!
Используйте SD.write (buf, size);
Привет всем, я работаю в проекте с той же проблемой. Я следовал твоим шагам и получил точно такие же цифры. Я только что исправил это. Проблема в рукопожатии, когда вы звоните
SD.write()
.Вместо:
Делать:
В моем проекте первый получил 4100 байт, а второй, использующий буфер с 128 (buf [128]), получил в своем проекте 145408 байт. Достаточно хорошо.
источник