Verification error first mismatch at byte 0x3e000

Речь пойдет о том, как держать Arduino всегда в работоспособном состоянии. Механизм watchdog встроен в контроллеры Atmega, но, к сожалению, не всякий загрузчик...


Речь пойдет о том, как держать Arduino всегда в работоспособном состоянии. Механизм watchdog встроен в контроллеры Atmega, но, к сожалению, не всякий загрузчик (bootloader) Arduino правильно обрабатывает эту функцию. Попробуем разобраться с этой проблемой.

Итак, что такое watchdog? Простыми словами — это встроенный таймер на определенное время (до 8 сек в зависимости от чипа), который можно запустить программно. Как только таймер «дотикает» до нуля, контроллер подает правильный сигнал сброса (RESET) и всё устройство уходит в hard перезагрузку. Самое главное, что этот таймер можно сбрасывать в начальное состояние также программным способом.

  • Правильный сигнал сброса — достаточный по длительности для того, чтобы контроллер начал перегружаться. Иногда есть соблазн подключить к RST входу какой-либо цифровой выход Arduino и устанавливать его в 0 когда надо перегрузиться. Это плохой подход к решению проблемы, т.к. такого сигнала может быть недостаточно по времени, хотя и не исключено, что в некоторых случаях это тоже будет работать..
  • hard перезагрузка это самая настоящая перезагрузка, которая происходит при нажатии на кнопку RESET. Дело в том, что есть еще понятие soft перезагрузки — это программный переход на 0-вой адрес. В принципе, это тоже полезная вещь, но с помощью нее невозможно перегрузить зависший контроллер Ethernet или взглюкнувший LCD.

Короче говоря, встроенный watchdog это как раз то, что нужно и без дополнительных схем, пайки и соединений.

Функции Watchdog

Чтобы использовать функции Watchdog нужно подключить к проекту стандартную библиотеку:

#include <avr/wdt.h>

Теперь нам доступны следующие три функции:

1. Запуск таймера watchdog:

wdt_enable(WDTO_8S);
/* Возможные значения для константы
  WDTO_15MS
  WDTO_30MS
  WDTO_60MS
  WDTO_120MS
  WDTO_250MS
  WDTO_500MS
  WDTO_1S
  WDTO_2S
  WDTO_4S
  WDTO_8S
*/

Таймер будет считать ровно столько, сколько указано в константе. По истечении этого времени произойдет перезагрузка.

2. Сброс таймера watchdog:

wdt_reset();

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

3. Отключение watchdog:

wdt_disable();

Отключение таймера watchdog.

Собственно, на этом можно было бы и закончить наше повествование о watchdog… но дело в том, что все это работает только в Arduino Uno, а на Arduino Mega, Mini и Nano все это работает ровно наоборот, т.е. не работает совсем :)

Почему watchdog не работает на большинстве современных плат Arduino

Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным watchdog на минимальный период, т.е. 15ms. Это нужно для того, чтобы программа как-то узнавала, что предыдущая перезагрузка была по watchdog. Поэтому первоочередная задача загрузчика (или вашей программы, если она запускается первой) — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить watchdog. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться.

Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший).

Выглядит это все примерно так:

Пути решения проблемы

Если посмотреть на исходники стандартного загрузчика (они есть в поставке платформы), то код отключения watchdog есть (!), но этот код вынесен под условную компиляцию и, по всей видимости, стандартный загрузчик скомпилирован без поддержки watchdog. По крайней мере в пакете платформы версии 1.5.2 (последней на момент написание статьи) дело обстоит именно так.

Для решения проблемы я даже прочитал man-ы самой платформы (:) и вроде бы там описана эта проблема и даже приведен код, который должен сделать всех счастливыми:

uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) __attribute__((naked)) __attribute__((section(".init3")));
void get_mcusr(void){
  mcusr_mirror = MCUSR;
  MCUSR = 0;
  wdt_disable();
}

Здесь описывается функция get_mcusr(), которая должна вызываться сразу после сброса. Это достигается макросом «__attribute__((section(«.init3″)))». Я пробовал прописывать эту функцию во все секции, которые только возможно — да, она действительно запускается до функции setup() из скетча, но, к сожалению, гораздо позже 15ms (минимальная константа watchdog) после сброса…

Короче говоря, как я ни рыл интернет в поисках легкого решения проблемы, так ничего найдено не было. Я нашел только один способ заставить watchdog работать — перепрошить загрузчик… чем мы сейчас и займемся.

Проверка работоспособности watchdog

Прежде чем что-то прошивать, нужно проверить — вдруг ваша Arduino поддерживает watchdog. Для этого я написал небольшой скетч для теста. Просто залейте его, откройте монитор порта и смотрите, что будет происходить.

Тестирование на watchdog

#include <avr/wdt.h>

