Клеммы, реле, разъемы Degson со склада в России

ATmega328p и загрузчик AVRUBD 4.5

Страница 1 из 2
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
22.12.2019 00:54 #1
Приветствую всех. Ребята, нужна помощь в любом виде.
На днях понадобилось мне (вдруг) прикрутить к мк ATmega328p (тот, что в Arduino Nano стоит) хорошо известный «китайский» загрузчик AVRUBD. Благо, раньше (но очень давно) с ним (и не только) уже работал, даже под ATmega8 какой-то корявый свой даже написал.
Вроде как все вспомнил, сконфигурировал его, учел все последние рекомендации, которые опубликованы в сети. В AVRStudio 4 версии его скомпилировал, без ошибок, чуть больше 1.3 Кб размер. Залил в микроконтроллер, проверил, что загрузчик в прошивке начинается с адреса 0х7800. Подготовил тестовый файл прошивки, подал питание на мк и наблюдаю следующую картину: загрузчик запускается (светодиод мигает), программа AVRUBD коннектится (синхронизируется) с ним (Connect Success), начало загрузки файла прошивки и получаю сообщение «Too many retry» , т.е. ошибка загрузки прошивки.
Все проверил, скорости портов (мк и USB-COM, совпадают, 19200), тактовая частота мк 16 МГц. Проверил еще раз все адреса: в прошивке загрузчик начинается с адреса 0х7800 (соответственно выставлены Fuse-биты и Lock-биты), в студии настроена секция Flash-памяти .text=0x3c00, в файле конфигурации загрузчика установлен параметр «#define BootStart 2*0x3C00UL». Скорость обмена, параметры загрузчика, пробовал менять – ничего не меняется. Ошибка - «слишком много повторов/Too many retry».
Сконфигурировал загрузчик без сторожевого таймера и без проверки данных – процесс пошел, результат – «успешно», но по факту – во Flash-памяти пусто, только загрузчик…
Начал смотреть исходник загрузчика и понимаю, что ошибка эта появляется и накапливается (до 3) на этапе сравнения принятого буфера и считанной после записи страницы (128 Байт) Flash, т.е. получается что мк ничего не может записать, загрузка буфера повторяется 3 раза, а потом прекращается.
Кто-то сталкивался с такой проблемой? В mega328p есть какие-то отличия в механизме загрузчика и «самопрограммирования»?
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
К конденсаторам источников питания высокой мощности предъявляются высокие требования по качеству и надежности. Пленочные – единственный тип конденсаторов, который может справиться с такой задачей. Компания Hongfa предлагает продукцию, которая подходит для применения практически во всех функциональных узлах типовых AC/DC- или DC/AC-преобразователей. Рассмотрим характеристики и применения плёночных конденсаторов Hongfa для различных решений.
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
372 0
3 0
 
22.12.2019 17:47 #2
Раз помощь в любом виде, то вот аналогичная проблема на avrfreaks. Там несколько вариантов решения предлагалось - проверить, нет ли запрета на запись в соответствующий раздел flash, проверить адреса, и еще варианты. Но это, вроде бы, уже сделано. Более ничем помочь не могу, с AVRUBD не работал.
Оценка
Вслед за сериями на DIN-рейку DDRH-60/120/240 и на шасси RSDH-150/300 компания MEAN WELL выпустила новые маломощные DC/DC-преобразователи DDRH-15/30/45 со сверхшироким входным напряжением 150…1500 В, и монтажом не только на DIN-рейку, но и печатную плату или винтовым соединением. Все преобразователи семейства DDRH и RSDH работают при температурах -40…80°C и обладают высокой изоляцией 4000 В AC между входом и выходом, что обеспечивает надежную защиту. Они подходят для использования на высоте до 5000 м и сертифицированы по стандарту IEC62109-1 для фотоэлектрических систем. Преобразователи DDRH/RSDH есть в наличии и под заказ.
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
22.12.2019 19:13 #3
Спасибо. Это видел, постарался проверить все что там описано. Не помогло.
Кроме того, учитывая древность загрузчика, пробовал прогу загрузчика на стареньком ноуте с XP, также использовал HyperTerminal - результат один и тот же, начало загрузки и ошибка "слишком много повторов".
Сейчас нашел исходники ардуиновского загрузчика Optiboot, говорят он неплох. Попробую проанализировать его и сравнить с AVRUBD в плане алгоритма записи Flash.
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
В последние годы растёт спрос на источники питания для промышленной автоматизации в связи с увеличением инфраструктурных проектов, требующих надёжного электропитания. Источники питания на DIN-рейку MEAN WELL обладают высокой эффективностью, надёжностью и безопасностью, обеспечивая стабильное выходное напряжение. Большой ассортимент в наличии позволяет выбрать подходящий ИП MW на DIN-рейку для решения любой задачи электропитания.
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,871
Репутация: 1171
1,317 118
483 1
 
