Система доступа на Atmega1280 + совмещение загрузчика и прошивки в одном проекте.

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

Читать дальше

Bootloader для STM8. Прошивка "по воздуху"

Представленные ниже материалы не претендуют на научную новизну и новаторство, а являются просто кратким обзором моей реализации бутлоадера для STM8 для прошивки из внешней EEPROM. В конце статьи приложен рабочий проект под IAR. Основано (скорее даже «содрано») все на AppNote от ST. Надеюсь, что кому-то поможет быстрее реализовать некоторые задумки.

Предисловие
Делал я недавно приборчик с Wi-Fi модулем на борту. Хост контроллер там стоит STM8S. Ну и встал вопрос обновления прошивки МК «по воздуху».
Обычно везде описывается вариант работы бутлоадера «на лету» с управлением от некой компьютерной утилиты, которая по какому-либо интерфейсу (UART, SPI, I2C) засылает фрагмент прошивки в МК, этот фрагмент заливается во flash, далее идет следующий фрагмент… и так пока не зальем всю прошивку. Если в процессе прошивки произошел какой-либо сбой (вырубился свет, отказал канал связи), мы спокойно этот сбой устраняем, запускаем bootloader и повторяем попытку. Автономность загрузчика в большинстве случаев ограничивается проверкой условия входа в загрузчик.

Но в некоторых случаях (например, в моем) этот вариант не катит. Например, когда нет прямого доступа к интерфейсам МК, потому что связь с ним (МК) осуществляется через некий канал связи (GSM-модуль, Wi-Fi модуль, PLC). Тогда если произошел сбой в процессе прошивки, то при следующем запуске уже некому будет установить этот самый канал связи т.к. скорее всего bootloader не потянет функционала по управлению вышеперечисленными устройствами.
Напрашивается идея сначала силами основной прошивки «сливать» «образ» новой версии куда-то (например во внешнюю EEPROM), а потом уже загрузиться под бутом и прошиваться с любым количеством попыток, т.к. даже если какой-то сбой и произойдет — из EEPROM образ прошивки никуда не денется.



Читать дальше

Загрузчик для микроконтроллеров AVR.

AVR
Как то потребовался мне для одного проекта загрузчик для чипов AVR. Писать самому некогда было, да и не совсем быстрое это дело. Поэтому стал рыть интернет. Рыл, рыл и нарыл. Товарищ Шао зэ ян его создал(китаец).

Читать дальше

UART загрузчика для STM8S103F3 топик-ссылка

Писать в 2 места чревато ошибками, по этому только ссылка на статью с целью обратной связи. Кто протестирует - буду рад услышать результаты. Кто просто имеет идеи - тоже не возбраняется к высказыванию. Кратко: Загрузчик для STM8S*03F3 работает по UART с терминалом. Принимает файлы формата Intel HEX. Находиться в старших адресах памяти и не требует специальной сборки целевой прошивки (<= 7кБ исключая последний 1кБ Flash-памяти). Написано на ASM в STVD, проект полностью открытый.

Защита устройства от взлома и копирования

Защита от копированияОбещал я недавно моему знакомому — хорошему электрику и чайнику в электронике — сделать небольшое устройство
1) Итак, сделали вы ваше устройство, продали заказчику c предоплатой. Проходит условленный месяц — а второй части оплаты все нет и нет… Вы ему звоните — а он куда-то пропал… Вы ему угрожаете — а он отмазывается. В результате железякой он пользуется, а деньги вам все не отдал. Г-гадина!!!
2) Итак, сделали вы ваше устройство, продали заказчику и радуетесь жизни. А потом с удивлением обнаруживаете на рынке до боли похожее устройство, но сделанное кем-то другим. Оказалось, что у заказчика взял посмотреть ваше устройство его друг, который ваш конкурент. Он его скопировал и теперь продает. Г-гадина!!!
3) Итак, сделали вы ваше устройство, продали заказчику и радуетесь жизни. Вы закрыли все fuse у контроллера — порядок, копировать не будут!.. Так как устройство у вас поддерживаемое, вы регулярно выкладываете обновления, которые заливаются bootloader-ом. А потом с удивлением узнаете, что дружбан заказчика чего-то там модернизирует в вашей программе, делает похожую плату и начинает тиражировать устройство. Оказывается, он проанализировал ваш код и теперь ваяет свое. Г-гадина!!!

