Estoy creando un sistema de registro de datos que registra datos en la tarjeta SD a una alta velocidad de aproximadamente 20000-30000 bytes por segundo. Pero la biblioteca SD en arduino actualmente escribe datos a aproximadamente 4500-5000 bytes por segundo, lo cual es demasiado lento.
He leído este truco para mejorar la velocidad de escritura , pero me pregunto si es posible un enfoque más directo, tal vez ajustando los ajustes de SPIS .
sd-card
spi
datalogging
baud-rate
Ashish Ranjan
fuente
fuente
Respuestas:
OKAY. Entonces, probé la lib SDFat. Esta biblioteca es definitivamente mejor que la biblioteca SD predeterminada que viene con adruino. Pero no es así como resolví mi problema de baja velocidad de datos.
Seguí las instrucciones del autor de la biblioteca SDFat de esta publicación .
De acuerdo con fat16lib , para aumentar la velocidad de datos necesitamos usar flush () sabiamente. Queremos escribir () los datos en cada ciclo, pero solo necesitamos vaciar () una vez cada 100 ciclos más o menos, dependiendo de la cantidad de datos que se escriben en cada ciclo. Además, asegúrese de mantener la bandera en SD.open () como 'O_WRITE | O_CREAT 'en lugar de' FILE_WRITE '.
Esto seguro aumentó la velocidad en un gran factor. ¡Pero necesitaba más!
El almacenamiento de los datos en binario ( consulte este blog ) mejoró aún más el rendimiento.
¡Mi velocidad actual es de aproximadamente 100-120 KBps (eso es kilobytes) con una tarjeta SD de clase 4!
Finalmente, quiero agradecerles por su ayuda.
fuente
Muchos factores decidirían si puede alcanzar esta velocidad deseada. Solo algunos de estos.
1. Su software
La Biblioteca SdFat es más rápida que la Biblioteca SD estándar del IDE Arduino. También tiene una función de compatibilidad fácil de usar con la biblioteca SD estándar. Pruébalo.
2. Su hardware
Debe usar una tarjeta SD de clase alta. Como quizás sepa, las tarjetas SD se clasifican en clases de rendimiento. La mayoría de las personas en Internet recomiendan una tarjeta SD SanDisk.
fuente
¡Evita que el apretón de manos consiga un búfer!
Utilice SD.write (buf, tamaño);
Hola a todos, estoy trabajando en un proyecto con el mismo problema. Estaba siguiendo los mismos pasos tuyos y obtuve exactamente los mismos números. Lo acabo de arreglar. El problema es el apretón de manos cuando llamas al
SD.write()
.En lugar:
Hacer:
En mi proyecto, el primero obtuve 4100 bytes, y el segundo usando un buffer con 128 (buf [128]) obtuve 145408 bytes en mi proyecto. Suficientemente bueno.
fuente