Перейти к содержанию

Простой загрузчик (BootLoader)


Starichok

Рекомендуемые сообщения

не сиделось мне спокойно...

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

немного предыстории.

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

почти 3,5 года назад нашел и скачал загрузчик с сайта chip45.

из огромного количества загрузчиков для разных МК AVR, выбрал нужный мне для АТмега8.

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

но что интересно, в загрузчике реализовано автоматическое определения скорости СОМ порта компьютера. а также не нужно никуда подключать кнопку для управления загрузчиком.

читал я на форумах, люди ставят кнопку, но я забыл, для чего - то ли чтобы по кнопке запускать загрузчик, то ли наоборот, по кнопке запускать записанную программу.

попробовал на тактовой 8 МГц, на вскидку и получилось около 2 секунд. а тактовой 1 МГц уже думал, что не дождусь запуска, а оказалось, что время ожидание выросло также в 8 раз, так как МК просто отрабатывает заданную константу на таймере-счетчике.

это первый недостаток этого загрузчика - время ожидания зависит от тактовой частоты.

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

я дизассемблировал хекс и поисследовал его. оказалось, что для частоты 8 МГц время ожидания составляет 2,4 секунды. а для тактовой 1 МГц это превращалось в 19,2 секунды.

я тогда из дизассемблированного хекса сделал себе 2 варианта - на 8 МГц и на 1 МГц, с фиксированной скоростью порта и ожиданием 2 секунды.

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

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

 

теперь о моём загрузчике.

исправлен второй недостаток - теперь соединение всегда проходит с первого раза.

исправлен первый недостаток - в компьютерной программе есть "раздел" настройки загрузчика на конкретную частоту МК и желаемое время ожидания.

в архиве 4 загрузчика для разных популярных МК - ATmega8, ATmega88, ATmega168 и ATmega328.

для ATmega8 и ATmega88 загрузчики проверены на реальных МК, остальные 2 просто созданы, но проверить их мне не на чем. но работать они должны обязательно, так как ATmega168 и ATmega328 по коду загрузчика ни чем не отличаются от кода для ATmega88, только адреса начала загрузчиков разные.

загрузчик, вроде, вещь простая, но файл помощи у меня получился довольно большой, так как я постарался расписать всё подробно.

поэтому читайте помощь, а здесь я все подробности сейчас повторять не буду.

даю внешний вид компьютерной программы.

там видно, что выбрана скорость порта 100000 и подключен порт СОМ2. а также видно что соединение компьютерной программы с загрузчиком прошло успешно.

 

26.03.2024 выложил новую версию загрузчика BootLoader11.zip.

обнаружилась ошибка в прошивках для АТмега88, 168, 328. в результате ошибки не записывалась флешь.

также были сделаны несколько изменений в компьютерной программе.

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

также заменил картинку внешнего вида компьютерной программы.

 

28.03.2024 выложил новую версию загрузчика BootLoader12.zip.

сделал полный архив.

сделаны изменения в компьютерной программе и в файле помощи.

по просьбе nik1234 добавил выбор доступного (свободного) СОМ порта.

следует выбрать порт, к которому подключен МК. дальнейшие действия - прежние.

 

29.03.2024 выложил новую версию загрузчика, архив BootLoader13.zip.

в компьютерной программе добавлена блокировка от некорректных действий - без соединения МК с компьютером программа не будет пытаться делать запись.

 

01.04.2024 выложил новую версию загрузчика, архив BootLoader14.zip.

в компьютерной программе добавлена работа с файлом BootLoader.ini.

в этом файле сохраняются параметры настройки загрузчика на тактовую частоту МК и время ожидания.

при запуске программа устанавливает эти параметры в 8 МГц и 5 секунд. если у вас другая тактовая частота, то при последующем запуске программы не придется заново задавать частоту, как это было в предыдущих версиях. придется только задать новое время ожидания.

 

01.04.2024 выложил новую версию загрузчика, архив BootLoader Full10.zip.

это полная версия, имеет полный функционал, как у программатора.

умеет записывать, сравнивать (верификация), читать и стирать.