22.12.2019 19:37 #4
Терминалка ? Прошивка передается по XMODEM'у ? Тогда фраза про повторы может означать повторные попытки передачи пакетов этого самого XMODEM'а. Т.е., пакеты попросту бьются. Почему ? А вы точно уверены, что кварц завелся на частоте в 16 МГц, и вообще в том, что МК тактируется от кварца ? И еще, на стороне машины должно быть правильно настроено управление потоком ...
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,871
Репутация: 1171
1,317 118
483 1
 
22.12.2019 23:04 #5
Еще вариант - ваш загрузчик путает спец. символы протокола XMODEM (например, заглавную и строчную "C"):

http://microsin.net/adminstuff/other...-overview.html
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
22.12.2019 23:18 #6
Цитата:
Сообщение от kovigor
Терминалка ? Прошивка передается по XMODEM'у ? Тогда фраза про повторы может означать повторные попытки передачи пакетов этого самого XMODEM'а. Т.е., пакеты попросту бьются. Почему ? А вы точно уверены, что кварц завелся на частоте в 16 МГц, и вообще в том, что МК тактируется от кварца ? И еще, на стороне машины должно быть правильно настроено управление потоком ...
Да, терминалка, да он самый XModem. По началу я тоже был уверен в том, что имеет место несовпадение скоростей портов мк и компа.. Я очень внимательно проверил все Fuse-биты (да вроде как и с пониманием их не замечал у себя проблем), мк настраивал и на внутренний осциллятор (при этом попутно увидел, что мой программатор некорректно работал с Fuse-битами данного мк и устранил этот глюк, думал что все.. в этом беда была, ан нет...).
Проверю еще раз настройки порта касаемо управления потоком...
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
22.12.2019 23:25 #7
Цитата:
Сообщение от kovigor
Еще вариант - ваш загрузчик путает спец. символы протокола XMODEM (например, заглавную и строчную "C"):

http://microsin.net/adminstuff/other...-overview.html
Не думаю, проверял в терминалке - когда запускается загрузчик в мк он ожидает пароль (символ "d"), я отправляю с терминалки, загрузчик отвечает приглашением символ "C", после этого я выбираю файл на отправку (прошивка, *.bin), указываю протокол и "Send". И насколько понимаю, первые 128 байт уходят в мк, мк пытается их записать во Flash - не получается (т.к. считанные с Flash данные не совпадают с данными в буфере), запрос на повторную отправку и так три раза.

Но, все же я проверю и этот момент...
Завтра хочу попробовать мониторинг COM-порта сделать...
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Гуру
 
Регистрация: 28.06.2012
Сообщений: 4,871
Репутация: 1171
1,317 118
483 1
 
22.12.2019 23:52 #8
Цитата:
Сообщение от Vadzz
запрос на повторную отправку и так три раза.
Так вот не факт, что дело вообще в памяти. Возможно, просто бьются пакеты с данными -> не совпадает CRC -> данные признаются сбойными и никуда не пишутся.
А еще можно перепутать русское и английское "C".
И еще. Ничто не мешает в загрузчике отмечать целые пакеты зеленой лампочкой, а битые - красной. Сразу все и поймете ...
Оценка
Специалист
 
