Речь пойдет о том, как держать 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 Uno. Как известно, прошивка производится через отдельный разъем ICSP, который есть почти на всех платах. В случае прошивки Arduino Pro Mini, у которого нет IСSP, подключение производится непосредственно к выводам.
Подключение для прошивки bootloader
Где взять загрузчик, который поддерживает watchdog?
Эта глава напоминает танцы с бубном и скорее всего можно сделать все как-то проще, но, увы, у меня по-другому не получилось.
Рекомендуется использовать загрузчики из пакета optiboot. В принципе, эти загрузчики идут в инсталляции самой платформы Arduino, но лучше скачать и установить последнюю версию optiboot отсюда. Установка заключается в двух шагах (возможно, это можно сделать как-то по-другому):
- Папка bootloadersoptiboot перезаписывается в C:Program Files (x86)Arduinohardwarearduinoavrbootloadersoptiboot
- Файл 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
-
Добрый день! Недавно приобрёл Arduino UNO. Вначале всё было хорошо, но потом перестала заливаться программа. При попытке загрузить выводит ошибку:
avrdude: verification error, first mismatch at byte 0x0000
0x0c != 0xff
avrdude: verification error; content mismatchНастройки все остались теми же, что и были. Пробовал подключать к разным USB портам и к разным компам- везде одинаково.
Подскажите в чём дело. -
acos
Официальный гик
АдминистраторОткройте Arduino IDE, в меню Файл→Настройки поставьте галочку напротив опции «Вгрузить» там где «Show verbose output during:» . Эта опция выдаст вам при загрузке скетча в Arduino полную запись логов Avrdude. Выложите эти логи сюда пожалуйста.
-
acos
Официальный гик
АдминистраторТак же, убедитесь, что в настройках Arduino IDE выбрана именно Arduino Uno.
Есть ли возможность воспользоваться ещё одной Arduino или каким-то другим программатором для перезаписи загрузчика на Arduino Uno? -
нет, программатора другого нет
Вложения:
-
logs.txt
- Размер файла:
- 26,6 КБ
- Просмотров:
- 963
-
-
Посмотрите Ваш скетч вот на что — есть ли в нем какие-то сообщения в сериал-порт? Закомментируйте их все и посмотрите — будет ли загружаться. Если загрузка возобновится — начинайте методом «50%» возвращать обратно сообщения.
У меня была как-то такая ситуация. В чем суть причины — не знаю. Но так вело себя одно тестовое сообщение, которое пришлось просто удалить. -
acos
Официальный гик
АдминистраторДа там, судя по названию Blink.cpp.hex, блинк простой.
-
Ну в таком случае можно поступить и следующим образом — выбрать любой другой пример из библиотеки, скомпилировать и попытаться загрузить. Если тоже не загрузится — проблема в железе.
Начать со смены шнурка, проверки контактов… закончить заменой Ардуино. -
нет дело не в скетче. разные пробовал, и свои и из примеров.
-
А там точно УНО?А то у меня было так:Плата написано уно а при выборе платы УНО не грузиться скетч пришлось методом тыка найти плату.А он оказался не УНО вовсе а Duemilanove w ATMega328. Впрочем я об этом уже где то писал-жаль что народ не читает написанное там много полезного сразу новые темы плодит-повторы.Вот бы фотку платы увидеть
-
Еслиб плата была другая, он бы с первого дня не загружался. а в моём случае он загружался, но внезапно перестал. Да и если плата не та- ошибку выдаёт другую: not in sync что то там…
-
Попробуйте перешить «Лодыря» (Бутлоадер) у меня на самопальной Ардуине почему-то снесло.Пришлось перешить-ничего сложного
-
я, так понимаю, для этого нужен второй программатор?
-
Да, либо вторая ардуина (любая, самая маленькая) или любой ее клон с залитым скетчем ArduinoISP.
-
так, у меня есть одна плата Arduino 2 микроконтроллера ATMEGA328P один полностью исправный, второй с вышеизложеной проблемой. Попробовал сделать как сказано здесь http://arduino.cc/en/Tutorial/ArduinoISP чтото не получилось.
-
Нужно еще на RESET ардуины-программатора повесить емкость в 10мкФ.
-
Не заливает на оригинал Uno, пишет не может открыть порт. Работаю на Ubuntu 15.04
-
Столкнулся с идентичной проблемой, и самое главное с отсутствием решения для человека, живущего в месяце доставки от Китая. АГА! Так что найдя ответ решил поделиться. Дубль моего сообщения в другом форуме:
Здравствуйте, господа. Зарегистрировался специально чтобы поделиться своим опытом решения этой проблемы. Недавно заказал китайский ардуино уно(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
-
Ардуино уно китайская сначала работал нормально, потом при заливки скетча начал выходит ошибка:
Подозреваю либо слетел загрузчик, либо какой то деталь сгорел, так как при подключении ардуино в 12в блок питание сильно грелся разъем подключение питание.
Сначала пробовал по этой статье. Русская версия тут. Выходит ошибка:
Может ошибка не в загрузчике. Но все таки решился на вариант с Parallel Programmer. Все сделал как описывал tema.koroliov. Кстати, работаю на Win7. Пока времени нет WinXP ставить для этого. Сначала установка givelo вроде выдал ошибку. Потом exe файл поставил совместимым с WinXP SP2 и вроде установился. Хотя точно не уверен корректно ли установился. В общем теперь выдает ошибку:
Хотя плата выбрана Ардуино Уно. А чип менять не знаю как. Вроде ATmega328P и должен быть.
Может ошибка 0xff != 0x0c вовсе не означает что проблема с загрузчиком. Может сгорел какой нибудь деталь? Что посоветуете?
-
Примерна такая же история. Пришел от амперки 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
Как вам может быть известно, 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
В противном случае вы увидите, как светодиод на 13 пине начнёт лихорадочно мигать. Это как раз и есть внешнее проявление 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 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
Дополнительно, необходимо на плате-программаторе установить электролитический конденсатор ёмкостью не менее 10мкФ(uF) между выводом Reset и GND, для препятствования автоматическому сбросу программатора при начале прошивки. Не забудьте подключить питание к целевой плате.
Ещё можно установить светодиоды (через резистор), с помощью которых программатор сигнализирует об ошибках:
Номер вывода на плате-программаторе | Название | Описание |
---|---|---|
9 | Heartbeat | Плавно меняет яркость сигнализируя о нормальной работе |
8 | Error | Ошибка во время прошивки |
7 | Programming | Мигает во время прошивки |
Вот так всё это должно выглядеть в итоге:
Программатор подключён к 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 — ошибка верификации
|
||
Зарегистрирован: Пт окт 21, 2011 14:39:31 Рейтинг сообщения: 0
|
Если залить совсем маленькую прошивку (пробовал 206 Байт), типа помигать светодиодом — то заливается, проходит верификация, программа выполняется нормально. Если что-то чуть по крупнее (пробовал на прошивке в 688 Байт и больше) — после прошивки верификация не проходит, программа не выполняется. Программатор — USBasp, прошиваю avrdude. Калибровочные ячейки генератора читаются, фьюзы читаются и изменяются. Первый раз имею дело с этим микроконтроллером, ранее использовал только ATtiny13A, ATtiny2313A, ATmega8A и ATmega32A. Может есть какая особенность, кроме подключения MOSI и MISO? |
||
Вернуться наверх |
Профиль
|
||
Реклама | |
|
|
vem566 |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 39 Рейтинг сообщения: 0
|
А если с RESET-а конденсатор убрать? |
||
Вернуться наверх | |||
Реклама | |
|
|
FeCat |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Зарегистрирован: Пт окт 21, 2011 14:39:31 Рейтинг сообщения: 0
|
vem566 писал(а): А если с RESET-а конденсатор убрать? Убрал — без изменений. Цитата: avrdude.exe: verification error, first mismatch at byte 0x0100 avrdude.exe: verification error, first mismatch at byte 0x0100 avrdude.exe: verification error, first mismatch at byte 0x0100 avrdude.exe: verification error, first mismatch at byte 0x0100 avrdude.exe: verification error, first mismatch at byte 0x0100 Если заливать бутлоадеры — то на разных. |
||
Вернуться наверх | |||
Pavel_1978 |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 9 Рейтинг сообщения: 0
|
А среда программирования и программатор какой? |
||
Вернуться наверх | |||
Реклама | |
|
Выгодные LED-драйверы для решения любых задач КОМПЭЛ представляет со склада и под заказ широкий выбор LED-драйверов производства MEAN WELL, MOSO, Snappy, Inventronics, EagleRise. Линейки LED-драйверов этих компаний, выполненные по технологии Tunable White и имеющие возможность непосредственного встраивания в систему умного дома (димминг по шине KNX), перекрывают практически полный спектр применений: от простых световых указателей и декоративной подсветки до диммируемых по различным протоколам светильников внутреннего и наружного освещения. Подобрать LED-драйвер>> |
FeCat |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Зарегистрирован: Пт окт 21, 2011 14:39:31 Рейтинг сообщения: 0
|
Pavel_1978 писал(а): А среда программирования и программатор какой? Atmel Studio 6.2 |
||
Вернуться наверх | |||
Реклама | |
|
|
Реклама | |
|
LIMF – источники питания High-End от MORNSUN со стандартным функционалом на DIN-рейку На склад Компэл поступили ИП MORNSUN (крепление на DIN-рейку) с выходной мощностью 240 и 480 Вт. Данные источники питания обладают 150% перегрузочной способностью, активной схемой коррекции коэффициента мощности (ККМ; PFC), наличием сухого контакта реле для контроля работоспособности (DC OK) и возможностью подстройки выходного напряжения. Источники питания выполнены в металлическом корпусе, ПП с компонентами покрыта лаком с двух сторон, что делает ее устойчивой к соляному туману и пыли. Изделия соответствуют требованиям ANSI/ISA 71.04-2013 G3 на устойчивость к коррозии, а также нормам ATEX для взрывоопасных зон. Подробнее>> |
ILYAUL |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 15 Рейтинг сообщения: 0
|
Цитата: Пробовал с фьюзами как дефолтными M103C ? |
||
Вернуться наверх | |||
FeCat |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Зарегистрирован: Пт окт 21, 2011 14:39:31 Рейтинг сообщения: 0
|
ILYAUL писал(а): Цитата: Пробовал с фьюзами как дефолтными M103C ? Как с ним так и без него. Сумел нормально прошить при помощи программатора на FT232RL на основе этой статьи. Первый раз USBasp меня так подводит. |
||
Вернуться наверх | |||
iyzef |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: -2 Рейтинг сообщения: 0
|
Слепил прогер по этой статье-шил много и счасливо. Но вот трабла такая же встала-не видит м/к …сама прога пишет что в памяти флеш прописано читание и стирание по кольцу, уж третий прогер прибил. Комп чистил -AVRdude переставлял, микры в прогере менял- две недели бестолового секса…Лет 7 назад сталкивался с подобной траблой, но как то прогаммно решил-счас не помню-кажись какого файлика не хватает в проге. |
||
Вернуться наверх | |||
Feruz |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
Карма: 4 Рейтинг сообщения: 0
|
Столкнулся с этой же проблемой. Верификация в avrdudess не проходит, а вот в khazama avr programmer верификация проходит! Добавлено after 13 minutes 24 seconds: |
Вернуться наверх | |
АлександрЛ |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 180 Рейтинг сообщения: 1
|
Скорее всего, надо подбирать программатор и саму «оболочку» программатора.. Капк- то столкнулся с тем, что надо было перепрошить АТМегу128.. Пробовал «Автопрог- ом», пробовал через «пять проводков».. |
||
Вернуться наверх | |||
Feruz |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
Карма: 4 Рейтинг сообщения: 0
|
Да вот же, кроме USBASP программаторов нет. Попробую обновить дудку. |
Вернуться наверх | |
BOB51 |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 89 Рейтинг сообщения: 0
|
Помнится у 128й два варианта подключения при последовательном программировании… На том все проблемы и творятся… 26.7 Serial Downloading SPI Serial Programming Pin Mapping Вот где-то в вышеприведенном «собака зарыта»… |
||
Вернуться наверх | |||
Feruz |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
Карма: 4 Рейтинг сообщения: 0
|
PEN притянут к плюсу внутри МК, я его вообще не использую. Программирую через RESET/PE0/PE1/PB1. Режим совместимости M103 отключен, т.к. фьюзы читаются и пишутся без проблем. Одним словом 1 в 1 как у топикстартера. |
Вернуться наверх | |
musor |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 112 Рейтинг сообщения: 0
|
думаю есть какойто глюк в проге при болших масивах может пробовать свежие версии7 к сожалению жирных мег нетути для проверок |
||
Вернуться наверх | |||
Feruz |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
Карма: 4 Рейтинг сообщения: 0
|
viewtopic.php?p=836757 |
Вернуться наверх | |
musor |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 112 Рейтинг сообщения: 0
|
прочитал ту тему походу предполдожние у меня было верное -ошибка трансляци болшого масива в проге надо искать обновленые версии если есть…или писать автору проги пусть пофиксит Добавлено after 2 minutes 1 second: |
||
Вернуться наверх | |||
Feruz |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
Карма: 4 Рейтинг сообщения: 0
|
|
Вернуться наверх | |
АлександрЛ |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 180 Рейтинг сообщения: 0
|
|||
Вернуться наверх | |||
Z_h_e |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 25 Рейтинг сообщения: 0
|
Feruz писал(а): Ан, нет! При большой прошивке никто не верифицирует А маленькую прошивку в область загрузчика пишет? Можно тогда простенький загрузчик наваять. Хотя как-то это неправильно, но может быть выходом. |
||
Вернуться наверх | |||
BOB51 |
Заголовок сообщения: Re: ATmega128A — ошибка верификации
|
||
Карма: 89 Рейтинг сообщения: 0
|
Прийдется в архивах покопаться… |
||
Вернуться наверх | |||
Кто сейчас на форуме |
Сейчас этот форум просматривают: son313 и гости: 13 |
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения |
1 / 1 / 0 Регистрация: 14.07.2014 Сообщений: 31 |
|
1 |
|
18.03.2016, 09:09. Показов 9717. Ответов 13
Добрый день. Имеется Arduino nano v3 HC340. Столкнулся с такой проблемой что не могу залить не один скетч, ни новый, ни из ранее созданных и ранее работавших. При заливании под конец выдает такую ошибку: 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 пине. Миниатюры
__________________
0 |
1 / 1 / 0 Регистрация: 14.07.2014 Сообщений: 31 |
|
18.03.2016, 10:01 [ТС] |
2 |
Первым делом был конечно гугл и он сказал что возможно что-то с загрузчиком, предлагал перепрошить, но выдавал примеры только для pro-mini а для nano нет. У меня есть программатор USBasp но как прошить с помощью него загрузчик nano я не нашел и не стал рисковать, решил написать сюда и ждать может скажете чего.
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 Код 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. Ошибка при записи загрузчика. Этот отчёт будет иметь больше информации с включенной опцией Файл -> Настройки -> "Показать подробный вывод во время компиляции Потом попробовал как советовали через дудку с помощью консоли но тоже потерпел неудачу, все что написано в ком.строке в файле лог.
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 |
Avazart, так ведь раньше работало. эта арудина проработала 3 дня а потом стала это выдавать. тип выбран нано, мк328, порт нужный. Все домыслы нифига не стоят, возьмите и проверьте:
У вас есть другая ардуна что бы проверить? возможность проверить на другом компе?
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 |
но я помню что вроде было написано и 328 поддерживает… видно не поддерживает и поэтому не прошивает. ладно буду ждать ардуинки Ну вот и я посмотрел у китайцев 328 нигде не видел что бы было написано, поэтому и спрашиваю.
0 |
1 / 1 / 0 Регистрация: 14.07.2014 Сообщений: 31 |
|
20.03.2016, 14:16 [ТС] |
14 |
Avazart, значит я чето тогда затупил и заказал программатор думая что он для 328)
0 |