Загрузчик Pro Mini через Arduino ISP

VAFER
Offline
Зарегистрирован: 10.12.2015

Доброго времени суток, уважаемые.

Решил залить альтернативный загрузчик в Pro mini 3.3в чтобы работала на 1МГц и 1.8в.

Столкнулся с ошибкой:

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x03
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x03
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x03
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x03
Ошибка при записи загрузчика.
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x66
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03
 
Подскажите куда копать.
 
Если уже было, буду благодарен за ссылку. Сам не нашел на форуме.
 
 
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, в комплекте с загрузчиком обычно дают конфиг для boards.txt . Cудя по вопросу самостоятельно вы его не напишите )

Гриша
Offline
Зарегистрирован: 27.04.2014

вот, чем-то схожая тема, только читайте внимательно.

VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, в комплекте с загрузчиком обычно дают конфиг для boards.txt . Cудя по вопросу самостоятельно вы его не напишите )

Конфиг я сделал. И мой старенький freeduino превратил в программатор :-)
Но вот что-то с Pro mini не работает.
С другими версиями всегда все работало.

Стаж уже более 5 лет :-)

Мб Pro mini 3.3в имеет какую-то особенность?!

VAFER
Offline
Зарегистрирован: 10.12.2015

Вставка в конфиг:

## Arduino Pro or Pro Mini (1.8V, 1 MHz) w/ ATmega328
## --------------------------------------------------
pro.menu.cpu.1MHzatmega328=ATmega328 (1.8V, 1 MHz)
 
pro.menu.cpu.1MHzatmega328.upload.maximum_size=30720
pro.menu.cpu.1MHzatmega328.upload.maximum_data_size=2048
pro.menu.cpu.1MHzatmega328.upload.speed=9600
 
pro.menu.cpu.1MHzatmega328.bootloader.low_fuses=0x62
pro.menu.cpu.1MHzatmega328.bootloader.high_fuses=0xD4
pro.menu.cpu.1MHzatmega328.bootloader.extended_fuses=0x06
pro.menu.cpu.1MHzatmega328.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_1MHz.hex
 
pro.menu.cpu.1MHzatmega328.build.mcu=atmega328p
pro.menu.cpu.1MHzatmega328.build.f_cpu=1000000L
 
 
Не очень хорошо понимаю тему с фьюзами.
Возможно проблема как раз в этом месте.
Фьюзы взял из аналогичного проекта: http://forum.pimatic.org/topic/383/tips-battery-powered-sensors
 
 
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, для начала покажите свой конфиг. Стаж обычно не имеет никакого значения, есть товарищи, годами занимаются, и все равно не понимают бинарных операций, синтаксиса элементарных команд типа  for, do-while, итд .

VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, для начала покажите свой конфиг.

Выложил чуть выше :-)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, мне не нравится этот конфиг. В нём нехватает нескольких строк, есть лишняя строка (максимум дата сайз), максимум сайз указан 30720, явно под 2х килобайтный загрузчик. Но фузами назначен загрузчик на 1 килобайт. Бред какой-то, а не конфиг.

VAFER
Offline
Зарегистрирован: 10.12.2015

Мб проблема в напряжениях?
Freeduino (программатор) имеет 5в логику на портах, а Pro mini 3.3в.

Где можно посмотреть расшифровку ошибки?
Что значит resp=0x66 и resp=0x03 ?

VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, мне не нравится этот конфиг. В нём нехватает нескольких строк, есть лишняя строка (максимум дата сайз), максимум сайз указан 30720, явно под 2х килобайтный загрузчик. Но фузами назначен загрузчик на 1 килобайт. Бред какой-то, а не конфиг.

Ок, чтобы Вы посоветовали ?
Фьюзы - это моя "слабая" сторона :-)

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, напряжения не имеют отношения к проблеме.  Могу посоветовать найти другой бутлоадер и конфиг к нему.

