Я працюю над проектом 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
Роланда Рігеля.