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 grep
pensato al codice V-USB, ma non ha nemmeno toccato i SPxx
registri.
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_raw
di Roland Riegel.