ATmega8 и AVR ISP MkII

Тема в разделе "Микроконтроллеры AVR", создана пользователем Alexium, 9 ноя 2015.

  1. Alexium

    Alexium Нуб

    Не могу добиться стабильной прошивки указанного микроконтроллера (AVR ISP MkII), используя программатор AVR ISP MkII. Работаю в Arduino IDE 1.6.5, но в данном случае нужно программировать "голую" Атмегу. Выбрал в списке плат "Arduino NG or older", потом ATmega8. Иногда прошивается быстро и без ошибок, а часто программатор долго думает, а потом вываливается ошибка верификации и ругань:

    avrdude: stk500v2_paged_write: write command failed
    avrdude: verification error, first mismatch at byte 0x0000
    0x00 != 0x41
    avrdude: verification error; content mismatch

    P.S. Посмотрел расширеный лог avrdude:

    Начало опущу...

    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.00s

    avrdude: Device signature = 0x1e9307
    avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
    To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "C:\DOCUME~1\Alexium\LOCALS~1\Temp\build6494248862496841421.tmp/Radio_LEDs_RF.cpp.hex"
    avrdude: writing flash (2684 bytes):

    Writing | avrdude: stk500v2_command(): warning: Command timed out
    avrdude: stk500v2_paged_write: write command failed
    ################################################## | 100% 8.91s

    avrdude: 2684 bytes of flash written
    avrdude: verifying flash memory against C:\DOCUME~1\Alexium\LOCALS~1\Temp\build6494248862496841421.tmp/Radio_LEDs_RF.cpp.hex:
    avrdude: load data flash data from input file C:\DOCUME~1\Alexium\LOCALS~1\Temp\build6494248862496841421.tmp/Radio_LEDs_RF.cpp.hex:
    avrdude: input file C:\DOCUME~1\Alexium\LOCALS~1\Temp\build6494248862496841421.tmp/Radio_LEDs_RF.cpp.hex contains 2684 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 0.98s

    avrdude: verifying ...
    avrdude: verification error, first mismatch at byte 0x0000
    0x00 != 0x41
    avrdude: verification error; content mismatch

    avrdude done. Thank you.
     
    Последнее редактирование: 9 ноя 2015
  2. Onkel

    Onkel Гуру

    а фьюзы защиты как выставлены? Частота не велика?
     
  3. Alexium

    Alexium Нуб

    Частота выставлена в 1МГц, фьюзы вроде бы на дефолте, если судить по данным Атмел Студио (уже и ее поставил). Я подстроил в ини файлах Ардуино перменную для частоты, которая используется всякими функциями, но это не должно влиять на проблему. В тоже время 168-я Атмега тоже с дефолтными фьюзами работает исправно (шьется без ошибок). 8-ка тоже работает исправно, если получается запрограммировать.

    П.с. А есть какая-то регулировка частоты программирования? В Студио есть, видел. А тут? Видел только скорость и ее выставил для пробы в 9600, но не помогло.
     
  4. Alexium

    Alexium Нуб

    Частично решил проблему установив фьюзы на 8МГц. Пока какой-то причине мне не удалось заставить работать avrdude с 1МГц. Может подскажете, как это сделать? Опцию -B пробовал задавать и 15, и 10, и 4, и 8. На 3 вообще узнавать перестало чип. Или это совпадение?.. Хотелось бы именно на 1МГц наладить стабильную прошивку. 8 там не нужно.
     
  5. AlexU

    AlexU Гуру

    Хоть опыт работы с контроллерами и небольшой, но думаю стоит поделиться:
    Последнее время работал с AT90USB162 (контроллер другой, но, как мне кажется, в плане процесса прошивки AVR-ки мало отличаются друг от друга). Первую плату развел с грубыми ошибками в цепи кварца и нагрузочных конденсаторов к нему. В результате контроллер от внутреннего генератора работал, а от кварца ни как. В то же время через программатор контроллер шился без проблем при любых настройках фьюзов, отвечающих за источник тактовых импульсов. Так же шилось при фьюзах, указывающих работать от кварца, но с выпаянным кварцем из платы (да-да, по неопытности издевался как мог :oops:). Т.е. можно сделать вывод, что тактовая частота с фьюзами, не влияют на процесс программирования контроллера.
    Проблема скорее всего либо в программаторе, либо в контроллере.

    PS: в качестве программатора AVRISP выступала Arduino UNO с соответствующей прошивкой.
    PPS: в процессе экспериментов ни один контроллер не пострадал -- все живы здоровы :).
     
  6. Alexium

    Alexium Нуб

    Учитывая, что такая ситуация у меня со всеми несколькими восьмерками, можно было бы обвинить программатор, но ему почему-то очень нравится 8МГц 168-й Атмеги, а также 16МГц (или сколько там) самой Уно и ее 328-й. Проблемы с прошивкой на трех 8-ках исчезли полностью после установки их частот на 8МГц. Остальные ждут своего часа.
     
  7. AlexU

    AlexU Гуру

    Действительно фьюзы влияют на процесс прошивки.
    В документации нашел, что частота SCK определяется как:
    Получаются следующие варианты:
    1. понижать частоту передачи данных через SPI (из программатора в контроллер), если есть такая поддержка в программаторе (частота должна быть в четыре раза ниже, чем частота программируемого контроллера) -- Вы использовали опцию '-B' и говорите, что не работает -- может с программатором что-то не то (программатор заводской или сами делали?);
    2. повышать частоту программируемого контроллера, что Вы, собственно, и делаете.

    PS: похоже мне просто повезло....
     
  8. Alexium

    Alexium Нуб

    Сегодня вернул чипы на 1МГц и они по прежнему программируются без ошибок. Даже не знаю... Надо с оставшимися попробовать.
     
  9. Alexium

    Alexium Нуб

    Знаете, что? Сегодня подопытные снова стали отказываться программироваться с той же ошибкой. Короче, поставил Arduino IDE 1.0.5 вместо 1.6.5 и... ошибок стало намного меньше. Намного! Фактически их было наверное из 10 попыток 2-3. Что гораздо лучше. Заодно эта версия IDE стала нормально прошивать фьюзы, а то последняя совсем не могла (хотя "дудка" сама могла).