Estoy trabajando en un proyecto V-USB que se presenta como un teclado utilizando un ATmega328p. La parte USB está funcionando muy bien (no es mi primer proyecto V-USB), pero después de iniciar la pila V-USB con usbInit()
Todas las llamadas a la biblioteca de la tarjeta SD fallan. Si llamo a las mismas funciones antes de usbInit()
Todo funciona a la perfección.
Utilizo un clon de Arduino llamado Diavolino, pero sin el framework de Arduino/cableado. Tengo el USB conectado a las E/S digitales 2 y 3, y la tarjeta SD a las 10-13 (líneas SPI incorporadas).
He buscado en la biblioteca de la tarjeta SD y no he encontrado ninguna señal de que utilice ninguna interrupción o registro que no sea SPxx
. Yo también grep
'd a través del código V-USB, pero ni siquiera toca el SPxx
registros.
La primera señal del problema fue cuando el dispositivo se desconectó cuando debía acceder a la tarjeta SD. Entonces puse usbPoll()
y wdt_reset()
en todos los bucles de manejo de la tarjeta SD, y descubrí que en caso de escritura, la tarjeta espera eternamente el acuse de recibo de la tarjeta después de haber enviado los dos últimos bytes (CRC-16).
La biblioteca de tarjetas SD que utilizo es sd_raw
por Roland Riegel.