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.
Respostas:
Tive um problema assim com o USART e resolvi-o alterando as configurações do cão de guarda. Como você sabe, o V-USB usa um cão de guarda e, se você dedicar mais tempo a uma operação, o cão de guarda é ativado. Tente desativar o cão de guarda e, se vir tudo bem, você pode alterar a hora do cão de guarda ou dividir o código que interfere (os códigos do cartão SD no seu caso) em partes menores e "Reiniciar" o cão de guarda entre eles. Mas não se esqueça de reativar seu cão de guarda após a depuração, pois não é recomendável usar o V-USB sem isso.
fonte