14 votos

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

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.

1voto

Karsten Puntos 8168

Yo tuve un problema así con USART y lo resolví cambiando la configuración del watch dog. Como sabes V-USB utiliza un watch dog y si pones tiempo extra en una operación, el watch dog se activa. Prueba a desactivar el watch dog y si ves que todo va bien, puedes cambiar el tiempo del watch dog o puedes dividir el código que interfiere (los códigos de la tarjeta SD en tu caso) en partes más pequeñas y "resetear" el watch dog entre ellas. Pero no te olvides de volver a activar el watch dog después de la depuración, ya que no es recomendable utilizar V-USB sin eso.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X