Pracuję nad projektem V-USB, który pokazuje się jako klawiatura za pomocą ATmega328p. Część USB działa świetnie (to nie jest mój pierwszy projekt V-USB), ale po uruchomieniu stosu V-USB usbInit()
wszystkie wywołania biblioteki kart SD kończą się niepowodzeniem. Jeśli wcześniej wywołam te same funkcje usbInit()
, wszystko działa idealnie.
Używam klonu Arduino o nazwie Diavolino, ale bez frameworka Arduino / okablowania. Mam USB podłączony do cyfrowych I / O 2 i 3, a kartę SD do 10-13 (wbudowane linie SPI).
Przejrzałem bibliotekę kart SD i nie znalazłem żadnych śladów, używając żadnych przerwań lub rejestrów innych niż SPxx
. Myślałem też o grep
kodzie V-USB, ale nawet nie dotyka SPxx
rejestrów.
Pierwszą oznaką problemu było odłączenie urządzenia, gdy miało ono uzyskać dostęp do karty SD. Następnie wstawiłem usbPoll()
i wdt_reset()
wywołałem wszystkie pętle obsługi kart SD i stwierdziłem, że w przypadku zapisu karta czeka na potwierdzenie z karty po wysłaniu dwóch ostatnich bajtów (CRC-16).
sd_raw
Używana przeze mnie biblioteka kart SD to Roland Riegel.