остальные подробности новых возможностей читайте в файле помощи.

даю картинку вида окна программы полной версии.

 

24.04.2024 выложил новые версии загрузчиков, архивы BootLoader15.zip и BootLoader Full20.zip.

в оба загрузчика добавлены проверки ответа от МК после каждой команды.

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

 

Загрузчик11.png

 

BootLoader11.zip

 

BootLoader12.zip

BootLoader13.zip

BootLoader14.zip

BootLoader Full10.zip

полная версия.png

BootLoader Full20.zip BootLoader15.zip

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

я хочу еще добавить о длине прошивок.

длина прошивки для АТмега8 от chip45 составляет 1668 байтов. это требует загрузочную область в 2 килобайта.

моя прошивка  для АТмега8 делает всё то же самое, но её длина равна 454 байта, что в 3,674 раза меньше.

это результат того, что у них загрузчик написан на Си, а у меня на ассемблере.

я уже где-то писал, что на Си код получается в несколько раз больше, чем у аналога на ассемблере. но мне пытались втюхать, что на Си код получается всего на 15-20% больше.

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

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

спасибо, посмотрю.

но вообще, после создания собственного загрузчика мне это уже не интересно.

но посмотрю и дизассемблирую для исследования.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Подсказали загрузчик для флеш на 128 команд 256 байт для Atmega8, Я его оптимизировал под 103 команды, 206 байт, и скорость 115200, на большей скорости не проверял.

И запуск делал по другому, сначала стартовал программу на запись (время ожидания не ограничено, остановить можно по кнопке стоп), а потом делал ресет МК, программа ожидает команды от загрузчика на готовность. При обычном запуске МК он 2.1 сек ждет ответа от компа и если его нет переход по адресу 0.

bootkkk.asm

Ссылка на комментарий
Поделиться на другие сайты

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

32 минуты назад, donec сказал:

Я его оптимизировал под 103 команды, 206 байт

спасибо, посмотрю твой код.

если у меня убрать автоизмерение скорости порта, а USART настроить на фиксированную скорость, то у меня останется примерно 150 байт, ну, плюс немного для отработки времени ожидания связи с компом. это будет всяко меньше твоих 206 байт.

5 минут назад, Изя сказал:

Зачем? Исходные тексты открыты.

хорошо, поищу исходники.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

@donec , посмотрел твой файл.

так у тебя там еще нет записи еепром, а у меня есть.

без записи еепром у меня будет еще заметно короче, чем у тебя.

и ты с компом работаешь по одному байту, а я передаю блоками по 128 байтов, или 64 байта, если надо записать только одну страницу флеши.

для еепром я передаю блоки по 128 байтов или блок из оставшихся байтов, если их осталось меньше 128.

но я не отправляю "эхо" полученных байтов, а у тебя каждый принятый байт отправляется обратно в комп.

и это необязательное "эхо" у тебя добавляет дополнительный байты.

ты настраиваешь baudrate для частоты 7,3728 МГц. то есть, твой код не универсальный, а нужно его компилировать для каждой конкретной тактовой частоты.

у меня же с автоопределением скорости порта код универсальный, для любой тактовой частоты.

1 час назад, Изя сказал:

Старичок, посмотри optiboot. Тоже на Си

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

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

@Starichok подробно не помню, что и как там было, это было лет 10 назад, если не ошибаюсь то этот boot работал с Atmel Studio 4, через UART можно было прошивку записать, потом в следующей версии студии эту возможность убрали.

Ссылка на комментарий
Поделиться на другие сайты

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

там написано, что его загрузчик поддерживает  программу AVRprog, которая встроена в AVR Studio.

видимо, твой код был тоже ориентирован на эту AVRprog.

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

каждый сделает в меру своих знаний по приемам программирования.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

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

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

скачал я архив optiboot-8.0.zip с сайта github.

немного посмотрел исходники. но на Си для МК я не пишу, поэтому подробно не смотрел.

там оказался хекс для АТмега328, дизассемблировал его - мне на ассемблере проще читать и разбираться, что там сделано.