У вас такое было/будет/волнует? Если да — то учимся не допускать этого!

I. S. Спасибо всем за дельные комментарии!


Читать дальше
  • +19
  • 25 октября 2012, 14:46
  • PICC

Бутлоадер для STM8 - хак для комфорта и удобства :)

!

Заслуга по созданию нижеописанного принадлежит Vga , но ему лень написать. Поэтому плюсики — ему :)

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

Естественно, работать с ним руками очень весело и забавно. Одну руку кладем на мышь, наводим курсор на кнопку «Next» в программе-прошивалке, другую руку — на кнопку сброса на плате. И хорошо еще, если кнопка сброса есть и легко доступна. Зажимаем кнопку сброса, готовимся, ОТПУСКАЕМ СБРОС НАЖИМАЕМ NEXT. Если фокус удался, то бут откликнется. Иначе — повторить. А с первого раза получается не всегда, особенно если задумаешься о вечном :)

В общем игра интересная, сложная, но быстро надоедает. И надоедает она тем быстрее, чем более старая кнопка выполняет роль сброса (тактовые кнопы со временем начинают глючить).

Как многие наверняка знают, у нас тут намечается процессорный модуль с STM8L под PB2. А отладчика для STM8 на базе FT2232 не намечается. Поэтому тем, кто вовремя не затарился дискавери, придется пользоваться бутлоадером.

Но продавать тренажер для прокачки ловкости под видом процессорного модуля никто не собирался: проблему надо было как-то решать.
Исходников той части программы, которая работала непосредственно с бутлоадером у меня не было, а без них допилить функционал было проблематично. Я обратился с идеей по допиливанию проги к Vga, и за пару дней он родил Хак. Он дополнил библиотеку, работающую с загрузчиком функцией сброса контроллера.

Теперь перед тем, как начать работу с загрузчиком, она подает отрицательный импульс на ножку DTR. Если эту ножку подключить к RESET контроллера, то программа сбросит МК перед тем, как к нему обратиться. Теперь нам нужно всего-лишь кинуть проводок от DTR (это пин DBUS4 на PINBOARD II) к RESET и наслаждаться удобством :)

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

Для пущей наглядности, кино:

P.S. Спасибо Vga :)

ToyLoader — простой бутлоадер для PIC18 по шине питания

PIC
 Недавно я решил сделать небольшую игрушку. Для неё я воспользовался контроллером pic18f2550, но не потому что он такой крутой, а потому что у меня завалялась их целая куча.
И приспичило мне менять в этой игрушке прошивку по мановению руки. Естественно, в таких случаях обычно используются бутлоадеры. Бутлоадер же в свою очередь должен как-то общаться с хостом, например через UART/USB/свой протокол. Но для всех них надо тащить к устройству дополнительные провода; чего мне не очень хотелось, а точнее очень не хотелось, поскольку девайс и так подключается к питанию довольно длинными проводами.

Естественный выход — грузить прошивку по шине питания. Покопавшись в интернетах, я нашёл подходящий мне бутлоадер — ZPL, но по сслыке меня ждал облом. «Сами с усами» — подумал я, и расчехлил компилятор…


Читать дальше
  • +5
  • 02 апреля 2012, 23:31
  • atd

STM32, прошивка через RS-232

Не пинайте, на STM32 это мой первый девайс. Надумал заложить в него возможность перепрошивки через RS-232. Юмор в том, что для указания режима загрузки используется один BOOT0, это отдельный пин, и один назначенный на PORTB, PB2.
Следуя даташиту, в этом режиме должно быть BOOT0=1 и BOOT1=0. Хочется убить 2 зайца, и пины в будущем задействовать и иметь возможность грузить прошивку через ком-порт.
В процессе нарисовал вот такой смешной селектор для прошивки через ком-компорт


