Saltar al contenido

Cómo aumentar la velocidad de escritura de la tarjeta SD en arduino

Si encuentras alguna incompatibilidad con tu código o proyecto, recuerda probar siempre en un entorno de testing antes añadir el código al proyecto final.

está bien. Entonces, probé la librería SDFat. Esta biblioteca es definitivamente mejor que la biblioteca SD predeterminada que viene con adruino. Pero no fue así como resolví mi problema de baja tasa de datos.

Seguí las instrucciones del autor de la biblioteca SDFat de esta publicación.

De acuerdo a fat16lib, para aumentar la tasa de datos necesitamos usar flush() sabiamente. Nos gustaría escribir () los datos en cada ciclo, pero solo necesitamos vaciar () una vez cada 100 ciclos, dependiendo de la cantidad de datos que se escriban en cada ciclo. Además, asegúrese de mantener la marca en SD.open() como ‘O_WRITE | O_CREAT’ en lugar de ‘FILE_WRITE’.

Esto seguro aumentó la velocidad por un gran factor. ¡Pero necesitaba más!

Almacenar los datos en binario (consulte este blog) mejoró aún más el rendimiento.

¡Mi velocidad actual es de aproximadamente 100-120 KBps (es decir, kilobytes) con una tarjeta SD de clase 4!

Finalmente, quiero agradecerles por su ayuda.

Muchos factores decidirán 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 de 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 de SanDisk.

¡Evite que el apretón de manos obtenga un búfer!

Usar
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 de:

//for each loop, it is going to make a handshake
while()
    SD.write();

Hacer:

char buf[length];
while(yourCondition)
    buf[index] = yourValue;

SD.write(buf,index);//only one handshake

En mi proyecto el primero que obtuve 4100 bytes, y el segundo usando un buffer con 128 (buf[128]) Tengo 145408 bytes en mi proyecto. Suficientemente bueno.

Valoraciones y reseñas

Nos puedes corroborar nuestra publicación fijando un comentario o valorándolo te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *