Jump to content

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


Starichok
 Share

Recommended Posts

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

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

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

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

почти 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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

Важные нюансы подбора литиевых ХИТ для разработчиков

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

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

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

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

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

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

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

Link to comment
Share on other sites

Литиевые батарейки и аккумуляторы от мирового лидера EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. EVE является поставщиком аккумуляторных элементов круглого формата для электрических моделей автомобилей.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

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

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

bootkkk.asm

Link to comment
Share on other sites

Продукция Hongfa для различных применений в Компэл

Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>>

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

39 минут назад, Starichok сказал:

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

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

Link to comment
Share on other sites

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

А, да чип ANmega88PA tqfp32.

Link to comment
Share on other sites

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

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

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

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.

×
×
  • Create New...