Estoy trabajando en un proyecto V-USB que aparece como un teclado con un ATmega328p. La parte de USB está funcionando 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 perfectamente.
Utilizo un clon de Arduino llamado Diavolino, pero sin el marco Arduino / wiring. Tengo el USB conectado a las E / S digitales 2 y 3, y la tarjeta SD a 10-13 (líneas SPI incorporadas).
Busqué en la biblioteca de tarjetas SD y no encontré ninguna señal de ello usando ninguna interrupción o registro que no sea SPxx . También grep 'd a través del código V-USB, pero ni siquiera toca los registros SPxx .
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 wdt_reset() llamadas en todos los bucles de manejo de la tarjeta SD, y encontré que en caso de escritura, la tarjeta espera para siempre el acuse de recibo de la tarjeta después de haber enviado los últimos dos bytes (CRC-16).
La biblioteca de tarjetas SD que uso es sd_raw de Roland Riegel.