Ich arbeite an einem V-USB-Projekt, das mit einem ATmega328p als Tastatur angezeigt wird. Der USB-Teil funktioniert gut (es ist nicht mein erstes V-USB-Projekt), aber nachdem ich den V-USB-Stapel 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 / Wiring Framework. Ich habe den USB an Digital I / O 2 und 3 angeschlossen und die SD-Karte an 10-13 (eingebaute SPI-Leitungen).
Ich durchsuchte die SD-Kartenbibliothek und fand keine Anzeichen dafür, wenn ich andere Interrupts oder Register als verwendete SPxx
. Ich würde zwar auch grep
den V-USB Code, aber er berührt nicht einmal die SPxx
Register.
Das erste Anzeichen für das Problem war, dass das Gerät getrennt wurde, als es auf die SD-Karte zugreifen sollte. Dann habe ich alle SD-Kartenhandhabungsschleifen abgelegt usbPoll()
und wdt_reset()
aufgerufen und festgestellt, dass die Karte beim Schreiben nach dem Senden der letzten zwei Bytes (CRC-16) für immer auf die Bestätigung von der Karte wartet.
Die von mir verwendete SD-Kartenbibliothek stammt sd_raw
von Roland Riegel.