Je crée un système d'enregistrement de données qui enregistre les données sur la carte SD à une vitesse élevée d'environ 20000-30000 octets par seconde. Mais la bibliothèque SD en arduino écrit actuellement des données à environ 4500-5000 octets par seconde, ce qui est trop lent.
J'ai lu ce hack pour améliorer la vitesse d'écriture , mais je me demande si une approche plus directe est possible, peut-être en ajustant les SPISettings .
sd-card
spi
datalogging
baud-rate
Ashish Ranjan
la source
la source
Réponses:
D'ACCORD. J'ai donc essayé la bibliothèque SDFat. Cette bibliothèque est certainement meilleure que la bibliothèque SD par défaut fournie avec adruino. Mais ce n'est pas ainsi que j'ai résolu mon problème de faible débit.
J'ai suivi les instructions de l'auteur de la bibliothèque SDFat de ce post .
Selon fat16lib , pour augmenter le débit de données, nous devons utiliser judicieusement flush (). Nous voudrions écrire () les données dans chaque cycle, mais nous n'avons besoin de flush () qu'une fois tous les 100 cycles environ en fonction de la quantité de données écrites dans chaque cycle. Veillez également à conserver l'indicateur dans SD.open () sous la forme «O_WRITE | O_CREAT 'au lieu de' FILE_WRITE '.
Cela a certainement augmenté la vitesse d'un grand facteur. Mais j'avais besoin de plus!
Le stockage des données en binaire ( consultez ce blog ) a encore amélioré les performances.
Ma vitesse actuelle est d'environ 100-120 Kbps (c'est-à-dire kilo-octets) avec une carte SD de classe 4!
Enfin, je tiens à vous remercier pour votre aide.
la source
De nombreux facteurs décideront si vous pouvez atteindre cette vitesse souhaitée. Seulement certains d'entre eux.
1. Votre logiciel
La bibliothèque SdFat est plus rapide que la bibliothèque SD standard de l'IDE Arduino. Il a également une fonction de compatibilité facile à utiliser avec la bibliothèque SD standard. Essaye le.
2. Votre matériel
Vous devez utiliser une carte SD de haute qualité. Comme vous le savez peut-être, les cartes SD sont triées en classes de performances. La plupart des internautes recommandent une carte SD SanDisk.
la source
Évitez que la poignée de main obtienne un tampon!
Utilisez SD.write (buf, size);
Bonjour à tous, je travaille sur un projet avec le même problème. Je suivais les mêmes étapes que vous et obtenais exactement les mêmes numéros. Je viens de le réparer. Le problème est la poignée de main lorsque vous appelez le
SD.write()
.Au lieu:
Faire:
Dans mon projet, le premier, j'ai eu 4100 octets, et le second utilisant un tampon avec 128 (buf [128]), j'ai eu 145408 octets dans mon projet. Assez bien.
la source