Je travaille sur un projet V-USB qui apparaît comme un clavier utilisant un ATmega328p. La partie USB fonctionne très bien (ce n'est pas mon premier projet V-USB), mais après avoir démarré la pile V-USB avec usbInit()
, tous les appels à la bibliothèque de cartes SD échouent. Si j'appelle les mêmes fonctions auparavant usbInit()
, tout fonctionne parfaitement.
J'utilise un clone Arduino appelé Diavolino, mais sans le cadre Arduino / câblage. J'ai l'USB connecté aux E / S numériques 2 et 3 et la carte SD à 10-13 (lignes SPI intégrées).
J'ai regardé par la bibliothèque de carte SD et n'a trouvé aucun signe de l'aide d'alarmes ou d' autres registres que SPxx
. J'aurais aussi grep
pensé au code V-USB, mais il ne touche même pas les SPxx
registres.
Le premier signe du problème était lorsque l'appareil s'est déconnecté alors qu'il était censé accéder à la carte SD. Ensuite, j'ai mis usbPoll()
et wdt_reset()
appelé dans toutes les boucles de gestion de la carte SD, et j'ai constaté qu'en cas d'écriture, la carte attend indéfiniment l'accusé de réception de la carte après avoir envoyé les deux derniers octets (CRC-16).
La bibliothèque de cartes SD que j'utilise est sd_raw
de Roland Riegel.
Réponses:
J'ai eu un problème comme celui-ci avec USART et je l'ai résolu en modifiant les paramètres du chien de garde. Comme vous le savez, le V-USB utilise un chien de garde et si vous mettez du temps supplémentaire en une seule opération, le chien de garde est activé. Essayez de désactiver le chien de garde et si vous voyez que tout se passe bien, vous pouvez modifier l'heure du chien de garde ou vous pouvez diviser le code interférent (les codes de la carte SD dans votre cas) en plus petites parties et «réinitialiser» le chien de garde entre eux. Mais n'oubliez pas de réactiver votre chien de garde après le débogage car il n'est pas recommandé d'utiliser V-USB sans cela.
la source