El dispositivo que estoy desarrollando es un complemento de almacenamiento en tarjeta SD para una computadora retro, la tarjeta SD SanDisk Ultra II de 1.0 GB en un zócalo de tarjeta SD (no tengo idea si la marca es importante, simplemente es lo que Tengo).
La tarjeta SD es el único dispositivo en el bus SPI; un cambiador de nivel asegura que la tarjeta reciba señales de 3.3 V; MISO se alimenta a través de un interruptor de bus a un FPGA de 3.3 V. El FPGA implementa un mecanismo de registro de cambios cronometrado, que se sincroniza ocho veces, desviando los datos de salida a MOSI y capturando los datos de entrada de MISO.
Muchos dispositivos conectados a muchas computadoras funcionan bien.
Yo uso el modo SPI. Inicializo la tarjeta, la acelero a 4 MHz y envío el comando de lectura de bloque único.
Observo que el primer byte de datos devuelto ocasionalmente tiene una corrupción de un bit. Normalmente, el bit 0 se establece cuando no debería estarlo, pero también he visto el bit 1 cuando no debería estarlo. Todos los demás bytes son perfectamente correctos, siempre.
Se probaron varios dispositivos y se conectaron a varios equipos host. El problema solo se vio con un dispositivo conectado a una computadora. El dispositivo o la computadora funcionan bien con otras computadoras o dispositivos.
Sospeché errores de tiempo en mi código de controlador, pero estoy seguro de que he hecho los ocho ciclos de reloj (enviando 0xFF
, leyendo el primer byte de datos) antes de leerlo.
Me pregunto, ¿esto podría estar relacionado con el voltaje o los niveles de corriente, que podrían ser sutilmente diferentes según el dispositivo o la computadora?
Me pregunto si una tarjeta SD de repente necesita extraer una corriente adicional, justo cuando comienza a generar datos.