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.