私は、毎秒約20000〜30000バイトの高速でSDカードにデータを記録するデータロガーシステムを作成しています。しかし、arduinoのSDライブラリは現在、毎秒約4500〜5000バイトでデータを書き込みますが、これは遅すぎます。
私はこのハックを読んで書き込み速度を改善しましたが、おそらくSPISettingsを調整することで、より直接的なアプローチが可能かどうか疑問に思っています。
私は、毎秒約20000〜30000バイトの高速でSDカードにデータを記録するデータロガーシステムを作成しています。しかし、arduinoのSDライブラリは現在、毎秒約4500〜5000バイトでデータを書き込みますが、これは遅すぎます。
私はこのハックを読んで書き込み速度を改善しましたが、おそらくSPISettingsを調整することで、より直接的なアプローチが可能かどうか疑問に思っています。
回答:
OK。そこで、SDFatライブラリを試しました。このライブラリは、adruinoに付属しているデフォルトのSDライブラリよりも間違いなく優れています。しかし、それが低データレートの問題を解決した方法ではありません。
私はこの投稿からSDFatライブラリの著者の指示に従いました。
fat16libによると、データレートを上げるには、flush()を賢く使用する必要があります。各サイクルでデータをwrite()したいのですが、各サイクルで書き込まれているデータの量に応じて、100サイクルごとに一度だけflush()する必要があります。また、SD.open()のフラグを 'O_WRITE | 「FILE_WRITE」の代わりに「O_CREAT」。
これにより、速度が大幅に向上しました。しかし、もっと必要でした!
データをバイナリで保存すると(このブログをご覧ください)、パフォーマンスがさらに向上しました。
現在の速度は、クラス4 SDカードで約100〜120 KBps(キロバイト)です。
最後に、皆さんの助けに感謝します。
この必要な速度に到達できるかどうかは、多くの要因によって決まります。これらの一部のみ。
SdFatライブラリが速くArduinoのIDEの標準SD図書館を超えています。また、標準SDライブラリとの使いやすい互換性機能も備えています。やってみよう。
高級SDカードを使用する必要があります。ご存知かもしれませんが、SDカードはパフォーマンスクラスに分類されています。インターネットのほとんどの人は、SanDisk SDカードを推奨しています。
ハンドシェイクがバッファを取得しないようにしてください!
SD.write(buf、size);を使用し ます。
みなさん、こんにちは、私は同じ問題を持つプロジェクトで働いています。私はあなたと同じ手順に従っていましたが、まったく同じ数字を取得しました。修正しました。問題は、を呼び出すときのハンドシェイクですSD.write()
。
代わりに:
//for each loop, it is going to make a handshake
while(<yourCondition>){
SD.write(<yourValue>);
}
行う:
char buf[length];
while(yourCondition){
buf[index] = yourValue;
}
SD.write(buf,index);//only one handshake
私のプロジェクトでは、最初のプロジェクトで4100バイト、2番目のプロジェクトで128のバッファ(buf [128])を使用して、プロジェクトで145408バイトを取得しました。十分です