Estoy trabajando en un proyecto V-USB que aparece como un teclado usando un ATmega328p. La parte USB funciona muy bien (no es mi primer proyecto V-USB), pero después de comenzar con la pila V-USB usbInit()
, todas las llamadas a la biblioteca de tarjetas SD fallan. Si llamo a las mismas funciones antes usbInit()
, todo funciona perfectamente.
Yo uso un clon de Arduino llamado Diavolino, pero sin el marco de Arduino / cableado. Tengo el USB conectado a E / S digital 2 y 3, y la tarjeta SD a 10-13 (líneas SPI incorporadas).
Miré a través de la biblioteca de tarjetas SD y no encontré ninguna señal usando interrupciones o registros que no sean SPxx
. También pensé en grep
el código V-USB, pero ni siquiera toca los SPxx
registros.
La primera señal del problema fue cuando el dispositivo se desconectó cuando se suponía que debía acceder a la tarjeta SD. Luego puse usbPoll()
y llamé wdt_reset()
a todos los bucles de manejo de la tarjeta SD, y descubrí que en caso de escritura, la tarjeta espera para siempre el reconocimiento de la tarjeta después de haber enviado los dos últimos bytes (CRC-16).
La biblioteca de tarjetas SD que uso es sd_raw
de Roland Riegel.