Sto lavorando a un progetto V-USB che si presenta come una tastiera usando un ATmega328p. La parte USB funziona alla grande (non è il mio primo progetto V-USB), ma dopo aver avviato lo stack V-USB con usbInit(), tutte le chiamate alla libreria della scheda SD falliscono. Se prima chiamo le stesse funzioni usbInit(), tutto funziona perfettamente.
Uso un clone di Arduino chiamato Diavolino, ma senza il framework Arduino / cablaggio. Ho l'USB collegato agli I / O digitali 2 e 3 e la scheda SD a 10-13 (linee SPI integrate).
Ho guardato attraverso la libreria della scheda SD e non ho trovato alcun segno di esso usando interruzioni o registri diversi da SPxx. Ho anche greppensato al codice V-USB, ma non ha nemmeno toccato i SPxxregistri.
Il primo segno del problema è stato quando il dispositivo si è disconnesso quando doveva accedere alla scheda SD. Quindi ho inserito usbPoll()e wdt_reset()chiamato tutti i loop di gestione della scheda SD e ho scoperto che in caso di scrittura, la scheda attende per sempre il riconoscimento dalla scheda dopo aver inviato gli ultimi due byte (CRC-16).
La libreria di schede SD che uso è sd_rawdi Roland Riegel.