¿Cómo puede V-USB estropear el SPI incorporado de un ATmega328p?

14

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.

    
pregunta dnet

1 respuesta

1

Tuve un problema como ese con USART y lo resolví cambiando la configuración del perro guardián. Como usted sabe, V-USB usa un perro guardián y si le dedica tiempo extra a una sola operación, el perro guardián se activa. Intente desactivar el perro guardián y si ve que todo va bien, puede cambiar la hora del perro guardián o puede dividir el código de interferencia (los códigos de la tarjeta SD en su caso) en partes más pequeñas y "Restablecer" el perro guardián entre ellos. Pero no olvide volver a activar su perro guardián después de la depuración, ya que no se recomienda usar V-USB sin eso.

    
respondido por el Aug

Lea otras preguntas en las etiquetas