¿Es posible usar una tarjeta SD sin un sistema de archivos?

5

Estoy realizando un proyecto en PIC , que necesita una gran cantidad de memoria para almacenar datos. Quiero usar una tarjeta SD como elemento de almacenamiento de memoria. No quiero ningún tipo de sistema de archivos.

Busqué en Google la interconexión de tarjetas SD con microcontroladores. Encontré que todos ellos están usando algún tipo de sistema de archivos. ¿Es posible conectar una tarjeta SD sin ningún sistema de archivos, como una EEPROM serial ?

    
pregunta Linu Das

3 respuestas

7

No mencionó el PIC que está utilizando, pero asumiendo que es uno de los más pequeños, como el PIC16, entonces con su RAM limitada (el 99% de los PIC16 no tienen más de 1K de RAM) sería imposible implemente incluso un sistema de archivos FAT16 ya que se necesitan múltiples buffers de 512 bytes. (Microchip tiene una biblioteca útil para implementar un sistema de archivos FAT16 / FAT32 pero solo es aplicable a PIC18, PIC24, dsPIC33 y PIC32).

Usted mencionó que debido a la memoria RAM limitada, le gustaría simplemente escribir o leer un byte a la vez. Aunque, como han dicho otros, una tarjeta SD normalmente se divide en bloques de 512 bytes, no es necesario utilizar todos los bytes. En el peor de los casos, podría almacenar solo un byte por bloque y desperdiciar los otros 511. Esto parece absurdo, pero debido al enorme tamaño de las tarjetas SD disponibles en la actualidad, realmente funcionaría. Si tiene una tarjeta de 8 GB, significa que hay bloques de 16M, lo que significa que puede almacenar 16 MB de datos de esta manera.

Sin embargo , será muy lento, algo así como 10 ms o más por bloque de 512 bytes, ya que tendrá que emitir un comando para Borrar cada bloque antes de que se escriba. (En el improbable caso de que solo haya almacenado un byte por bloque, como se mencionó anteriormente, esto significa que tomaría 10 ms para escribir ese byte).

No mencionó la cantidad de datos que está contenida en una de sus entradas de registro, pero sería mucho mejor si pudiera almacenar una entrada (digamos 25 bytes o lo que sea) y escribirla a un bloquear. Por lo tanto, cada bloque se convierte en una entrada de registro. Debido a que el tiempo para escribir los bytes está una vez más dominado por el tiempo que toma borrar el bloque, escribir una entrada de registro de entrada será tan rápido como escribir una sola entrada. byte.

Ya que básicamente estás usando esto como memoria extendida, no tienes que quitar la tarjeta y leerla en una PC (lo que requeriría usar un software especial para volcar los bloques en bruto). En su lugar, ya que de todos modos ya tiene la rutina de bloque de lectura en su código, y asumiendo que tiene un UART, descargaría los datos de registro en forma serial a una PC; Podría usar un puente FTDI UART a USB y los datos aparecerían en su PC como un puerto COM.

    
respondido por el tcrosley
2

Sí, el sistema de archivos cualquier llamará a las funciones de nivel inferior que podrían llamarse algo así como writeBlock y readBlock , que son las que usted llamaría directamente. Dado que está utilizando un microcontrolador, lo que más le gusta es la interfaz con la tarjeta en el modo SPI, que es perfectamente adecuado para aplicaciones de registro, no tanto para aplicaciones más rápidas como la grabación de video.

El tamaño de su bloque será generalmente de 512 bytes, de modo que esa es la cantidad mínima de datos que estará escribiendo / leyendo de una sola vez. Las transacciones de un solo byte no son compatibles (no hay ningún comando que pueda enviar para que esto suceda).

Habiendo dicho eso, es posible que desee pensar cómo va a sacar los datos de la tarjeta, ya que no hay ningún sistema de archivos. Esto significa que cuando lo conecte a su computadora (si es así como está obteniendo los datos) ejecutando un sistema operativo convencional, no habrá ningún archivo que pueda arrastrar y soltar en su escritorio. Tendrá que escribir una aplicación especial que acceda a los datos en bruto de la tarjeta SD.

Por esa sencilla razón, sugeriría utilizar un sistema de archivos, como FAT32, que es muy común en aplicaciones de registro y encontrará varias bibliotecas listas para usar en la red.

    
respondido por el apalopohapa
0

Acabo de leer la especificación de la capa física de la tarjeta SD y experimenté con la lectura y escritura de bloques utilizando AVR. Las respuestas anteriores me parecen desalentadoras, por lo que pondré mis propias vistas

(1) puede ser más fácil leer / escribir bloques para aplicaciones de registrador que solo agregan datos. Seguro que hay muchas bibliotecas FAT disponibles en la red, pero solo se necesita un esfuerzo para conectar una biblioteca FAT. (Al menos si quieres entender lo que estás haciendo). Para agregar registros, solo necesita rastrear el último número de bloque.

(2) Las escrituras de bloque no serán más lentas que las escrituras de FatFS. Cualquier biblioteca FatFS finalmente usaría los mismos comandos. haga un búfer char [512] sin firmar y escríbalo en un bloque.

(3) con tarjetas de 4GB, tendrá aprox. 7 * 10 ^ 6 bloques y eso debería darle 81 días de registro con cada segundo registro sin búfer. El número debería mejorar con el almacenamiento en búfer.

    
respondido por el rjha94

Lea otras preguntas en las etiquetas