Estou trabalhando em um projeto V-USB que aparece como um teclado usando um ATmega328p. A parte USB está funcionando muito bem (não é meu primeiro projeto V-USB), mas depois que eu inicio a pilha V-USB usbInit()
, todas as chamadas para a biblioteca de cartões SD falham. Se eu chamo as mesmas funções antes usbInit()
, tudo funciona perfeitamente.
Eu uso um clone do Arduino chamado Diavolino, mas sem a estrutura do Arduino / fiação. Eu tenho o USB conectado às E / S digitais 2 e 3 e o cartão SD para 10-13 (linhas SPI embutidas).
Examinei a biblioteca de cartões SD e não encontrei nenhum sinal usando interrupções ou registros que não sejam SPxx
. Também pensei grep
no código V-USB, mas ele nem sequer toca nos SPxx
registros.
O primeiro sinal do problema foi quando o dispositivo foi desconectado quando deveria acessar o cartão SD. Depois, coloquei usbPoll()
e wdt_reset()
liguei em todos os loops de manipulação de cartão SD e constatei que, em caso de gravação, o cartão aguarda eternamente o reconhecimento do cartão depois de enviar os dois últimos bytes (CRC-16).
A biblioteca de cartões SD que utilizo é sd_raw
de Roland Riegel.