¿Es posible usar el modo de 4 pines para una tarjeta SD con un microcontrolador en lugar del modo SPI?

¿Es posible usar el modo de 4 pines de una tarjeta SD al diseñar una interfaz con un microcontrolador, o siempre debe usar el modo SPI? Estoy pensando particularmente en un microcontrolador como un PIC24. El modo SPI es más lento, obviamente, y estoy tratando de pensar en mejores formas de mejorar el rendimiento del dispositivo.

Respuestas (2)

Eso es lo que he encontrado:

El protocolo SD de 1 bit es un protocolo serial síncrono con una línea de datos, que se usa para transferencias masivas de datos, una línea de reloj para sincronización y una línea de comando, que se usa para enviar tramas de comando. El protocolo SD de 1 bit admite explícitamente el uso compartido de bus. Un sencillo esquema de arbitraje de un solo maestro permite que varias tarjetas SD compartan un solo reloj y una línea DAT0. El protocolo SD de 4 bits es casi idéntico al protocolo SD de 1 bit. La diferencia principal es que las transferencias de datos masivos de ancho de bus ocurren a través de un bus paralelo de 4 bits en lugar de un solo cable. Con un diseño adecuado, tiene el potencial de cuadruplicar el rendimiento de las transferencias masivas de datos. Tanto los protocolos SD de 1 bit como los de 4 bits por defecto requieren protección CRC de transferencias masivas de datos. Un CRC, o comprobación de redundancia cíclica, es un método simple para detectar la presencia de errores simples de inversión de bits en un bloque de datos transmitido. En el modo SD de 4 bits, los datos de entrada se multiplexan en las cuatro líneas de bus (DAT) y el CRC de 16 bits se calcula de forma independiente para cada una de las cuatro líneas. En una implementación de todo el software, calcular el CRC en estas condiciones puede ser tan complejo que la sobrecarga computacional puede mitigar los beneficios del bus de 4 bits más amplio. Sin embargo, un CRC paralelo de 4 bits es trivial de implementar en hardware, por lo que es más probable que las soluciones de lógica programable o ASIC personalizado se beneficien del bus más amplio. calcular el CRC en estas condiciones puede ser tan complejo que la sobrecarga computacional puede mitigar los beneficios del bus de 4 bits más amplio. Sin embargo, un CRC paralelo de 4 bits es trivial de implementar en hardware, por lo que es más probable que las soluciones de lógica programable o ASIC personalizado se beneficien del bus más amplio. calcular el CRC en estas condiciones puede ser tan complejo que la sobrecarga computacional puede mitigar los beneficios del bus de 4 bits más amplio. Sin embargo, un CRC paralelo de 4 bits es trivial de implementar en hardware, por lo que es más probable que las soluciones de lógica programable o ASIC personalizado se beneficien del bus más amplio.

http://alumni.cs.ucr.edu/~amitra/sdcard/Additional/sdcard_appnote_foust.pdf

Creo que no tendría suficiente poder para calcular crc32 en modo de 4 bits. Pero sin CRC podría ser posible.

Algunas de las series PIC24F tienen generadores CRC de 16 bits. Me imagino que sería posible combinarlos de alguna manera para obtener CRC de 32 bits.
De hecho, aquí se necesita CRC-16, por lo que se ve mucho mejor.
Una interfaz SD de cuatro bits con bits no será más rápida que una interfaz SPI asistida por hardware. (Según Wikipedia, una tarjeta SD puede funcionar a 208 MHz. Esa velocidad será difícil para un microprocesador PIC).
@markrages: creo que uno podría realizar lecturas en modo de 4 bits, sin CRC, aproximadamente 3 veces más rápido que SPI. Coloque el cable del reloj en un pin PWM y configure las cosas de modo que si uno realiza la secuencia repetidamente, swapf PORTC,w,c / iorwf PORTA,w,c / movwf POSTINC0,cla tarjeta SD se sincronizará durante cada uno movwf. Conseguir el momento adecuado para el inicio y el final de cada ráfaga puede ser complicado (por supuesto, las interrupciones tendrían que desactivarse absolutamente) pero probablemente no imposible. Apuntar a una tasa de un byte por cuatro ciclos podría simplificar las cosas.
Agregar el cálculo de CRC probablemente reduciría la velocidad a la mitad (la adición xorwf crc,w,c / movf PLUSW1,w,c / movwf crc,f,cdebería funcionar a un costo de 3 ciclos más / byte si uno tiene una tabla adecuada de 256 bytes en RAM; si uno trabajara con pares de bytes, posiblemente podría hacerlo mejor).

mejorar el rendimiento en modo de 1 bit

Hay una gran variación en el rendimiento de una tarjeta SD a otra.

(a) Todas las tarjetas dan una respuesta de "ocupado" a un comando hasta que esté listo para manejar el siguiente. Una tarjeta aún puede cumplir con los estándares incluso si se tarda un segundo en escribir un bloque de datos. Tal vez podría probar algunas tarjetas diferentes y ver cuál funciona mejor para usted: el mejor rendimiento neto, la latencia más baja, la menor cantidad de energía para despertar y almacenar los datos y volver a dormir, o lo que sea más importante para su proyecto. Si el rendimiento es lo más importante, querrá elegir la clasificación de clase de velocidad de la tarjeta SD adecuada : la velocidad más alta que pueda permitirse, o al menos la clase más baja que brinde un rendimiento adecuado.

(b) Si bien el estándar requiere que todas las tarjetas SD manejen comunicaciones de hasta 25 Mbit/s en modo de 1 bit, algunas tarjetas parecen funcionar con tasas de bits mucho más altas ; tal vez podría probar algunas tarjetas diferentes y mejorar. su tasa de bits a algo más rápido que funcione con esa tarjeta en particular. (¿Existe algo como "detección automática de velocidad en baudios" para usar automáticamente la velocidad máxima admitida por cualquier tarjeta que esté conectada actualmente?)

usando el modo de 4 pines

Un microcontrolador puede admitir el uso del modo de transferencia SDI de cuatro bits. Las 2 opciones que conozco son:

(a) Conecte la tarjeta a un adaptador de tarjeta SD USB que utilice el modo de transferencia SDI de cuatro bits. Enchufe el adaptador en un conector host USB conectado a un microcontrolador que pueda actuar como host USB, como el PIC24FJ32GB002.

(b) Enchufe la tarjeta en una ranura para tarjeta SD conectada directamente a un microcontrolador. ¿Debo pagar regalías a la gente de la tarjeta SD si mi dispositivo "simplemente" es compatible con las tarjetas SD? Durante mucho tiempo, varias patentes y secretos comerciales requerían que una persona que diseñara una interfaz de controlador de host de este tipo firmara un NDA y comprara una licencia de patente de la SD Card Association. Pero escuché que el estándar de interfaz SD se está volviendo más abierto desde 2006 .