void setup() {
  wdt_disable(); // бесполезная строка до которой не доходит выполнение при bootloop
  Serial.begin(9600);
  Serial.println("Setup..");
  
  Serial.println("Wait 5 sec..");
  delay(5000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
  wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
  Serial.println("Watchdog enabled.");
}

int timer = 0;

void loop(){
  // Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
  if(!(millis()%1000)){
    timer++;
    Serial.println(timer);
    digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
  }
//  wdt_reset();
}

После перезагрузки (или подключения монитора к порту) встроенный светодиод мигнет, сигнализируя о том, что запустился загрузчик. Далее в секции setup происходит включение watchdog с таймером на 8 сек. После этого светодиод отсчитает нам это время и должна произойти перезагрузка.

Далее начинается самое интересное — если перезагрузка произошла и все повторяется в такой же последовательности, то вы имеете на руках Arduino, в которой загрузчик правильно обрабатывает watchdog. Если же после перезагрузки светодиод на 13-м пине начинает бесконечно мигать, то значит загрузчик не поддерживает watchdog. Здесь даже кнопка сброса не поможет. Для последующей прошивки нужно плату отключать от питания и после включения успеть прошить до первой перезагрузки.

Я протестировал 4 вида плат и только загрузчик в Arduino Uno сработал так как надо:

Платы Arduino

Как легче всего прошить новый загрузчик?

Прошивать загрузчик в Arduino можно с помощью отдельных программаторов, а можно собрать свой программатор с помощью той же самой Arduino. Т.е. любую плату Arduino можно превратить в программатор, залив туда специальный скетч.

Я не буду в этой статье описывать все премудрости создания программатора на основе Arduino, т.к. эта тема довольно подробно описана в интернете. В качестве программатора я использовал Arduino Uno. Как известно, прошивка производится через отдельный разъем ICSP, который есть почти на всех платах. В случае прошивки Arduino Pro Mini, у которого нет IСSP, подключение производится непосредственно к выводам.

Подключение для прошивки bootloader

image
image

Где взять загрузчик, который поддерживает watchdog?

Эта глава напоминает танцы с бубном и скорее всего можно сделать все как-то проще, но, увы, у меня по-другому не получилось.

Рекомендуется использовать загрузчики из пакета optiboot. В принципе, эти загрузчики идут в инсталляции самой платформы Arduino, но лучше скачать и установить последнюю версию optiboot отсюда. Установка заключается в двух шагах (возможно, это можно сделать как-то по-другому):

  1. Папка bootloadersoptiboot перезаписывается в C:Program Files (x86)Arduinohardwarearduinoavrbootloadersoptiboot
  2. Файл boards.txt дописывается к файлу C:Program Files (x86)Arduinohardwarearduinoavrboards.txt

Естественно, папка установки платформы Arduino у вас может быть другой.

Далее перегружается среда разработки и в меню Сервис/Плата можно наблюдать новые платы с пометкой [optiboot]. К сожалению, при выборе этих плат происходят какие-то непонятные ошибки компиляции и появляются всякие другие странности… поэтому делаем еще проще. Открываем в любом текстовом редакторе файл C:Program Files (x86)Arduinohardwarearduinoavrboards.txt и меняем следующие строчки:

Для Arduino Nano:
menu.cpu.nano.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Для Arduino Mini:
menu.cpu.mini.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Следующая проблема в том, что загрузчика optiboot для платы Arduino Mega не существует в природе, т.к. в Mega больше памяти и используется другой протокол. Поэтому мы используем стандартный, но модифицированный загрузчик, который качаем отсюда. Файл переименовываем в stk500boot_v2_mega2560_2.hex и записываем в папку C:Program Files (x86)Arduinohardwarearduinoavrbootloadersstk500v2.

Далее меняем в уже знакомом файле boards.txt следующую строчку:
mega2560.bootloader.file=stk500v2/stk500boot_v2_mega2560_2.hex

Не пугайтесь, что файл модифицированной прошивки для Mega в 2 раза меньше стандартного — так вроде бы должно быть.

Процесс прошивки

После всех изменений можно прошивать загрузчики, выбирая в меню плат обычные платы (не [optiboot]!). В этом случае прошиваться будут именно те файлы hex, которые мы указали в файле board.txt.
Процесс прошивки может не стартовать и выдаваться ошибка:

avrdude: stk500_getsync(): not in sync: resp=0x00

Для решения этой проблемы откройте скетч программатора и в секции setup выберите другую скорость последовательного порта.
Во время заливки в Arduino Mega может появляться ошибка, которую следует игнорировать:

avrdude: verification error, first mismatch at byte 0x3e000
                               0x0d != 0xff
                      avrdude: verification error; content mismatch 

Заключительные манипуляции

Загрузчики optiboot имеют еще одну особенность — они увеличивают скорость загрузки скетчей, поэтому при использовании плат с optiboot нужно внести соответствующие изменения в boards.txt:

Для Arduino Nano:
menu.cpu.nano.atmega328.upload.speed=115200
Для Arduino Mini:
menu.cpu.mini.atmega328.upload.speed=115200

Предыдущую скорость порта лучше тоже запомнить, т.к. ее нужно будет использовать на платах со стандартными загрузчиками. Если такие изменения не сделать, то процессе заливки скетчей будет выдаваться ошибка, типа такой:

avrdude: stk500_getsync(): not in sync: resp=0x00

Ссылки, литература

Пакет optiboot
Прошивка bootloader
Как прошить bootloader в Arduino Pro Mini

Страница 1 из 2

  1. Добрый день! Недавно приобрёл Arduino UNO. Вначале всё было хорошо, но потом перестала заливаться программа. При попытке загрузить выводит ошибку:

    avrdude: verification error, first mismatch at byte 0x0000
    0x0c != 0xff
    avrdude: verification error; content mismatch

    Настройки все остались теми же, что и были. Пробовал подключать к разным USB портам и к разным компам- везде одинаково.
    Подскажите в чём дело.


  2. acos

    acos
    Официальный гик
    Администратор

    Откройте Arduino IDE, в меню Файл→Настройки поставьте галочку напротив опции «Вгрузить» там где «Show verbose output during:» . Эта опция выдаст вам при загрузке скетча в Arduino полную запись логов Avrdude. Выложите эти логи сюда пожалуйста.


  3. acos

    acos
    Официальный гик
    Администратор

    Так же, убедитесь, что в настройках Arduino IDE выбрана именно Arduino Uno.
    Есть ли возможность воспользоваться ещё одной Arduino или каким-то другим программатором для перезаписи загрузчика на Arduino Uno?

  4. нет, программатора другого нет

    Вложения:

    • logs.txt
      Размер файла:
      26,6 КБ
      Просмотров:
      963
  5. Посмотрите Ваш скетч вот на что — есть ли в нем какие-то сообщения в сериал-порт? Закомментируйте их все и посмотрите — будет ли загружаться. Если загрузка возобновится — начинайте методом «50%» возвращать обратно сообщения.
    У меня была как-то такая ситуация. В чем суть причины — не знаю. Но так вело себя одно тестовое сообщение, которое пришлось просто удалить.


  6. acos

    acos
    Официальный гик
    Администратор

    Да там, судя по названию Blink.cpp.hex, блинк простой.

  7. Ну в таком случае можно поступить и следующим образом — выбрать любой другой пример из библиотеки, скомпилировать и попытаться загрузить. Если тоже не загрузится — проблема в железе.
    Начать со смены шнурка, проверки контактов… закончить заменой Ардуино.

  8. нет дело не в скетче. разные пробовал, и свои и из примеров.

  9. А там точно УНО?А то у меня было так:Плата написано уно а при выборе платы УНО не грузиться скетч пришлось методом тыка найти плату.А он оказался не УНО вовсе а Duemilanove w ATMega328. Впрочем я об этом уже где то писал-жаль что народ не читает написанное там много полезного сразу новые темы плодит-повторы.Вот бы фотку платы увидеть

  10. Еслиб плата была другая, он бы с первого дня не загружался. а в моём случае он загружался, но внезапно перестал. Да и если плата не та- ошибку выдаёт другую: not in sync что то там…

  11. Попробуйте перешить «Лодыря» (Бутлоадер) у меня на самопальной Ардуине почему-то снесло.Пришлось перешить-ничего сложного

  12. я, так понимаю, для этого нужен второй программатор?

  13. Да, либо вторая ардуина (любая, самая маленькая) или любой ее клон с залитым скетчем ArduinoISP.

  14. так, у меня есть одна плата Arduino 2 микроконтроллера ATMEGA328P один полностью исправный, второй с вышеизложеной проблемой. Попробовал сделать как сказано здесь http://arduino.cc/en/Tutorial/ArduinoISP чтото не получилось.

  15. Нужно еще на RESET ардуины-программатора повесить емкость в 10мкФ.

  16. Не заливает на оригинал Uno, пишет не может открыть порт. Работаю на Ubuntu 15.04

  17. Столкнулся с идентичной проблемой, и самое главное с отсутствием решения для человека, живущего в месяце доставки от Китая. АГА! Так что найдя ответ решил поделиться. Дубль моего сообщения в другом форуме:
    Здравствуйте, господа. Зарегистрировался специально чтобы поделиться своим опытом решения этой проблемы. Недавно заказал китайский ардуино уно(Atmega328p-au + ch340g). Проработав пару часов с момента распаковки он просто отказался записывать скетч. Пробовал я всё что было под рукой, но ничего мне не помогало, rt809f читает сигнатуру (1e95of) но отказывается шить, потому что её не знает. Программатор через com порт не читает сигнатуру, читает содержимое(неведомо правильно или нет) и ничего не хочет записывать.
    В итоге спас меня Parallel Programmer в Arduino IDE (1.6.8) и статья https://www.arduino.cc/en/Hacking/Pa…ogrammer (схему взял с первой же картинки). Подключил по ней к старому компу через 4 100 Ом резистора. Но ни тут то было, стал ругаться на giveio и оказалось что эта гадость работает только на WinXp(на Win7-x86 не устанавливалось нив какую, может быть я не нашёл версии…).
    В общем установил XP запустил install_Giveio.bat из набора(SinaProg 1.4.5.10). Подключил по схеме с сайта ардуино(ссылка выше), питание подключил прямо к плате ардуино 12В. Запустил Arduino IDE выбрал Плату Arduino Uno, Программатор Parallel Programmer и щёлкнул Записать загрузчик. Не успев и моргнуть программа сообщила мне, что загрузка завершена. А парился я целую неделю!!!

    Вот. Резисторы использовал 100 Ом! никакой пайки.

    Вложения:

    Последнее редактирование: 24 апр 2016

  18. Ардуино уно китайская сначала работал нормально, потом при заливки скетча начал выходит ошибка:

    Подозреваю либо слетел загрузчик, либо какой то деталь сгорел, так как при подключении ардуино в 12в блок питание сильно грелся разъем подключение питание.

    Сначала пробовал по этой статье. Русская версия тут. Выходит ошибка:

    Может ошибка не в загрузчике. Но все таки решился на вариант с Parallel Programmer. Все сделал как описывал tema.koroliov. Кстати, работаю на Win7. Пока времени нет WinXP ставить для этого. Сначала установка givelo вроде выдал ошибку. Потом exe файл поставил совместимым с WinXP SP2 и вроде установился. Хотя точно не уверен корректно ли установился. В общем теперь выдает ошибку:

    Хотя плата выбрана Ардуино Уно. А чип менять не знаю как. Вроде ATmega328P и должен быть.

    Может ошибка 0xff != 0x0c вовсе не означает что проблема с загрузчиком. Может сгорел какой нибудь деталь? Что посоветуете?

  19. Примерна такая же история. Пришел от амперки iskra nano pro. Подключил, записал скетч для проверки из примеров (Blink). Все загрузилось, диод мигает. И на этом собственно все. Больше скетчи не загружаются с такой же ошибкой как у топик стартера. А диод продолжает мигать, reset не помогает.
    Что делать, ума не приложу.

Страница 1 из 2

I have same error with USBTinyISP:

C:Arduinohardwaretoolsavr/bin/avrdude -CC:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/avrdude.conf -v -patmega128 -cusbtiny -e -Ulock:w:0x3f:m -Uefuse:w:0xff:m -Uhfuse:w:0xc6:m -Ulfuse:w:0xbf:m

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/avrdude.conf"

     Using Port                    : usb
     Using Programmer              : usbtiny

avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:.libusb0-0001—0x1781-0x0c9f
AVR Part : ATmega128
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom         4    12    64    0 no       4096    8      0  9000  9000 0xff 0xff
       flash         33     6   128    0 yes    131072  256    512  4500  4500 0xff 0xff
       lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

     Programmer Type : USBtiny
     Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/

avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9702
avrdude: erasing chip
avrdude: Using SCK period of 10 usec
avrdude: reading input file «0x3f»
avrdude: writing lock (1 bytes):

C:Arduinohardwaretoolsavr/bin/avrdude -CC:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/avrdude.conf -v -patmega128 -cusbtiny -Uflash:w:C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/bootloaders/optiboot_flash/atmega128/optiboot_flash_atmega128_115200_16MHz.hex:i -Ulock:w:0x0f:m

avrdude: Version 6.0.1, compiled on Apr 15 2015 at 19:59:58
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

     System wide configuration file is "C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/avrdude.conf"

     Using Port                    : usb
     Using Programmer              : usbtiny

avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:.libusb0-0001—0x1781-0x0c9f
AVR Part : ATmega128
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PA0
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

                              Block Poll               Page                       Polled
       Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
       ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
       eeprom         4    12    64    0 no       4096    8      0  9000  9000 0xff 0xff
       flash         33     6   128    0 yes    131072  256    512  4500  4500 0xff 0xff
       lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
       calibration    0     0     0    0 no          4    0      0     0     0 0x00 0x00
       signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

     Programmer Type : USBtiny
     Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/

avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lock written
avrdude: verifying lock memory against 0x3f:
avrdude: load data lock data from input file 0x3f:
avrdude: input file 0x3f contains 1 bytes
avrdude: reading on-chip lock data:

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

avrdude: verifying …
avrdude: 1 bytes of lock verified
avrdude: reading input file «0xff»
avrdude: writing efuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of efuse written
avrdude: verifying efuse memory against 0xff:
avrdude: load data efuse data from input file 0xff:
avrdude: input file 0xff contains 1 bytes
avrdude: reading on-chip efuse data:

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

avrdude: verifying …
avrdude: 1 bytes of efuse verified
avrdude: reading input file «0xc6»
avrdude: writing hfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of hfuse written
avrdude: verifying hfuse memory against 0xc6:
avrdude: load data hfuse data from input file 0xc6:
avrdude: input file 0xc6 contains 1 bytes
avrdude: reading on-chip hfuse data:

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

avrdude: verifying …
avrdude: 1 bytes of hfuse verified
avrdude: reading input file «0xbf»
avrdude: writing lfuse (1 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 1 bytes of lfuse written
avrdude: verifying lfuse memory against 0xbf:
avrdude: load data lfuse data from input file 0xbf:
avrdude: input file 0xbf contains 1 bytes
avrdude: reading on-chip lfuse data:

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

avrdude: verifying …
avrdude: 1 bytes of lfuse verified

avrdude done. Thank you.

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9702
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: Using SCK period of 10 usec
avrdude: reading input file «C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/bootloaders/optiboot_flash/atmega128/optiboot_flash_atmega128_115200_16MHz.hex»
avrdude: writing flash (131072 bytes):

Writing | ################################################## | 100% 0.00s

avrdude: 131072 bytes of flash written
avrdude: verifying flash memory against C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/bootloaders/optiboot_flash/atmega128/optiboot_flash_atmega128_115200_16MHz.hex:
avrdude: load data flash data from input file C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/bootloaders/optiboot_flash/atmega128/optiboot_flash_atmega128_115200_16MHz.hex:
avrdude: input file C:UsersMehdi.BARNAMENEVIS.000AppDataLocalArduino15packagesMegaCorehardwareavr1.0.3/bootloaders/optiboot_flash/atmega128/optiboot_flash_atmega128_115200_16MHz.hex contains 131072 bytes
avrdude: reading on-chip flash data:

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

avrdude: verifying …
avrdude: verification error, first mismatch at byte 0x1fc00
0xff != 0x01
avrdude: verification error; content mismatch

avrdude done. Thank you.

Error while burning bootloader.

Watchdog

Watchdog

Как вам может быть известно, Arduino (а вернее, микроконтроллер на плате) поддерживает watchdog (сторожевой таймер) который позволяет установить промежуток времени, через который микроконтроллер будет перезагружен, даже если программа зависнет. При этом, сторожевой таймер может быть сброшен программно. Схема работы примерно следующая: «взодим» таймер на некоторое количество секунд, а далее в основной программе постоянно обнуляем счётчик, если всё идёт нормально. Как только мы перестанем обнулять счётчик (а это и может означать зависание), контроллер автоматически перезагрузится по истечению заданного времени. Однако, работа с watchdog должна поддерживаться загрузчиком платы. Дело в том, что после перезагрузки, которая была вызвана watchdog, контроллеры последних выпусков оставляют включенным сторожевой таймер на минимальный период, т.е. 15ms. Это нужно для того, чтобы была возможность внутри программы узнать, что перезагрузка была по watchdog.Поэтому первоочередная задача загрузчика — сохранить информацию о том, что перезагрузка была «неожиданной» и сразу же выключить сторожа. Если этого не сделать, то система уйдет в bootloop, т.е. будет вечно перегружаться. Как известно, в Arduino есть специальный загрузчик, который выполняется в первую очередь после перезагрузки системы. И, к огромному сожалению, стандартный загрузчик не сбрасывает watchdog! Таким образом, система заходит в жестокий bootloop (состояние «crazy led», при котором светодиод на 13-м пине мигает как сумасшедший). Из статьи вы узнаете, как проверить загрузчик своей платы на поддержку watchdog и что делать, если он не поддерживается.

Проверка загрузчика

Для проверки загрузчика следует загрузить в плату следующий скетч:

#include <avr/wdt.h>

void setup() {
  wdt_disable(); // бесполезная строка до которой не доходит выполнение при bootloop
  Serial.begin(9600);
  Serial.println("Setup..");
  
  Serial.println("Wait 5 sec..");
  delay(5000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
  wdt_enable (WDTO_8S); // Для тестов не рекомендуется устанавливать значение менее 8 сек.
  Serial.println("Watchdog enabled.");
}

int timer = 0;

void loop(){
  // Каждую секунду мигаем светодиодом и значение счетчика пишем в Serial
  if(!(millis()%1000)){
    timer++;
    Serial.println(timer);
    digitalWrite(13, digitalRead(13)==1?0:1); delay(1);
  }
//  wdt_reset();
}

После подачи питания встроенный светодиод мигнет, сигнализируя о том, что запустился загрузчик. Далее в секции setup происходит включение watchdog с таймером на 8 сек. Через 8 минут работы должна произойти перезагрузка. Если после перезагрузки платы весь цикл повторяется, то ваша плата поддерживает watchdog:

Arduino не подвержена bootloop

Arduino не подвержена bootloop

В противном случае вы увидите, как светодиод на 13 пине начнёт лихорадочно мигать. Это как раз и есть внешнее проявление bootloop. В мониторе порта вы увидите только первый цикл. После него новые строки выводиться перестанут:

Arduino подвержена bootloop

Arduino подвержена bootloop

Нажатие кнопки reset не изменить ситуации. Для «лечения» платы, её нужно отключить от питания, затем подключить снова и залить любой другой скетч.

Рекомендуется использовать загрузчики из пакета optiboot. В принципе, эти загрузчики идут в инсталляции самой платформы Arduino, но лучше скачать и установить последнюю версию optiboot с сайта разработчиков: https://github.com/Optiboot/optiboot или копию с моего сайта: https://uscr.ru/share/optiboot.zip

После прошивки загрузчика optiboot вы уже не сможете загружать в плату скетчи со стандартными настройками среды. Поэтому, рекомендую все последующие действия производить на копии среды разработки. В ОС linux для этого достаточно скопировать каталог, из которого запускается среда разработки с новым именем. В ОС Windows, кажется, тоже достаточно просто скопировать папку (по умолчанию C:Program Files (x86)Arduino). Далее все пути к папкам и файлам указаны относительно корневого каталога со средой разработки.

Папку optiboot-master/optiboot/bootloaders/optiboot из архива нужно переместить в hardware/arduino/avr/bootloaders/optiboot

Содержимое файла optiboot-master/optiboot/boards.txt дописать в конец файла hardware/arduino/avr/boards.txt

После (пере)запуска среды разработки, в списке плат появятся новые платы с пометкой [optiboot].
Для прошивки загрузчика вам понадобится 2 платы Arduino. Одна из них будет использоваться в качестве программатора. Теоретически, в качестве программатора подходит любая плата. Но у меня получилось заставить работать только Arduino Uno. Ни Nano, ни leonardo работать программатором не захотели. Если Arduino Uno у вас нет, купить её у проверенного мной продавца можно здесь.

Подключите плату-программатор к компьютеру и залейте в неё скетч Arduino ISP, который входит в стандартную поставку среды разработки (Файл->Arduino ISP->Arduino ISP).

Прошивка скетча Arduino ISP

Прошивка скетча Arduino ISP

Теперь можно временно отключить нашу плату-программатор от компьютера. И соединить её с платой, в которую хотим записать загрузчик. В моём случае, это будет Arduino Nano. Прошивка производится через отдельный разъем ICSP, который есть почти на всех платах. MISO соединяется с MISO, MOSI с MOSI и SCK с SCK. При этом подключать ICSP целевой платы нужно к обычным выводам платы-программатора. Это довольно странно, но соединение ICSP-ICSP не работает. Хотя контакты там физически соединены друг с другом. Соединение нужно выполнить вот по такой схеме:

Номер вывода на плате-программаторе Вывод ISCP разъёма
10 RST (Reset)
11 MOSI
12 MISO
13 SCK

Вот распиновка ICSP разъёма (плата ориентирована USB разъёмом вправо):

ICSP разъём Arduino

ICSP разъём Arduino

Дополнительно, необходимо на плате-программаторе установить электролитический конденсатор ёмкостью не менее 10мкФ(uF) между выводом Reset и GND, для препятствования автоматическому сбросу программатора при начале прошивки. Не забудьте подключить питание к целевой плате.

Ещё можно установить светодиоды (через резистор), с помощью которых программатор сигнализирует об ошибках:

Номер вывода на плате-программаторе Название Описание
9 Heartbeat Плавно меняет яркость сигнализируя о нормальной работе
8 Error Ошибка во время прошивки
7 Programming Мигает во время прошивки

Вот так всё это должно выглядеть в итоге:

Программатор подключён к Arduino Nano

Программатор подключён к Arduino Nano

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

В случае прошивки Arduino Pro Mini, у которого нет IСSP, подключение производится непосредственно к выводам:

Номер вывода на плате-программаторе Вывод Arduino Mini
11 11
12 12
13 13

После подключения целевой платы к программатору, нужно подключить программатор к компьютеру, в качестве программатора выбрать «Arduino as ISP»:

Выбор программатора

Выбор программатора

А в качестве платы для прошивки указать целевую плату, а не программатор. Т.Е. в моём случае, в качестве платы выбираю Arduino Nano:

Выбор платы для прошивки

Выбор платы для прошивки

Теперь достаточно выбрать пункт «Инструменты»->»Записать загрузчик»:

Запись загрузчика в плату

Запись загрузчика в плату

После записи загрузчика нужно ещё исправить конфиг. Загрузчики optiboot имеют еще одну особенность — они увеличивают скорость взаимодействия по последовательному порту, поэтому при использовании плат с optiboot нужно внести соответствующие изменения в boards.txt:

Для Arduino Nano:
menu.cpu.nano.atmega328.upload.speed=115200
Для Arduino Mini:
menu.cpu.mini.atmega328.upload.speed=115200

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

После всех манипуляций подключаем целевую плату к компьютеру и вновь заливаем проверочный скетч из начала статьи. Всё должно работать.

Возможные проблемы

Процесс прошивки может не стартовать и выдаваться ошибка:

avrdude: stk500_getsync(): not in sync: resp=0x00

Для решения этой проблемы откройте скетч программатора и в секции setup выберите другую скорость последовательного порта.
Во время заливки в Arduino Mega может появляться ошибка, которую следует игнорировать:

avrdude: verification error, first mismatch at byte 0x3e000
                               0x0d != 0xff
                      avrdude: verification error; content mismatch 

При возникновении других ошибок с платами optiboot, можно поступить проще: в файле hardware/arduino/avr/boards.txt заменить следующие строчки:

Для Arduino Nano:
menu.cpu.nano.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Для Arduino Mini:
menu.cpu.mini.atmega328.bootloader.file=optiboot/optiboot_atmega328.hex

Ну и для любой другой платы по аналогии. Кроме Arduino Mega. В Mega больше памяти и используется другой протокол. Поэтому мы используем стандартный, но модифицированный загрузчик, который качаем отсюда: https://github.com/arduino/Arduino-stk500v2-bootloader/tree/master/goodHexFiles или копию с моего сайта: https://uscr.ru/share/stk500boot_v2_mega2560.hex. Файл переименовываем в stk500boot_v2_mega2560_2.hex и перемещаем в hardwarearduinoavrbootloadersstk500v2.

Далее меняем в уже знакомом файле boards.txt следующую строчку:
mega2560.bootloader.file=stk500v2/stk500boot_v2_mega2560_2.hex

После этих изменений можно прошивать загрузчики, выбирая в меню обычные платы (не [optiboot]!). В этом случае прошиваться будут именно те файлы hex, которые мы указали в файле board.txt.

Статья основана на следующих материалах, в которых затронутые темы рассмотрены более подробно:

http://inet-deal.mpa.ru/articles/arduino-003.html
https://geektimes.ru/post/255800/
https://habr.com/post/144620/

I first hit this problem several years ago when writing a really big program that had to run on a Mega. Then I hit it again last night and had to try to remember the cause.

I believe this is a problem only on older Mega’s. I believe the new ones ship with a recent boot loader. The original one I had issue with 2+ years ago had come from china (an unrealized knock-off). The one I had trouble with last night was an old one at the local maker space.

This time I’ll document the fix here so next time I might be able to find the solution without referring to my faulting memory.

The basic issue is caused by having ‘!!!’ embedded in your code. The older boot loader uses this for something. Initially I did have a constant containing ‘!!!’. When I found the issue, I removed the constant, but i still had intermittent problems. The code was large enough that some of the code itself was just happened to contain the string. So fixing the boot loader was the only option.

These notes were taken largely verbatim from the software document I maintained during the project:

Arduino Mega 2560 “!!!” Problem

Here is a brilliant one: The boot loader for the Mega 2560 uses “!!!” for some special purpose. If you have that string in the code being uploaded, the upload will hang.

This has become a show stopper. although I yanked the literal “!!!” I was using periodically I still get object code generated with that sequence. Up to now I’ve been able to rearrange code to work around it, but now it is happening in the middle of a large array declaration and i cannot get around it. I am being forced to address the problem.

My immediate work around was to go back to the Arduino Mega which doesn’t have the bug. That is allowing me to continue development, but I need to fix the production board that the company purchased.

I researched the problem further and found that the boot loader has been patched. Here is the thread regarding the problem and patch:

http://code.google.com/p/arduino/issues/detail?id=392

and the code for the downloader:

http://www.xyfyx.com/files/stk500boot_v2_mega2560.hex

The problem is installing this boot loader. I can’t just do it with the hardware I have. One option is to purchase a bootloader programmer:

https://www.sparkfun.com/products/9825?

The other is to program an UNO to act as a programmer. Instructions for doing that are here:

http://www.sparkfun.com/tutorials/247

I also need all of the ‘fuse’ settings for the chip. I got these from boards.txt file that is in the arduino directory:

mega2560.name=Arduino Mega 2560 or Mega ADK

mega2560.upload.protocol=stk500v2
mega2560.upload.maximum_size=258048
mega2560.upload.speed=115200

mega2560.bootloader.low_fuses=0xFF
mega2560.bootloader.high_fuses=0xD8
mega2560.bootloader.extended_fuses=0xFD
mega2560.bootloader.path=stk500v2
mega2560.bootloader.file=stk500boot_v2_mega2560.hex
mega2560.bootloader.unlock_bits=0x3F
mega2560.bootloader.lock_bits=0x0F

mega2560.build.mcu=atmega2560
mega2560.build.f_cpu=16000000L
mega2560.build.core=arduino
mega2560.build.variant=mega

Here are instructions on using the monitor. Make sure baudrate is 11520

http://www.avr-developers.com/bootloaderdocs/index.html

Uploading Boot Loader with Pocket AVR Programmer

Purchased AVR programmer to resolve above error. Here are instructions from the sparkfun website:

To use this programmer, attach to a Windows machine and install the drivers listed below. Open a command prompt. Assuming WinAVR (and therefore AVRDUDE) have been installed, type:

avrdude -c usbtiny -B 1 -patmega328 -U flash:w:main.hex

Be sure to include the “-B 1” flag as this will significantly increase the programming speed! You may need to change -p flag to your appropriate microcontroller. You can setup a tool and hotkey in Programmers Notepad to do this automatically.

https://code.google.com/p/robot-exporers/source/browse/trunk/hardware/Programmers/Pocket+AVR+Programmer/AVR-Pocket-Programmer-v15.zip?r=485

I unzipped the above files into a new folder, plugged in the programmer, and pointed to that directory to find driver files. That worked fine.

AVRDUDE is located here:

C:Program FilesArduino-1.0.1hardwaretoolsavrbin

CD to that dir.

Move the HEX file to the avrdude directory.

connect cable to arduino, with cable going away from reset button.

connect USB cable to programmer.

Lights will turn on for both boards

To test the connection I type:

[C:Program FilesArduino-1.0.1hardwaretoolsavrbin] avrdude -c usbtiny -p m2560 -C ..etcavrdude.conf -v

avrdude: Version 5.11, compiled on Sep  2 2011 at 19:38:36
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2009 Joerg Wunsch

System wide configuration file is "..etcavrdude.conf"

Using Port                    : lpt1
Using Programmer              : usbtiny
Overriding Baud Rate          : 19200
avrdude: usbdev_open(): Found USBtinyISP, bus:device: bus-0:\.libusb0-0001--0x1781-0x0c9f
AVR Part                      : ATMEGA2560
Chip Erase delay              : 9000 us
PAGEL                         : PD7
BS2                           : PA0
RESET disposition             : dedicated
RETRY pulse                   : SCK
serial program mode           : yes
parallel program mode         : yes
Timeout                       : 200
StabDelay                     : 100
CmdexeDelay                   : 25
SyncLoops                     : 32
ByteDelay                     : 0
PollIndex                     : 3
PollValue                     : 0x53
Memory Detail                 :

Block Poll               Page      Polled
Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom        65    10     8    0 no       4096    8      0  9000  9000 0x00 0x00
flash         65    10   256    0 yes    262144  256   1024  4500  4500 0x00 0x00
lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00

Programmer Type : USBtiny
Description     : USBtiny simple USB programmer, http://www.ladyada.net/make/usbtinyisp/
avrdude: programmer operation not supported

avrdude: Using SCK period of 10 usec
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9801
avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as FD

avrdude: safemode: lfuse reads as FF
avrdude: safemode: hfuse reads as D8
avrdude: safemode: efuse reads as FD
avrdude: safemode: Fuses OK

avrdude done.  Thank you.

I saved the existing bootloader (in case I need to go back) by doing this:

[C:Program FilesArduino-1.0.1hardwaretoolsavrbin]avrdude -B 1 -c usbtiny -p m2560 -C ..etcavrdude.conf -Uflash:r:oldbootloader.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9801
avrdude: reading flash memory:

Reading | ################################################## | 100% 38.86s

avrdude: writing output file "oldbootloader.hex"

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

NOTE: the above looks like it worked, but it didn’t. The output file contains only a single line.

To install the new boot loader do the following:

[C:Program FilesArduino-1.0.1hardwaretoolsavrbin] avrdude -B 1 -c usbtiny -p m2560 -C ..etcavrdude.conf -Uflash:w:stk500boot_v2_mega2560.hex

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9801
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 "stk500boot_v2_mega2560.hex"
avrdude: input file stk500boot_v2_mega2560.hex auto detected as Intel Hex
avrdude: writing flash (261386 bytes):

Writing | ################################################## | 100% 52.16s

avrdude: 261386 bytes of flash written
avrdude: verifying flash memory against stk500boot_v2_mega2560.hex:
avrdude: load data flash data from input file stk500boot_v2_mega2560.hex:
avrdude: input file stk500boot_v2_mega2560.hex auto detected as Intel Hex
avrdude: input file stk500boot_v2_mega2560.hex contains 261386 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 38.89s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x3e000
0x0d != 0xff
avrdude: verification error; content mismatch

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

NOTE the verification error above. This is OK. I don’t know why, but it is OK.

NOTE: you can also burn a new bootloader using the arduino IDE. Set board to correct board, set programmer to USBTinyISP and click on burn. Problem with this is it uses the default bootloader (found in booloader directory) which is wrong. I presume this can be replaced with the good one, but I haven’t played with that.

Форум РадиоКот • Просмотр темы — ATmega128A — ошибка верификации

Сообщения без ответов | Активные темы

ПРЯМО СЕЙЧАС:

Автор Сообщение

Не в сети

Заголовок сообщения: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 16:04:10 

Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт окт 21, 2011 14:39:31
Сообщений: 196

Рейтинг сообщения: 0

Если залить совсем маленькую прошивку (пробовал 206 Байт), типа помигать светодиодом — то заливается, проходит верификация, программа выполняется нормально. Если что-то чуть по крупнее (пробовал на прошивке в 688 Байт и больше) — после прошивки верификация не проходит, программа не выполняется.

Программатор — USBasp, прошиваю avrdude.
MOSI — подключен к PDI.
MISO — подключен к PDO.
SCK — SCK.
RESET — RESET.
PEN — висит в воздухе (если притянуть к земле — программатор не видит микроконтроллер, дополнительная подтяжка к VCC никак не вляет).
На пинах программирования никакой периферии не висит. Прозвонку всех цепей на обрывы и замыкания делал.

Калибровочные ячейки генератора читаются, фьюзы читаются и изменяются.
Установка на USBasp перемычки снижающей скорость — к успешной прошивке не приводит(маленькая заливается и проходит верификацию и без перемычки).
Микроконтроллер новый, из chip-nn.ru, фьюзы были дефолтные. На обе ноги VCC подано питание, а так-же на AVCC. Все три GND соединены с землёй. На RESET подтяжка 10кОм и конденсатор на землю.
Питание взято от USBasp — 5В. Пробовал с фьюзами как дефолтными, так и с тактированием от кварца 7,3728МГц.

Первый раз имею дело с этим микроконтроллером, ранее использовал только ATtiny13A, ATtiny2313A, ATmega8A и ATmega32A. Может есть какая особенность, кроме подключения MOSI и MISO?

Вернуться наверх
 

ПрофильПрофиль

 

Реклама

vem566

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 19:51:11 

Друг Кота
Аватар пользователя

Карма: 39

Рейтинг сообщений: 596

Зарегистрирован: Вс янв 24, 2010 13:14:02
Сообщений: 4503
Откуда: Омск

Рейтинг сообщения: 0

А если с RESET-а конденсатор убрать?

Вернуться наверх
Реклама

FeCat

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 21:15:13 

Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт окт 21, 2011 14:39:31
Сообщений: 196

Рейтинг сообщения: 0

vem566 писал(а):

А если с RESET-а конденсатор убрать?

Убрал — без изменений.
Позаливал разные прошивки от фонаря, на всех верификация спотыкается на одном и том же адресе:

Цитата:

avrdude.exe: verification error, first mismatch at byte 0x0100
0xff != 0x1f

avrdude.exe: verification error, first mismatch at byte 0x0100
0xff != 0x00

avrdude.exe: verification error, first mismatch at byte 0x0100
0xff != 0xfd

avrdude.exe: verification error, first mismatch at byte 0x0100
0xff != 0x49

avrdude.exe: verification error, first mismatch at byte 0x0100
0xff != 0x92

Если заливать бутлоадеры — то на разных.

Вернуться наверх

Pavel_1978

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 21:17:51 

Опытный кот
Аватар пользователя

Карма: 9

Рейтинг сообщений: 61

Зарегистрирован: Пт ноя 16, 2007 11:21:37
Сообщений: 831

Рейтинг сообщения: 0

А среда программирования и программатор какой?

Вернуться наверх
Реклама

Выгодные LED-драйверы для решения любых задач

КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения.

Подобрать LED-драйвер>>

FeCat

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 21:28:50 

Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт окт 21, 2011 14:39:31
Сообщений: 196

Рейтинг сообщения: 0

Pavel_1978 писал(а):

А среда программирования и программатор какой?

Atmel Studio 6.2
USBasp пробовал как купленный на ebay так и самосборный.

Вернуться наверх
Реклама

Реклама

LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку

На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон.

Подробнее>>

ILYAUL

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 23:07:34 

Держит паяльник хвостом
Аватар пользователя

Карма: 15

Рейтинг сообщений: 70

Зарегистрирован: Ср мар 28, 2012 21:45:24
Сообщений: 904
Откуда: ВО

Рейтинг сообщения: 0

Цитата:

Пробовал с фьюзами как дефолтными

M103C ?

Вернуться наверх

FeCat

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс июн 08, 2014 23:17:10 

Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт окт 21, 2011 14:39:31
Сообщений: 196

Рейтинг сообщения: 0

ILYAUL писал(а):

Цитата:

Пробовал с фьюзами как дефолтными

M103C ?

Как с ним так и без него.

Сумел нормально прошить при помощи программатора на FT232RL на основе этой статьи. Первый раз USBasp меня так подводит.

Вернуться наверх

iyzef

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Вс ноя 12, 2017 02:01:32 

Открыл глаза
Аватар пользователя

Карма: -2

Рейтинг сообщений: 5

Зарегистрирован: Чт окт 13, 2016 08:56:23
Сообщений: 52
Откуда: Усолье-Сибирское

Рейтинг сообщения: 0

Слепил прогер по этой статье-шил много и счасливо. Но вот трабла такая же встала-не видит м/к …сама прога пишет что в памяти флеш прописано читание и стирание по кольцу, уж третий прогер прибил. Комп чистил -AVRdude переставлял, микры в прогере менял- две недели бестолового секса…Лет 7 назад сталкивался с подобной траблой, но как то прогаммно решил-счас не помню-кажись какого файлика не хватает в проге.


_________________
Я не волшебник, я только учусь.

Вернуться наверх

Feruz

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 11:02:36 

Карма: 4

Рейтинг сообщений: 4

Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55

Рейтинг сообщения: 0

Столкнулся с этой же проблемой. Верификация в avrdudess не проходит, а вот в khazama avr programmer верификация проходит! :?

Добавлено after 13 minutes 24 seconds:
Ан, нет! При большой прошивке никто не верифицирует

Вернуться наверх

АлександрЛ

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 11:11:45 

Друг Кота
Аватар пользователя

Карма: 180

Рейтинг сообщений: 8006

Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 36158
Откуда: Нерезиновая

Рейтинг сообщения: 1

Скорее всего, надо подбирать программатор и саму «оболочку» программатора.. Капк- то столкнулся с тем, что надо было перепрошить АТМегу128.. Пробовал «Автопрог- ом», пробовал через «пять проводков»..
Автопрог не помог, через «пять проводков» сначала шил Унипроф- ом, он сделал вид, что «всё ОК», но само устройство не «завелось», а вот ПониПрог успешно прошил всё, и всё заработало.. Собственно, на этом моя цель была достигнута, и я добросовестно «забил» на дальнейшие разбирательства..

Вернуться наверх

Feruz

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 13:40:23 

Карма: 4

Рейтинг сообщений: 4

Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55

Рейтинг сообщения: 0

Да вот же, кроме USBASP программаторов нет. Попробую обновить дудку.

Вернуться наверх

BOB51

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 13:59:47 

Друг Кота
Аватар пользователя

Карма: 89

Рейтинг сообщений: 1231

Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 13357
Откуда: ДОНЕЦК

Рейтинг сообщения: 0

Помнится у 128й два варианта подключения при последовательном программировании… На том все проблемы и творятся…
Уже даавненько было — в одном из вариантов у товарышша не работало — поставил свой (обычный без PDI|PDO) — спокойненько заработало…
2.3.15 PEN
PEN is a programming enable pin for the SPI Serial Programming mode, and is internally pulled
high . By holding this pin low during a Power-on Reset, the device will enter the SPI Serial Pro-
gramming mode. PEN has no function during normal operation.

26.7 Serial Downloading
Both the Flash and EEPROM memory arrays can be programmed using the serial SPI bus while
RESET is pulled to GND. The serial interface consists of pins SCK, MOSI (input) and MISO (out-
put). After RESET is set low, the Programming Enable instruction needs to be executed first
before program/erase operations can be executed. NOTE, in Table 26-13 on page 304, the pin
mapping for SPI programming is listed. Not all parts use the SPI pins dedicated for the internal
SPI interface. Note that throughout the description about Serial downloading, MOSI and MISO
are used to describe the serial data in and serial data out respectively. For ATmega128A these
pins are mapped to PDI and PDO.

SPI Serial Programming Pin Mapping
Even though the SPI Programming interface re-uses the SPI I/O module, there is one important
difference: The MOSI/MISO pins that are mapped to PB2 and PB3 in the SPI I/O module are not
used in the Programming interface. Instead, PE0 and PE1 are used for data in SPI Program-
ming mode as shown in Table 26-13.

Вот где-то в вышеприведенном «собака зарыта»…
:roll:
Даавно то було… СКЛЕРОЗЬ…
:dont_know:

Вернуться наверх

Feruz

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 15:52:26 

Карма: 4

Рейтинг сообщений: 4

Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55

Рейтинг сообщения: 0

PEN притянут к плюсу внутри МК, я его вообще не использую. Программирую через RESET/PE0/PE1/PB1. Режим совместимости M103 отключен, т.к. фьюзы читаются и пишутся без проблем. Одним словом 1 в 1 как у топикстартера.

Вернуться наверх

musor

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 16:00:09 

Друг Кота
Аватар пользователя

Карма: 112

Рейтинг сообщений: 7850

Зарегистрирован: Сб сен 13, 2014 16:27:32
Сообщений: 38364
Откуда: СпиртоГонск созвездия Омега

Рейтинг сообщения: 0

думаю есть какойто глюк в проге при болших масивах может пробовать свежие версии7 к сожалению жирных мег нетути для проверок


_________________
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает

Вернуться наверх

Feruz

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 16:17:33 

Карма: 4

Рейтинг сообщений: 4

Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55

Рейтинг сообщения: 0

viewtopic.php?p=836757
Возможно Вы правы! Вот в этой ветке ARV сделал похожее предположение. Я решил проверить это заменив в AVRDUDESS файлы avrdude.exe и .conf на файлы дудки последней версии (думал что в дудке этот баг пофиксили). Не прокатило.

Вернуться наверх

musor

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 16:46:28 

Друг Кота
Аватар пользователя

Карма: 112

Рейтинг сообщений: 7850

Зарегистрирован: Сб сен 13, 2014 16:27:32
Сообщений: 38364
Откуда: СпиртоГонск созвездия Омега

Рейтинг сообщения: 0

прочитал ту тему походу предполдожние у меня было верное -ошибка трансляци болшого масива в проге надо искать обновленые версии если есть…или писать автору проги пусть пофиксит

Добавлено after 2 minutes 1 second:
прогеры весма масовые поэтому думаю програму должны обновлять китаюзы
кстти похожий глюк описывал 1 знакомый при прошивка 24с256
потом он прошил другой прогой


_________________
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает

Вернуться наверх

Feruz

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 17:44:23 

Карма: 4

Рейтинг сообщений: 4

Зарегистрирован: Вс май 03, 2015 15:05:58
Сообщений: 55

Рейтинг сообщения: 0

Вернуться наверх

АлександрЛ

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 17:59:21 

Друг Кота
Аватар пользователя

Карма: 180

Рейтинг сообщений: 8006

Зарегистрирован: Пн ноя 30, 2009 03:00:01
Сообщений: 36158
Откуда: Нерезиновая

Рейтинг сообщения: 0

Вернуться наверх

Z_h_e

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 18:05:10 

Собутыльник Кота
Аватар пользователя

Карма: 25

Рейтинг сообщений: 637

Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2664
Откуда: г. Чайковский

Рейтинг сообщения: 0

Медали: 1

Получил миской по аватаре (1)

Feruz писал(а):

Ан, нет! При большой прошивке никто не верифицирует

А маленькую прошивку в область загрузчика пишет? Можно тогда простенький загрузчик наваять. Хотя как-то это неправильно, но может быть выходом.


_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил — тот и добрый.

Вернуться наверх

BOB51

Не в сети

Заголовок сообщения: Re: ATmega128A — ошибка верификации

СообщениеДобавлено: Ср янв 17, 2018 19:09:49 

Друг Кота
Аватар пользователя

Карма: 89

Рейтинг сообщений: 1231

Зарегистрирован: Вт мар 16, 2010 22:02:27
Сообщений: 13357
Откуда: ДОНЕЦК

Рейтинг сообщения: 0

Прийдется в архивах покопаться…
:sleep:
Правда обработка велась на понипроге с STK200 & LPT…
И подопытный кристальчик вроде ёсть… правда с чем-то внутрях дай бог не залочен под фузедоктора).
:roll:

Вернуться наверх

Кто сейчас на форуме

Сейчас этот форум просматривают: son313 и гости: 13

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

1

18.03.2016, 09:09. Показов 9717. Ответов 13


Добрый день. Имеется Arduino nano v3 HC340. Столкнулся с такой проблемой что не могу залить не один скетч, ни новый, ни из ранее созданных и ранее работавших. При заливании под конец выдает такую ошибку:
«avrdude: verification error, first mismatch at byte 0x0000
0xff != 0x0c
avrdude: verification error; content mismatch»
Для проверки использовал простой скетч для мигания встроенного светодиода на 13 пине.

Code

Код

int ledPin = 13;

void setup() {
  // put your setup code here, to run once:
  pinMode(ledPin, OUTPUT);

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(ledPin, HIGH);
  delay(500);
  digitalWrite(ledPin, LOW);
  delay(500);
}

Еще вчера ардуина работала, а сегодня вдруг перестала. Теперь при подключении к ПК постоянно мигает встроенные светодиод на 13 пине.
Скрин скетча и лога с ошибкой:

Миниатюры

Ошибка avrdude: verification error
 

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

18.03.2016, 10:01

 [ТС]

2

Первым делом был конечно гугл и он сказал что возможно что-то с загрузчиком, предлагал перепрошить, но выдавал примеры только для pro-mini а для nano нет. У меня есть программатор USBasp но как прошить с помощью него загрузчик nano я не нашел и не стал рисковать, решил написать сюда и ждать может скажете чего.
P.s. менял провода и usb порты, все бестолку…



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

19.03.2016, 22:12

3

moonlight111, Система какая? Линукс?



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

19.03.2016, 22:18

 [ТС]

4

Avazart, win7x64
пытался прошить загрузчик через usbasp но потерпел фиаско)
ардуино ide выдает такую ошибку:

Код

Arduino: 1.6.8 (Windows 7), Плата:"Arduino Nano, ATmega328"
 
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: error: programm enable: target doesn't answer. 1 
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.
 
Ошибка при записи загрузчика.
 
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции

Потом попробовал как советовали через дудку с помощью консоли но тоже потерпел неудачу, все что написано в ком.строке в файле лог.
так же замыкая rx&tx посылал через монитор порта данные (числа, буквы) но в ответ нечего не приходило, так что даже и не знаю видно эта ардуинка будет ждать пока не приедут другие из китая и может быть с помощью тех я смогу это реанимировать а если нет будет донором на что нибудь. Но может быть вы сможете мне помочь?)



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

