Я работаю над проектом V-USB, который отображается как клавиатура с использованием ATmega328p. Часть USB работает отлично (это не мой первый проект V-USB), но после запуска стека V-USB usbInit()
все вызовы библиотеки SD-карт завершаются неудачно. Если я вызываю те же функции раньше usbInit()
, все работает отлично.
Я использую клон Arduino под названием Diavolino, но без Arduino / каркаса проводки. У меня USB подключен к цифровым входам / выходам 2 и 3, а SD-карта к 10-13 (встроенные линии SPI).
Я просмотрел библиотеку SD-карт и не обнаружил никаких признаков использования каких-либо прерываний или регистров, кроме SPxx
. Я также хотел grep
бы код V-USB, но он даже не касается SPxx
регистров.
Первым признаком проблемы было, когда устройство отключалось, когда предполагалось получить доступ к SD-карте. Затем я вставил usbPoll()
и wdt_reset()
позвонил во все циклы обработки SD-карты и обнаружил, что в случае записи карта всегда ожидает подтверждения от карты после отправки последних двух байтов (CRC-16).
Библиотека SD-карт, которую я использую, sd_raw
принадлежит Роланду Ригелю.