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 grepden V-USB Code, aber er berührt nicht einmal die SPxxRegister.
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_rawvon Roland Riegel.