[résolu] Vitesse d'écriture sur SD

Bonjour,

Depuis quelque temps, j'utilise des cartes sd (merci à ceux du forum qui m'ont assisté) pour stocker des données.

Comme j'ai voulu augmenter la cadence d'écriture je me suis vite rendu compte que cette vitesse d'écriture octet par octet était bien faible (plusieurs ms pour écrire un seul octet)

file.write(data)

Probablement que les cartes SD sont plutôt conçues pour écrire par bloc.

J'ai noté que l'écriture d'un bloc d'octets était pratiquement aussi rapide que l'écriture d'un seul octet.

J'ai donc créé un bloc (tableau) de 400 octets en Ram, à chaque boucle le tableau est complété; puis une fois plein "vidé" dans la SD.

file.write(buf, len)

Maintenant la rapidité est bien améliorée.

Ma question est la suivante : comment connaître la taille de bloc optimum pour une écriture rapide ?

(étant entendu que la ram pour un Atmel 328 est limitée)

Merci pour vos réponses.

SD

pepe:
Bonsoir

D'après le code source de la bibliothèque SD (et comme on aurait pu s'y attendre compte tenue de la mémoire RAM disponible sur l'ATmega328p), la taille d'un bloc est de 512 octets.

Si le fichier est traité exclusivement en blocs de 512 octets, alors l'écriture des données s'effectue directement, sans utilisation du tampon intermédiaire (cacheBuffer_.data de SDVolume).

Merci pour cette réponse rapide et précise.

Pour l'instant, alors que le programme n'est pas encore terminé, il me reste juste 600 octets de Ram libres en prenant un transfert de bloc de 400 octets.

Je vais donc attendre qu'il soit totalement finalisé avant de voir si je peux augmenter à 512 octets la taille du bloc.

Alors je ferais un chronométrage rapide de l'opération de copie pour voir si le jeu en vaut la chandelle ...

Merci et bonne soirée.

S.D