VAFER
Offline
Зарегистрирован: 10.12.2015

Я пробовал грузить родной бутлоадер от pro mini 8мгц - ошибка таже.

Гриша
Offline
Зарегистрирован: 27.04.2014

VAFER пишет:

Я пробовал грузить родной бутлоадер от pro mini 8мгц - ошибка таже.

уточните марку контроллера на борту платы

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, и как вы подключили плату? надеюсь подали +5 вольт на Vcc ?

VAFER
Offline
Зарегистрирован: 10.12.2015

Гриша пишет:

уточните марку контроллера на борту платы

MEGA328P

VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, и как вы подключили плату? надеюсь подали +5 вольт на Vcc ?

Нет, подал 3.3в с "программатора".

Попробовал подать 5в - ничего не изменилось.

VAFER
Offline
Зарегистрирован: 10.12.2015

Может быть дело в скорости обмена?!
Я пробовал 7200 (видел такую рекомендацию на одном из форумов), 9600, 19200.
Результат одинаковый.

Эту скорость я прописывал в скетч "программатора".
Контролировал в настройках COM-порта в диспетчере устройств.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, сначала добейтесь того, что будет прошиваться родной бутлоадер. Потом уже можно с "тёмными" лошадками заняться. Напряжение программатора и программируемой микросхемы должно быть одинаковым. Скоростью играться нельзя, она предопределена в бутлоадере, и с другой просто не станет работать.

VAFER
Offline
Зарегистрирован: 10.12.2015

Добился нормальной прошивки штатного загрузчика.
скорость 19200
питание 5в

При попытке залить тот же самый загрузчик с другими фьюзами получаем:
 

avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x15

avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x15
 
Ошибка при записи загрузчика.
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x14
 
avrdude: stk500_getparm(): (a) protocol error, expect=0x14, resp=0x01
avrdude: stk500_initialize(): (a) protocol error, expect=0x14, resp=0x10
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.
 
avrdude: stk500_disable(): unknown response=0x12
 
 
Делаю вывод что проблема во фьюзах.
Где можно доходчиво почитать об этом ?
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, гугл и яндекс с удовольствием вам расскажут, даже если хорошо попросить, то на русском языке :) И поищите другой бутлоадер, например тут можно попробовать сконструировать)  Хотя недавно был случай, этот же конструктор создал нерабочий бутлоадер..

VAFER
Offline
Зарегистрирован: 10.12.2015

Нашел калькулятор фьюзов: http://www.engbedded.com/fusecalc/

Попробовал сгенерировать, получил:

pro.menu.cpu.1MHzatmega328.bootloader.low_fuses=0x42
pro.menu.cpu.1MHzatmega328.bootloader.high_fuses=0xD8
pro.menu.cpu.1MHzatmega328.bootloader.extended_fuses=0xFF

Но при прошивке вылазит ошибка:

Ошибка при записи загрузчика.
avrdude: verification error, first mismatch at byte 0x0000
         0x05 != 0xff
avrdude: verification error; content mismatch
 
 
VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, гугл и яндекс с удовольствием вам расскажут, даже если хорошо попросить, то на русском языке :) И поищите другой бутлоадер, например тут можно попробовать сконструировать)  Хотя недавно был случай, этот же конструктор создал нерабочий бутлоадер..

Спасибо за ссылку, сгенерированный загрузчик прошился после небольшой правки конфига.

Буду разбираться дальше.

 

VAFER
Offline
Зарегистрирован: 10.12.2015