Читать дальше

Кроссплатформенный загрузчик для AVR

AVR
В ходе работ по усилителю для Редгерры (http://www.whitefossa.ru/files/Gerry_amplifier/) мяу написал загрузчик для заливки прошивок в МК. Вы скажете, что таких загрузчиков полно? Да, это так, но во-первых мой собственный мяу ближе, а во-вторых — он обладает кошерными свойствами:

Кроссплатформенность. Клиент загрузчика написан на Qt4, компиляется из одного исходного кода и одинаково работает на Windows (XP x32, XP x64 и Win7 x64 — проверено) и Linux. Должен работать и на других ОС, для которых существует реализация Qt.
  • Отсутствие привязки к AVR Studio.
  • Прошиваемый в МК загрузчик написан на ассемблере и занимает ~560 байт (размер загрузчика ставьте в 512 слов).
  • Прошиваемая часть по-идее должна работать на разнообразных AVR-ках без изменений.
  • Клиентская часть загрузчика содержит базу данных устройств по производителями и моделям (а-ля USB), в которой хранится информация об устройстве, размере его памяти, её организации и т.д. Таким образом, отпадает нужда в хранении этих данных на МК. На МК хранится только идентификатор производителя (3 байта), идентификатор модели (3 байта) и серийный номер (4 байта). Вы можете добавлять свои записи в БД (файл ident.sqlite), только запрашивайте у мяу идентификаторы производителя во-избежание дублирования.
  • Загрузчик принудительно делает бэкап всей прошивки (включая самого себя) и EEPROM перед началом прошивки, таким образом вы никогда не забудете о бэкапах.
  • Сброс во время перепрошивки, некошерная прошивка и тому подобные вещи теперь не страшны — сам загрузчик защищён от записи, поэтому даже в случае повреждения прошивки её можно легко восстановить.
  • СЗагрузчик, клиентская часть и документация являются свободным и открытым программным обеспечением (as beer and as speech) и распространяются под лицензией GPLv3. Таким образом вы можете свободно использовать его, модифицировать и распространять на своих устройствах (подробнее — читайте GPLv3).
  • Загрузчик может работать с любой частотой кварца и скоростью UART, которую поддерживает ваш МК — в клиентской части можно задать все параметры работы с UART.
  • Работает быстро — так как не использует таймауты при работе с портом.
  • В полном соответствии с духом и буквой GPLv3 не поддерживает биты блокировки — ваша прошивка, содержимое EEPROM и сам загрузчик всегда могут быть скачаны прямо с МК.
  • Загрузчик умеет перезагружать устройство после перепрошивки.
  • Легко настроить под ваше устройство. Откройте проект с прошиваемой частью, отредактируйте порт и ногу, на которой будет ожидаться низкий уровень для входа в загрузчик, порт и ногу, на которой будет выставляться высокий уровень, когда мы в загрузчике, тактовую частоту, скорость UART и соберите проект. Для входа в загрузчик надо установить низкий уровень на указанной ноге и дать МК Reset.
  • Проверяет правильность записи всех данных.

Недостатки:

Не поддерживает память МК больше, чем 64кбайта. Если вам нужно больше — модифицируйте протокол обмена, исходники, и пришлите всё это мяу.
Мог бы шить быстрее, так как время тратится на проверку записанных страниц.

Уже хотите качать? Запросто:

http://whitefossa.ru/bootloader/floader-0.0.1_src_noarch.tar.gz и http://whitefossa.ru/bootloader/floader-0.0.1_src_noarch.7z (содержимое идентично) — все исходники + документация.
http://whitefossa.ru/bootloader/floader-0.0.1_windows.7z — скомпилированный под Windows клиент + проект с прошиваемой частью.
http://whitefossa.ru/bootloader/floader-0.0.1_linux_x86-64.tar.gz — то-же, но для Linux.

И да, выглядит это вот-так:
Скриншот
  • +2
  • 17 января 2012, 22:06
  • fossa