проблемы с прошивкой avrdude

Я хочу записать шестнадцатеричный файл на пользовательскую плату ATmega2560. Я использую этот программатор USBasp для перепрошивки (версия прошивки 1.01) в моей системе Mac OS X 10.12.6. Все шестнадцатеричные файлы скомпилированы с помощью avr-gcc (GCC) 4.9.2.

Я использую эту команду для записи фьюзов (без загрузчика):

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega2560 -cusbasp -Pusb -U lfuse:w:0xff:m -U hfuse:w:0xd9:m -U efuse:w:0xfd:m -s -F

Что работает нормально: я могу прошивать программы меньшего размера (43 266 байт), и они сразу работают без загрузчика. Если я прошиваю большие программы (99 986 байт), они не запускаются. Я могу проверить, запускается ли программа, потому что они выплевывают данные через TTL. Меньшая программа работает, но большая ничего не производит.

Я включил "Проверка кода" и вижу небольшие программы:

avrdude: 43264 bytes of flash verified

большие программы:

avrdude: verification error, first mismatch at byte 0x0001
         0x90 != 0x94
avrdude: verification error; content mismatch

Есть какие-нибудь намеки на эту сторону?

Во-вторых: после удаления всей прошивки, когда я прошиваю пользовательский загрузчик (из Atmel Studio - предохранители Ext. 0xFD, High: 0xD2, Low: 0xFF), команда:

/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega2560 -cusbasp -Pusb -U flash:w:ATmega_Example.hex:i

и после чтения флэш-памяти загрузчик оказался в нескольких блоках во флэш-памяти.

Из считанного шестнадцатеричного файла (блоки данных):

Строка 1

>:20000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00

Вся флэш-память 0xFF до строки 1921

:20F0000077C000009BC0000099C0000097C0000095C0000093C0000091C000008FC0000066

Еще немного данных до строки 1995.

:20F940000895F894FFCF65300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31

Вся флэш-память 0xFF до строки 3970.

:20F0000077C000009BC0000099C0000097C0000095C0000093C0000091C000008FC0000066

Еще немного данных до строки 4044.

:20F940000895F894FFCF65300000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF31

И так далее... Я могу найти похожие данные 4 раза в файле.

Это проблема с перепрошивкой или со чтением данных с чипа?

Дайте мне знать, если вам нужна дополнительная информация, чтобы помочь мне здесь.

, 👍-1

Обсуждение

какие-либо изменения при использовании флага -D?, @neu-rah

никаких изменений, когда я прошиваю с опцией "-D", @jblaze

Определите «меньше» и «больше» по размеру кода., @Ignacio Vazquez-Abrams

маленький: 43,266 байт большой: 99,986 байт, @jblaze

Я добавил информацию для проверки. При больших проблемах это не удается: avrdude: ошибка проверки, первое несоответствие в байте 0x0001 0x90 != 0x94 avrdude: ошибка проверки; несоответствие содержания, @jblaze

Может ли ограничение размера быть 65 536 байт? IIRC, возникла проблема с адресами длиннее 16 бит, требующими специального расширения обычного протокола загрузки. Но я не помню, был ли предел размера 2 ^ 16 байт или 2 ^ 16 16-битных слов., @Edgar Bonet


3 ответа


1

Лично я использую AVRDUDESS для загрузки скетча на atmega328p и attiny85. Попробуйте использовать его и запустить обнаружение. Я отвечаю на это, потому что AVRDUDESS очень прост в использовании и может помочь вам показать больше информации о вашей ошибке. Я думаю, что у вас может быть плохая проводка или неисправный кабель.

,

1

Я не уверен, что это решит вашу проблему, но несколько лет назад у меня была аналогичная проблема. Я пытался загрузить программу на ATTiny13A, используя дешевый e-bay USPasp, и получил ошибки проверки. Одним из шагов моего решения было изменение идентификатора программиста с «-c usbasp» на «-c usbasp-clone»

Подробнее здесь: https://www.nongnu.org/avrdude/user-manual/avrdude_4. HTML

USBasp и USBasp-клон

,

1

Я знаком с этой проблемой. У меня не USBasp, а USBtinyISP, но я думаю, что проблема та же самая.

USBtinyISP не может читать или записывать больше 64 КБ. Поскольку AVR — это 8-битные машины с 16-битной адресацией, они не могут самостоятельно адресовать более 64 КБ. Специальная схема адресации используется во время выполнения, а также во время флэш-памяти. (Я думаю, что во время прошивки размер страницы был больше.)

Мне удалось обойти эту проблему, используя оригинальный Atmel AVRISP mkII.

,