19.03.2016, 22:30

5

Да подождите перепрошивать загрузчик… может у вас проблема на компе, к примеру Arduino IDE или дровами….
У вас есть другая ардуна что бы проверить? возможность проверить на другом компе?

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



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

20.03.2016, 08:01

 [ТС]

6

Avazart, так ведь раньше работало. эта арудина проработала 3 дня а потом стала это выдавать. тип выбран нано, мк328, порт нужный.



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

20.03.2016, 11:34

7

Цитата
Сообщение от moonlight111
Посмотреть сообщение

Avazart, так ведь раньше работало. эта арудина проработала 3 дня а потом стала это выдавать. тип выбран нано, мк328, порт нужный.

Все домыслы нифига не стоят, возьмите и проверьте:

Цитата
Сообщение от Avazart
Посмотреть сообщение

У вас есть другая ардуна что бы проверить? возможность проверить на другом компе?



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

20.03.2016, 11:54

 [ТС]

8

Avazart, другой ардуины нет, жду пока приедут из китая. есть ноут проверил и та же самая ошибка



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

20.03.2016, 13:23

 [ТС]

10

Avazart, да спасибо я этого и жду когда придут и надеюсь смогу эту вразумить на работу



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

20.03.2016, 13:36

11

А ваш программатор usbasp на какие контроллеры рассчитан?



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

