ATMega8U2 и режим DFU

Я сделал простую плату с микроконтроллером ATMega8U2 для экспериментов с USB (хочу сделать MIDI, HID, ... устройства). Я черпал вдохновение в Arduino Uno. Если вы посмотрите на схему ниже, вы увидите, что она почти такая же, как Uno.

Я запрограммировал 8U2 прошивкой из проекта Arduino — UNO-dfu_and_usbserial_combined.hex . Теперь, если я подключаю плату к USB, я получаю последовательный порт, и он работает так же, как Arduino, так что это совершенно нормально.

Моя проблема: как мне перевести 8U2 в режим DFU, чтобы я мог менять прошивку без внешнего программатора? Если вы посмотрите на картинку, я подключил HWB (контакт PD7) к земле, так что это должно быть просто — просто нажмите кнопку сброса. К сожалению, это не работает.

Я что-то пропустил? Может быть проблема в неправильных прикусах предохранителей?

Редактировать: Мои предохранители: lfuse=0xff hfuse=0xd9 efuse=0xf4

Редактировать2:

проверил предохранители на чипе

$ avrdude -p at90usb82 -P /dev/tty.usbmodem411 \
> -F -c arduino \
> -U lfuse:r:low:h \
> -U hfuse:r:high:h
$ cat high low
0x00
0x00

Для программирования я использую Arduino Uno в качестве интернет-провайдера и эту команду (на Mac):

$ avrdude -p at90usb82 -F -P /dev/tty.usbmodem411 \
> -c arduino \
> -U flash:w:UNO-dfu_and_usbserial_combined.hex \
> -U lfuse:w:0xFF:m \
> -U hfuse:w:0xD9:m \
> -U efuse:w:0xF4:m \
> -U lock:w:0x0F:m
.......
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
  0xff != 0x00
avrdude: verification error; content mismatch

Так что я полагаю, avrdude не запрограммировал фьюзы, и они все еще пустые. Является ли это возможным? Потому что плата работает корректно, за исключением режима DFU после сброса.

Схема ATMega8U2

Ответы (1)

Установлен ли бит HWBE (HardWare Boot Enable) в ваших фьюзах?

Бит HWBE сброшен (=ноль). Мои предохранители: lfuse=0xff hfuse=0xd9 efuse=0xf4
Итак, проблема была в предохранителях. Не знаю почему, но hfuseне ставился.
Итак, какие предохранители должны быть после установки бита HWBE?