Как увеличить скорость записи на SD-карту в Ардуино
Я создаю систему регистрации данных, которая записывает данные на SD-карту с высокой скоростью около 20000-30000 байт в секунду. Но библиотека SD в arduino в настоящее время записывает данные со скоростью около 4500-5000 байт в секунду, что слишком медленно.
Я прочитал этот хак, чтобы улучшить скорость записи, но мне интересно, возможен ли более прямой подход, возможно, путем настройки настроек. Как увеличить скорость записи на SD Card?
@Ashish Ranjan, 👍13
Обсуждение3 ответа
Лучший ответ:
ОК. Итак, я попробовал использовать 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.
Я попробую это сделать через несколько дней и сообщу вам о результатах. Спасибо., @Ashish Ranjan
Избегайте попадания рукопожатия в буфер!
Использование SD.запись (buf,размер);
Привет всем, я работаю в проекте с той же проблемой. Я следовал тем же вашим шагам и получил точно такие же цифры. Я только что все уладил. Проблема заключается в рукопожатии, когда вы вызываете SD.write()
.
Вместо этого:
//для каждого цикла он будет выполнять рукопожатие
while(<yourCondition>){
SD.write(<yourValue>);
}
Сделайте:
char buf[length];
while(yourCondition){
buf[index] = yourValue;
}
SD.write(buf,index);//только одно рукопожатие
В моем проекте в первом я получил 4100 байт, а во втором использовал буфер с 128 (buf[128]). В моем проекте у меня 145408 байт. Достаточно хорошо.
Я не знаю, что вы подразумеваете под рукопожатием, потому что AFAIK SD в любом случае использует внутренний буфер (512 КБ). Но я также заметил, что запись отдельных байтов с помощью File.write выполняется чрезвычайно медленно, и компилятор, похоже, не может его оптимизировать (в конце концов, он просто копирует один байт во внутренний буфер и проверяет, заполнен ли буфер и должна ли начаться передача SPI). Использование моего собственного внешнего буфера и File.write(buffer,size) привело к значительному повышению производительности и в моем приложении., @oliver
- Запись на SD-карту с частотой дискретизации 50 мс или меньше? У меня есть скетч, который записывает в sd каждую 1 секунду, но застревает на более высоких частотах дискретизации. Пожалуйста помоги?
- Какие контакты можно использовать для выбора микросхемы (CS, CC) на Arduino Nano Every?
- Сделать CS (chip select) для работаты в SPI (для и SD карты и OLED)
- Использование экрана SD-карты на Arduino Due
- Загрузить сайт с SD-карты
- ESP32 сохранение данных на SD-карту в формате .csv не форматируется правильно
- Отобразить изображение с SD-карты на ЖК-дисплей ILI9486
- Аппаратный SPI Arduino NANO не работает
Вы можете попробовать [SdFat](https://github.com/greiman/SdFat ) библиотека - она намного эффективнее, чем SD-библиотека по умолчанию., @Majenko
Возможно, вы также захотите убедиться, что ваша SD-карта хорошего качества, хотя 5000 байт кажутся слишком малыми для любого типа SD-карты., @Len