20.03.2016, 13:48

 [ТС]

12

1 шт. новый USBASP USBISP AVR и USB ISP USB ASP ATMEGA8 ATMEGA128 поддерживает Win7 64 К

так написано в магазине, но я помню что вроде было написано и 328 поддерживает… видно не поддерживает и поэтому не прошивает. ладно буду ждать ардуинки



0



Эксперт С++

8385 / 6147 / 615

Регистрация: 10.12.2010

Сообщений: 28,683

Записей в блоге: 30

20.03.2016, 13:52

13

Цитата
Сообщение от moonlight111
Посмотреть сообщение

но я помню что вроде было написано и 328 поддерживает… видно не поддерживает и поэтому не прошивает. ладно буду ждать ардуинки

Ну вот и я посмотрел у китайцев 328 нигде не видел что бы было написано, поэтому и спрашиваю.



0



1 / 1 / 0

Регистрация: 14.07.2014

Сообщений: 31

20.03.2016, 14:16

 [ТС]

14

Avazart, значит я чето тогда затупил и заказал программатор думая что он для 328)



0



Понравилась статья? Поделить с друзьями:
  • Verification error first mismatch at byte 0x0000 0x00 0x0c
  • Verification code input error
  • Verification code error как переводится
  • Verification code error call of duty mobile
  • Verfault exe ошибка приложения