теперь скетч не заливается, пишет что неизвестная система/платформа  :-(

Возможно виновата IDE версии 1.6.6

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, виноват конфиг

VAFER
Offline
Зарегистрирован: 10.12.2015

Конфиг:

a328p_1MHz.name=atmega328p (1 MHz) 
a328p_1MHz.upload.protocol=arduino 
a328p_1MHz.upload.maximum_size=32256 
a328p_1MHz.upload.speed=9600 
a328p_1MHz.upload.tool=avrdude
a328p_1MHz.bootloader.low_fuses=0x62 
a328p_1MHz.bootloader.high_fuses=0xde 
a328p_1MHz.bootloader.extended_fuses=0x5 
a328p_1MHz.bootloader.path=optiboot 
a328p_1MHz.bootloader.file=optiboot/a328p_1MHz_62_de_5.hex 
a328p_1MHz.build.mcu=atmega328p
a328p_1MHz.build.f_cpu=1000000L
a328p_1MHz.build.core=arduino
a328p_1MHz.build.variant=standard
a328p_1MHz.build.board=AVR_PRO
a328p_1MHz.bootloader.tool=avrdude
a328p_1MHz.bootloader.unlock_bits=0x3F
a328p_1MHz.bootloader.lock_bits=0x0F

Ошибка:

Плата a328p_1MHz (платформа avr, пакет arduino) неизвестна
Ошибка компиляции.
 
Подскажите, где я "не прав".
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, конфиг для старых версий. Сравните с новыми для mega328, исправьте то, что не должно быть.

VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, конфиг для старых версий. Сравните с новыми для mega328, исправьте то, что не должно быть.

Именно так и сделал этот конфиг.
Не понимаю, в чем загвоздка :-(

VAFER
Offline
Зарегистрирован: 10.12.2015

Обнаружил интересную фишку:

если сразу после выдачи ошибки на запись загрузчика опять попробовать загрузить - все загружается.

Загрузил таким макаром штатный загрузчик для Pro mini 8мгц со слегка измененными фьюзами:

low_fuses=0x62 
high_fuses=0xDE
extended_fuses=0x06
 
и после этого в него спокойно залился скетч Blink.
 
Все работает.
 
Но я так и не понял, почему ему не нравился загрузчик на основе optiboot.
VAFER
Offline
Зарегистрирован: 10.12.2015

Загрузчик на основе optiboot удалось зашить таким же способом.

В общем, я завис на "unknown board".

Плата a328p_1MHz (платформа avr, пакет arduino) неизвестна
Ошибка компиляции.
 
 
Нашел на забугорных форумах информацию о том что надо вот так вот писать конфиг:
 
a328p_1MHz.name=atmega328p (1 MHz) optiboot
a328p_1MHz.upload.protocol=arduino 
a328p_1MHz.upload.maximum_size=32256 
a328p_1MHz.upload.maximum_data_size=2048
a328p_1MHz.upload.speed=9600 
a328p_1MHz.upload.tool=arduino:avrdude
a328p_1MHz.bootloader.low_fuses=0x62 
a328p_1MHz.bootloader.high_fuses=0xde 
a328p_1MHz.bootloader.extended_fuses=0x06  
a328p_1MHz.bootloader.file=optiboot/optiboot_atmega328.hex 
a328p_1MHz.build.mcu=atmega328p
a328p_1MHz.build.f_cpu=1000000L
a328p_1MHz.build.core=arduino:arduino
a328p_1MHz.build.variant=arduino:eightanaloginputs
a328p_1MHz.bootloader.tool=arduino:avrdude
a328p_1MHz.bootloader.unlock_bits=0x2F
a328p_1MHz.bootloader.lock_bits=0x0F

 

Не могу понять, откуда он берет название a328p_1MHz ???

Гриша
Offline
Зарегистрирован: 27.04.2014

VAFER пишет:

a328p_1MHz.bootloader.file=optiboot/optiboot_atmega328.hex 

 

Не могу понять, откуда он берет название a328p_1MHz ???

optiboot_atmega328.hex - ему сказано грузить это

VAFER
Offline
Зарегистрирован: 10.12.2015

Гриша пишет:

optiboot_atmega328.hex - ему сказано грузить это

Т.е. это название внутри прошивки где-то ?

Мб это какой-то глюк IDE 1.6.6 ?!

 

Гриша
Offline
Зарегистрирован: 27.04.2014

стоп! еще раз перечитал вопрос и запутался...

" откуда он берет название a328p_1MHz ??? " что за название и где это написано?

optiboot_atmega328.hex - это файл загрузчика которому сказано грузиться, попробуйте найти поиском

у меня такой путь : ...ardu\prog\hardware\arduino\bootloaders\optiboot

VAFER
Offline
Зарегистрирован: 10.12.2015

При компиляции скетча пишет:

Плата a328p_1MHz (платформа avr, пакет arduino) неизвестна
Ошибка компиляции.
 
Файл optiboot_atmega328.hex лежит в папке Arduino\hardware\arduino\avr\bootloaders\optiboot
Гриша
Offline
Зарегистрирован: 27.04.2014

VAFER пишет:

При компиляции скетча пишет:

Плата a328p_1MHz (платформа avr, пакет arduino) неизвестна
Ошибка компиляции.
 
Файл optiboot_atmega328.hex лежит в папке Arduino\hardware\arduino\avr\bootloaders\optiboot

не представляю почему компилятор вылетает, но " Плата a328p_1MHz " это название не более (пост 28), а hex как вы только что нашли будет грузится этот, а не на 1 МГц - как то так...

VAFER
Offline
Зарегистрирован: 10.12.2015

Гриша пишет:

не представляю почему компилятор вылетает, но " Плата a328p_1MHz " это название не более (пост 28), а hex как вы только что нашли будет грузится этот, а не на 1 МГц - как то так...

Всё, я понял откуда название :-) 
Просто взгляд уже "замылился".

1Мгц получается на том же загрузчике что и 8мгц, путем установки соответствующих фьюзов.

Divide clock by 8 internally; [CKDIV8=1]

 

Попробую более древнюю версию IDE.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

VAFER, что вы всё мудрите, на какие то забугорные форумы ходите? Зачем всё это? Зайдите в ваш родной boards.txt найдите секцию pro mini У неё есть общая шапка, и индивидуальные блоки конфигурации для разных моделей. Скопируйте такой блок, измените имя, фузы, сайзы, итп  на свои, и всё! дел на 5 минут.

inspiritus
Offline
Зарегистрирован: 17.12.2012

хмм... а зачем на PRO MINI при заливке по ISP нужен загрузчик вообще ?

ставите фьюзы через Khazama, заливаете кнопкой Ctrl+Shift+U (загрузить через программатор).

и все работает.

VAFER
Offline
Зарегистрирован: 10.12.2015

inspiritus пишет:

а зачем на PRO MINI при заливке по ISP нужен загрузчик вообще ?

не понял вопроса :-)
зачем нужен другой bootloader?
Чтобы контроллер стартовал быстрее (optiboot) и работал на частоте 1мгц (питание предполагется от батареек).

 

 

VAFER
Offline
Зарегистрирован: 10.12.2015

dimax пишет:

VAFER, что вы всё мудрите, на какие то забугорные форумы ходите? Зачем всё это? Зайдите в ваш родной boards.txt найдите секцию pro mini У неё есть общая шапка, и индивидуальные блоки конфигурации для разных моделей. Скопируйте такой блок, измените имя, фузы, сайзы, итп  на свои, и всё! дел на 5 минут.

Уже сделал так :-)

Но теперь компиляция проходит, а загрузка подвисает...
ну и судя по всему ничего не загружается

Попробую более старую IDE 

inspiritus
Offline
Зарегистрирован: 17.12.2012

Я спросил для чего Вам вообще нужен бутлоадер.

VAFER
Offline
Зарегистрирован: 10.12.2015

Поставил IDE 1.0.6

В конце процесса загрузки пишет:

not in sync: resp=0x00

И в итоге программа в контроллере остается неизменной.

Судя по всему проблема не в среде программирования.