Аватар для antonydublin
 
Регистрация: 22.09.2010
Адрес: г. Донецк
Сообщений: 873
Репутация: 381
372 0
3 0
 
23.12.2019 16:17 #9
Цитата:
Сообщение от Vadzz
Начал смотреть исходник загрузчика и понимаю, что ошибка эта появляется и накапливается (до 3) на этапе сравнения принятого буфера и считанной после записи страницы (128 Байт) Flash
Цитата:
Сообщение от kovigor
Так вот не факт, что дело вообще в памяти. Возможно, просто бьются пакеты с данными -> не совпадает CRC -> данные признаются сбойными и никуда не пишутся.
Вряд ли бьются пакеты. Но если так, Vadzz, посмотрите вот тут пару багов самого загрузчика AVRUB v4.5, исправление от 2012 года. На sourceforge актуальная версия загрузчика 5.2
Код:
1. In file bootldr.c, add below in line 475 and 499:
bufptr -= BUFFERSIZE;
It will cause download fail when CRC error. 
2. In file bootldr.c, replace lines
(*((void(*)(void))(BootStart)))();
to
(*((void(*)(void))(BootStart/2)))();
Оценка
Специалист
 
Аватар для Vadzz
 
Регистрация: 12.11.2008
Адрес: Тирасполь
Сообщений: 2,172
Записей в дневнике: 22
Репутация: 418
406 86
0 0
Отправить сообщение для Vadzz с помощью ICQ
 
25.12.2019 00:07 #10
Цитата:
Сообщение от antonydublin
Вряд ли бьются пакеты. Но если так, Vadzz, посмотрите вот тут пару багов самого загрузчика AVRUB v4.5, исправление от 2012 года. На sourceforge актуальная версия загрузчика 5.2
Код:
1. In file bootldr.c, add below in line 475 and 499:
bufptr -= BUFFERSIZE;
It will cause download fail when CRC error. 
2. In file bootldr.c, replace lines
(*((void(*)(void))(BootStart)))();
to
(*((void(*)(void))(BootStart/2)))();
Правки от 2012 года вносил - результат тот же.
А вот версию 5.2 не находил. Сегодня проверил... Сразу глянул исходники и вижу, что алгоритм записи страницы в память Flash переработан и очень похож на тот, что в ардуиновском загрузчике (ардуина, Optiboot). Тем не менее -результат такой же (не беру во внимание некоторые глюки с конфигурированием загрузчика), что заставило меня усомниться в правильности настройки микроконтроллера и загрузчика, в частности адресов областей Flash-памяти программы и загрузчика. Но я всё перепроверил, вроде все правильно.... Но судя по исходнику этот алгоритм применяется ко всем микроконтроллерам (в исходнике нет директив условной компиляции в зависимости от того какой контроллер выбран), что мне кажется некорректным...

Копаю дальше, уже с версией avrubd 5.2...

В ходе экспериментов (с использованием монитора COM-порта) обнaружил, что в версии avrubd 4.5 протокол XModem реализован некорректно, не берусь пока утверждать это на 100%, но если пакет данных принят с ошибками и приемник сигнализирует ответом NAK, то передатчик должен повторить отправку этого пакета с соответствующим номером пакета. А avrubd, когда приемник отвечает NAK возможно и повторяет отправку пакета, но номер пакета при каждой повторной отправке увеличивается на 1... Этот момент я еще проверю...
__________________
Уважаемые пассажиры, самолет ТУ-134 садится. У кого есть зарядка от ТУ-134, просьба пройти в кабину пилота.
Оценка
Ответ
Страница 1 из 2
Метки
atmega328p, avrubd
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Скидки, кэшбэк и бесплатная доставка от ТМ Электроникс
Часовой пояс GMT +3, время: 00:22.
Обратная связь РадиоЛоцман Вверх