Ich arbeite an einem V-USB-Projekt, das mit einem ATmega328p als Tastatur angezeigt wird. Der USB-Teil funktioniert großartig (es ist nicht mein erstes V-USB-Projekt), aber nachdem ich den V-USB-Stack mit gestartet habe, schlagen usbInit()
alle Aufrufe der SD-Kartenbibliothek fehl. Wenn ich vorher die gleichen Funktionen aufrufe usbInit()
, funktioniert alles einwandfrei.
Ich verwende einen Arduino-Klon namens Diavolino, aber ohne das Arduino/Verdrahtungs-Framework. Ich habe den USB an Digital I/O 2 und 3 angeschlossen und die SD-Karte an 10-13 (eingebaute SPI-Leitungen).
Ich habe die SD-Kartenbibliothek durchgesehen und keine Anzeichen dafür gefunden, dass sie andere Interrupts oder Register als verwendet SPxx
. Ich hatte auch grep
den V-USB-Code, aber er berührt nicht einmal die SPxx
Register.
Das erste Anzeichen des Problems war, als das Gerät die Verbindung trennte, als es auf die SD-Karte zugreifen sollte. Dann habe ich alle SD-Karten-Handling-Loops eingefügt usbPoll()
und wdt_reset()
aufgerufen und festgestellt, dass die Karte beim Schreiben ewig auf eine Bestätigung von der Karte wartet, nachdem sie die letzten beiden Bytes (CRC-16) gesendet hat.
Die SD-Kartenbibliothek, die ich verwende, ist sd_raw
von Roland Riegel.
Ich hatte ein solches Problem mit USART und löste es, indem ich die Watchdog-Einstellungen änderte. Wie Sie wissen, verwendet V-USB einen Watchdog und wenn Sie zusätzliche Zeit in einen Vorgang investieren, wird der Watchdog aktiviert. Versuchen Sie, den Watchdog zu deaktivieren, und wenn Sie sehen, dass alles gut geht, können Sie die Watchdog-Zeit ändern oder den störenden Code (in Ihrem Fall die SD-Kartencodes) in kleinere Teile aufteilen und den Watchdog zwischen ihnen "zurücksetzen". Aber vergessen Sie nicht, Ihren Watchdog nach dem Debuggen wieder zu aktivieren, da es nicht empfohlen wird, V-USB ohne ihn zu verwenden.
David Tweed
dnet
Chris Stratton
Chris Stratton
dnet
egrep -r '(PIN|DDR|PORT)B' . | grep -v sd_raw
keine vernünftigen Ergebnisse erzielt. Die erforderlichen Verzögerungen werden über den SPI-Port (Dummy-Reads) durchgeführt. Ich werde versuchen, die Bibliothek durch etwas anderes zu ersetzen, obwohl ihre Implementierung allem anderen, das ich gefunden habe, ziemlich nahe kommt.Chris Stratton
Jim Paris
Gustavo Litowski
Chintalagiri Shashank