Estoy interactuando con una tarjeta SD y un chip de interfaz CAN (el MCP2515) en una interfaz SPI. Para la velocidad de escritura, estoy usando una biblioteca FAT y abriendo un archivo para transmitir. Si detengo temporalmente la transmisión de datos a la tarjeta SD para recopilar datos del chip CAN, la reanudación de las escrituras de la tarjeta causará daños en el archivo.
No puedo ver por qué los dos interactúan entre sí. Si en el nivel más bajo no hay ninguna superposición al tirar de los pines CS bajos para cada dispositivo, seguramente la tarjeta SD estaría ciega a lo que estaba sucediendo en el bus SPI. He confirmado que liberar el pin CS de la tarjeta SD no causa ningún problema, ni tirar del pin SC del chip de interfaz CAN. Es solo con una transferencia SPI que la escritura de la tarjeta SD se corrompe.
¿Se trata de un problema de la electrónica o es más probable que sea un problema de firmware / biblioteca al que me enfrento?
Más información:
- Microprocesador: ATmega2560
- Interfaz CAN: MCP2515
- Tarjeta SD: Transcend 4GB C10 MicroSD HC
- Desplazador de nivel de tarjeta SD: 74hc4050
Las escrituras se realizan en trozos completos de 512 bytes, alineados con los bloques en la tarjeta SD. El síntoma de fallo es que el siguiente bloque escrito devuelve un error de escritura. Aún no he podido descifrar el significado de la falla, aunque se devuelven dos códigos por cada falla. Estos pueden ser generados por el propio brote de la tarjeta SD que todavía no sé:
- 0x13
- 0xFF, 0xE0, 0x7F o 0x3F
Una vez que se completa la escritura SD, su pin CS se coloca alto antes de que el pin CAN CS se agote. Una vez que se completan las operaciones CAN y se intercambian los pines CS. Aunque esto es cuando ocurre la falla.