Bonjour,
Je m'intéresse à la carte SD et à la lecture d'un fichier. Pour l'instant, je cherche surtout à savoir comment la lire. J'ai utilisé la bibliothèque SD, mais je trouve que cela va vraiment lentement. Voici le programme de test que j'ai utilisé, pour lire sur une carte uno un fichier de 225ko:
// Ce programme teste la vitesse de lecture d'un fichier Test.bin sur la SD
// Pour que le code ne soit pas vide et élliminé, il fait la somme modulo 256
// des octets de ce fichier.
#include <SD.h>
#define BROCHE_CS_DE_SD 10
File fichier;
unsigned long t0; // Départ chronomètre
char c; // Pour que le code soit exécuté
void setup()
{
Serial.begin(115200);
// Ouverture du fichier sans aucune gestion d'erreur
SD.begin(BROCHE_CS_DE_SD);
fichier = SD.open("TEST.BIN"); // fichier de 230.000 octets
// Départ chronomètre
t0=millis();
// Lecture
while (fichier.available()) c+=fichier.read();
// Affichage du temps
Serial.print("Durée de la lecture: "); Serial.print(millis()-t0); Serial.println(" millisecondes");
}
void loop()
{
}
C'est juste pour faire des tests, le fichier est là. Dans la vraie vie, j'y ajoute un certain nombre de tests.
Pour ces 225ko, Arduino met 9,3s, mange 10290 octets de programme et demande 909 octets de RAM
J'ai refais le même essai avec SdFat au lieu de SD, et c'est mieux: 6,6s, 8650 octets de programme et 884 octets de RAM.
En passant par SdBaseFile je passe à 6.4s, 7290 octets programme et 868 octets de RAM
J'ai vu que la classe SdFatEX serait plus rapide, mais qu'elle monopolise le bus SPI, ce qui ne me gêne pas à priori car je n'utilise sur ce bus qu'une ou deux cartes SD. Malheureusement je ne trouve nulle part trace de SdFatEX sauf dans la documentation de SdFat-master. D'après cette page elle serait dans SdFat.h/.cpp, mais je n'en vois pas trace, mon compilateur non plus.
Quelqu'un a-t-il essayé SdFatEX?
C'est sûr que la vitesse est une caractéristique important pour moi, mais aussi la taille de la RAM, rien que la bibliothèque utilise plus de 40% des ressources. J'accepterai bien de perdre un peu de vitesse pour gagner de l’espace RAM. J'avais écrit un programme qui au début doit lire une image sur la carte SD, puis par la suite a besoin de la pile. Mais comme la lecture de la carte utilise le buffer en mémoire statique, je n'en ai plus beaucoup par la suite.
Il y a peut être d'autres possibilités d'accès simples sur une SD?
Merci pour votre collaboration.