El dispositivo que estoy desarrollando es un complemento de almacenamiento en tarjeta SD para un ordenador retro, tarjeta SD SanDisk Ultra II de 1,0 GB en un zócalo para tarjetas SD (no tengo ni idea de si la marca es significativa, simplemente es lo que tengo).
La tarjeta SD es el único dispositivo en el bus SPI; un conmutador de nivel garantiza que la tarjeta reciba señales a 3,3 V; MISO se alimenta a través de un conmutador de bus a una FPGA de 3,3 V. La FPGA implementa un mecanismo de registro de desplazamiento con reloj, que se sincroniza ocho veces, desplazando los datos de salida a MOSI y capturando los datos de entrada de MISO.
Muchos dispositivos conectados a muchos ordenadores funcionan bien.
Utilizo el modo SPI. Initalizo la tarjeta, la acelero a 4 MHz y envío el comando de lectura de un solo bloque.
Observo que el primer byte de datos devuelto ocasionalmente tiene una corrupción de un bit. Normalmente el bit 0 se pone cuando no debería, pero también he visto el bit 1 puesto cuando no debería. Todos los demás bytes son perfectamente correctos, siempre.
Se probó la conexión de varios dispositivos a varios ordenadores anfitriones. El problema sólo se observó con un dispositivo conectado a un ordenador. El dispositivo o el ordenador funcionan bien con otros ordenadores o dispositivos.
Sospeché que había errores de sincronización en el código de mi 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 si esto podría estar relacionado con los niveles de tensión o de corriente, que podrían ser sutilmente diferentes según el dispositivo o el ordenador.
Me pregunto si una tarjeta SD tiene que consumir de repente una corriente extra, justo cuando empieza a emitir datos.