вот что я обнаружил:

1. хекс создан на фиксированную тактовую частоту 16 МГц и фиксированную скорость порта 115200.

это дает погрешность скорости 2,08%. при передаче по одному байту такая погрешность не сказывается.

а передаю одновременно блок из 128 байтов. с такой погрешностью я работать не смогу.

2. записи EEPROM там нет, а у меня есть.

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

и наоборот -загрузчик optiboot ни чем не лучше загрузчика с сайта chip45.

теперь удалю у себя всю информацию об optiboot за полной ненадобностью для меня.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Попробовал программу загрузчика под WinXp 32, порты видит но передача с порта отсутствует. Попробовал под Win10 32, сигнал с порта появился, но ATmega88PA не отвечает. Конкретно меня интересует последовательность программирования памяти программ. Делал загрузчик на Attiny24 по последовательному каналу, все прекрасно работает, а на ATmega88PA все тоже самое, и не работает. То-ли чип дохлый, то-ли я чего-то не замечаю.

Ссылка на комментарий
Поделиться на другие сайты

у меня, как раз, ATmega88PA, и на нем прекрасно работает. но у меня Win10 64.

я создаю компьютерные программы со статическим подключением библиотек, а 64- разрядные библиотеки работать в 32-разрядной версии не будут.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Запустил Вашу программу на Win10 64, соединение установилось. EEPROM программируется, а Flash нет.

Битый чип. Спасибо за полезную программу и мое сэкономленное время.

Раз это бутлодер, и никакими другими способами невозможно добраться до памяти, неплохо-бы добавить верификацию записанного. Судя по размеру файла программы (он небольшой по нынешним меркам), и предполагая высооочааайшую!квалификацию Автора, добавить дополнение Ему не составит большого труда. (... что внутри?, что мы должны извлечь? ...)

Ссылка на комментарий
Поделиться на другие сайты

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

тогда вопрос: всё ли ты правильно сделал - какой у тебя  МК, и какой ты ему файл загрузчика записал?

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Ваш бутлодер записал в чип внешним программатором по СПИАЙ (а как еще?). Запустил Вашу полезную программу, понажимал на кнопочки. Соединение установилось, выбрал ХЕКС файл для загрузки, и нажал на кнопочку запрограммировать. Программа выдала время программирования. Затем было считано содержимое флеш памяти внешним программатором по СПИАЙ. оказалось ничего не запрограммировалось.

А, да чип ANmega88PA tqfp32.

Ссылка на комментарий
Поделиться на другие сайты

у меня, как раз, АТмега88РА, и у меня на нем работает прекрасно.

тогда еще вопрос: а по SPI у этого твоего МК флешь программируется?

если программируется, то возможно, у него внутренняя неисправность для записи флеши.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

да и флеш и еепром по внешенму спиай программируется, а то как бы я запрограммировал туда ВАШ бутлодер? Вот потому и встал вопрос о верификации в ВАШей полезной программе, ну как-бы она стала более полной и законнченой что-ли. Ну как-то так.

Ссылка на комментарий
Поделиться на другие сайты

ну да. "глупый" вопрос я задал... извиняюсь.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

10 часов назад, nik1234 сказал:

Вот потому и встал вопрос о верификации в ВАШей полезной программе, ну как-бы она стала более полной и законнченой что-ли. Ну как-то так.

дело в том, что если в МК уже записана какая-то программа, то новая программа пишется, затирая имеющуюся. и если новая программа короче старой, то останется незатертый "хвост" от старой. и поэтому верификация со старыми остатками не пройдет.

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

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

но прошивку полного загрузчика я пока сделал только для АТмега8.

а уже потом "обрезал" до необходимого минимума - запись флеши и запись еепрома, как это сделано в загрузчике от chip45.

понятно, что сделать сравнение и убедиться в правильности записи не помешало бы.

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

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

взялся сейчас проверять на своем АТмега88РА - у меня тоже пропала запись флеши.

а еепром нормально пишет.

так что, исправный твой МК.

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

также перепроверил на АТмега8 - всё по-прежнему работает прекрасно. а на АТмега88 пропала запись флеши.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

