Saya membuat sistem data-logger yang mencatat data dalam kartu SD dengan kecepatan tinggi sekitar 20000-30000 byte per detik. Tetapi perpustakaan SD di Arduino saat ini menulis data sekitar 4500-5000 byte per detik yang terlalu lambat.
Saya telah membaca hack ini untuk meningkatkan kecepatan menulis , tetapi saya bertanya-tanya apakah pendekatan yang lebih langsung mungkin dilakukan, mungkin dengan menyesuaikan pengaturan SPIS .
sd-card
spi
datalogging
baud-rate
Ashish Ranjan
sumber
sumber
Jawaban:
BAIK. Jadi, saya mencoba lib SDFat. Pustaka ini jelas lebih baik daripada pustaka SD default yang datang dengan adruino. Tapi itu bukan bagaimana saya memecahkan masalah data-rate rendah saya.
Saya mengikuti instruksi dari penulis perpustakaan SDFat dari posting ini .
Menurut fat16lib , untuk meningkatkan kecepatan data kita perlu menggunakan flush () dengan bijak. Kami ingin menulis () data dalam setiap siklus, tetapi kami hanya perlu menyiram () sekali setiap 100 siklus atau lebih tergantung pada berapa banyak data yang ditulis dalam setiap siklus. Juga, pastikan untuk menyimpan bendera di SD.open () sebagai 'O_WRITE | O_CREAT 'bukan' FILE_WRITE '.
Ini tentu saja meningkatkan kecepatan dengan faktor yang hebat. Tetapi saya membutuhkan lebih banyak!
Menyimpan data dalam biner ( lihat blog ini ) semakin meningkatkan kinerjanya.
Kecepatan saya saat ini sekitar 100-120 KBps (itu kilo byte) dengan kartu SD kelas 4!
Akhirnya, saya ingin mengucapkan terima kasih atas bantuan Anda.
sumber
Banyak faktor yang akan memutuskan apakah Anda dapat mencapai kecepatan yang diinginkan ini. Hanya beberapa di antaranya.
1. Perangkat Lunak Anda
The SdFat Perpustakaan lebih cepat dari SD Perpustakaan standar Arduino IDE. Ini juga memiliki fungsi kompatibilitas yang mudah digunakan dengan Perpustakaan SD standar. Cobalah.
2. Perangkat Keras Anda
Anda harus menggunakan Kartu SD kelas tinggi. Seperti yang mungkin Anda ketahui, Kartu SD diurutkan ke dalam kelas kinerja. Kebanyakan orang di internet merekomendasikan Kartu SD SanDisk.
sumber
Hindari jabat tangan mendapatkan penyangga!
Gunakan SD.write (buf, size);
Hai semuanya, saya bekerja di sebuah proyek dengan masalah yang sama. Saya mengikuti langkah Anda yang sama dan mendapatkan angka yang persis sama. Saya baru saja memperbaikinya. Masalahnya adalah jabat tangan saat Anda memanggil
SD.write()
.Sebagai gantinya:
Melakukan:
Dalam proyek saya yang pertama saya mendapat 4100 byte, dan yang kedua menggunakan buffer dengan 128 (buf [128]) saya mendapat 145408 byte di proyek saya. Cukup baik.
sumber