нашел ошибку для АТмега88, и соответственно, для 168, 328.

видимо, я сделал это ошибочное изменение в исходнике, но поспешил и не проверил, что пропала запись.

ошибку исправил, проверил работу на АТмега88, теперь флешь пишется без проблем.

в первом посте выложил новый архив BootLoader11.zip. первоначальный архив удалил из-за неработоспособности указанных прошивок.

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

также были сделаны несколько изменений в компьютерной программе.

старой программой BootLoader.exe для настройки файлов новых прошивок пользоваться нельзя! в этой части тоже были сделаны изменения в программе.

Мудрость приходит вместе с импотенцией...

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Вот такая схема получилась.  Какая у нее работоспособность при правильно подобранных деталях? Планирую все диоды КД213, T2 чашка (21 мм внешний, 1.8 мм толщина, 1.2 мм толщина у основания, общая высота 6.2 мм, внутренний диаметр 8.4 мм, отверстие 4.3 мм) 15 витков первичная и вторичная, транзисторы IRF3205; R7, R8 1Ом; C1, C2 10nF; C3 500pF, C4 10nF, C5 1 mkF, C6 50 000 mkF; R1, R2 100Ом; R3, R4 56Ом; R5, R6 10k; R9 10Ом, C7 10nF; стабилитроны на напряжение выше напряжения открытия IRF3205; C8, C9 зависимо от частоты.  Инвертор 12В стаб. - 150В постоянного 0,3А *2 вторичных обмотки на кольце М3000НМ (7.5mm высота, примерно 24 внутренний, 41 внешний), содержащем по 7 витков(14) с отводом первичной обмотки и по 90 витков вторичной. Чисто для питания двух РД-09П2 (кратковременно, на пониженной частоте, для усиления момента, для поворота видеокамеры), по интернету сопротивление 560 Ом, 150/560=0,2678A 0.3*2*150=90W, 90W/12V=7.5A
    • это да. не могу определиться с номиналом предохранителя
    • В "Нафаню" в том числе, еще в ЦАПовый фильтр надо...    Глазки подсели, без удовольствия уже 0603 паяются, да и 0805- тоже. Для себя когда развожу-обычно ставлю пады, чтобы можно установить было 0805 и 1206. Если место есть...
    • Да любое, главное по первичке напряжение менять, ШИМ запитать от БП внешнего далее ЛАТР, реостат и подавайте напругу. Проще ловить момент насыщения. в данном случае будет привязка к напряжению, а не к подбору витков на ходу . Это чисто решение удобства и времени.
    • @key18 , вам повезло. Разбирал где-то год назад как раз вот такую: Как и у вас, некоторые кнопки перестали срабатывать. Разобрал, вынул неработающие, разобрал и их. Посмотрел на контактную мембрану и контакты внутри. Ужас. Чёрное, насосало непойми-чего, коррозия жуткая. Покрытие всё изъедено. Хоть и закрыто вроде всё, но пар и кухонные испарения туда внутрь засасываются. Заменил все кнопки на новые, хотя их в этой модели штук 20. Раз начали "сыпаться", то значит скоро посыпятся все. Кнопки там обычные тактовые вот такие: Винт под наклейкой действительно есть. Скорее не винт, а саморез. Закручен в пластмассу. Под наклейкой я его тоже не увидел. Подумал, что там защёлка и вынул так. Так как он закручивается в пластмассу, то на резьбу там пофиг, потом он в то же отверстие прекрасно закрутился. Не затягивал, конечно, но он вполне держит, а сильно там и не надо. Закручивал, конечно, уже отогнув край наклейки. А вот точно место, где он, не могу вспомнить. Где-то вверху, по-моему. Хотя если подёргать, то там прощупывается место, где держит. Отогнуть край наклейки несложно. Подцепил угол скальпелем и аккуратно отогнул. Никаких кнопок на наклейке нет, так что повредить нечего. И клеящий слой остался липким, потом прекрасно приклеилось обратно и держится до сих пор.
×
×
  • Создать...