реклама на сайте
подробности

 
 
> Автономный микропрограмматор BootProg для прошивки boot-а (а может и не только), "Схема" из 5-и деталей + программа. Может заинтересует...
Dimonira
сообщение Nov 9 2008, 21:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Начну с того, для чего это потребовалось и "откуда ноги растут".
Три года назад сделал по заказу девайсы на ATMega16, софт к ним. Девайсы имели интерфейс с компьютером по RS-232 и я заложил в схему возможность запуска boot-загрузчика (перемычку). Но тогда по запарке, а может из экономии денег (не помню точно), заказчик решил не делать boot-загрузчик и прошивать девайсы только программатором. За три года много девайсов разошлось по миру и никому не требовалось что-то менять в девайсах.
Но тут вдруг в Германии нашлись потребители, которые захотели-таки немного "заточить" девайсы под себя. И встал вопрос а как быть? Ну, софт доработать не проблема, а как его заменить в девайсах? И при этом не открыть прошивку, т.е. не отдать её в чужие руки в открытом виде. Ехать кому-то в Германию с программатором, софтом и т.п. накладно. Отдать прошивку (если они сами найдут программатор) нельзя, мало ли что. Девайсы то по железу простые, скопировать раз плюнуть. Просить чтобы прислали девайсы сюда тоже накладно, долго, проблемы таможни и т.д. Что делать?
И тут появилась идея автономного (т.е. без компьютера) микропрограмматора. Это маленькое устройство, которое подключается к разъёму ISP девайса (питается от него же) и программирует его после включения питания. Тогда мы им высылаем этот маленький программатор и они с его помощью "оприходуют" все свои девайсы. Для простоты было решено таки программировать AES-boot загрузчик, а потом уже с компьютера заливать в девайсы новую версию софта (а потом и следующие обновления, если будут). К тому же загрузчик мал по размеру (менее 2К), так что нет проблемы его "запихать" в память контроллера микропрограмматора. Конечно, возможность "перехвата" кода остаётся - если "снять" весь обмен по ISP в момент программирования. Но всё же это потребует некоторых "спец" средств, которых может не быть под рукой. Да и желание "связываться" может отпадёт. Для "надёжности" ещё решено применить счётчик программирований, - задать количество девайсов, которые можно будет прошить микропрограмматором. Счётчик будет в eeprom, декрементироваться после каждого удачного программирования. При обнулении счётчика - в отказ.

Теперь о железе микропрорамматора. Это 5-ть деталей: контроллер ATMega48V (в DIP-корпусе), светодиод, резистор 470 Ом (или около того), панелька 28 ног для контроллера и разъём ISP (в моём случае 6 пин) для втыкания в целевой девайс. Схему тут не привожу, т.к. её рисовать дольше чем написать текстом: выводы земли и питания с ISP разъёма подаются на ноги котроллера 8,22 и 7,20 соответственно; сигналы MOSI, MISO, SCK на одноимённые выводы контроллера - 17,18,19; сигнал RESET - на вывод 16; светодиод катодом на вывод 6 и анодом через резистор на плюс питания (нумерация ног для DIP-корпуса!). Тактирование делается внутренним RC-генератором, на который контроллер "настроен" с завода. Я только сбросил фуз-бит делителя на 8, чтобы контроллер начал работать на тактовой 8 МГц. Панелька нужна для того чтобы вынуть контроллер и зашить его в программаторе. Но можно доработать схему для того чтобы шить контроллер не вынимая, - для этого надо добавить переключатель, который переключает сигнал RESET с разъёма ISP между выводами 16 и 1 контроллера. Я так не делал, чтобы избежать каких-либо проблем с немцами или при пересылке, - вдруг перемычка сорвётся, будет переставлена и т.д., надо чтобы всё было "железно".

Как работает. Подключаем к ISP разъёму, включаем питание целевого девайса, начинается программирование. Поскольку оно очень быстрое, то индикация сделана только "по результатам". Если не удалось войти в режим программирования, то длинная вспышка светодиода и такая же пауза, попытки войти в режим программирования циклически повторяются. Если контроллер девайса не тот, который должен прошиваться (не тот ID кристалла), то короткая вспышка с длинной паузой. Если истёк счётчик прошиваний, то короткая вспышка и короткая пауза. Если всё в норме, то постоянное свечение. В последних трёх случаях микропрограмматор в итоге зацикливается на высветке.

Софт микропрограмматора сделан путём кастрации софта из моей темы про программатор Dimoniprog (тут). Для упрощения все ожидания завершения программирования флеша или фузов с локами сделаны просто на задержках.
Для использования проекта в своих целях надо адаптировать под нужный целевой кристалл (код кристалла, задержки, значения фузов и локов). Это делается настройками определений в начале файла isp.c. У меня всё настроено для программирования целевого кристалла ATMega16. Возможно, для надёжности следует уточнить коды команд интерфейса сериального программирования по даташиту целевого кристалла (хотя это вроде у всех АВР Атмелов однохренственно). В файле main.c надо задать счётчик возможных программирований и вставить код своего boot-загрузчика. Внимание! В приводимом исходнике main.c код загрузчика по понятным причинам искажён (потому работать и не будет) и приводится для наглядности. Код загрузчика (для тех кто в танке) берётся из Application Note AVR231.
Для того чтобы легко получить код своего загрузчика в виде исходного текста, я наваял програмку Hex2Src, которая принимает через командную строку имя файла загрузчика, например, boot.hex (можно не только в intel-hex формате, но и в motorola и tektronix). После запуска будет создан файл с тем же именем, но расширением .c. Из него надо взять нужное и с небольшими правками перенести в файл main.c. Думаю, трудностей возникнуть не должно.
После внесения всех правок компилируем проект BootProg. Поскольку в проекте используется eeprom, то выходной файл компилятора задан в simple формате. Так что для получения из него файла кода в hex-формате надо применить POSTLINK команду. Для простоты я её добавляю в оболочку IAR через "Configure Tools...". Надо ввести следующее:
Код
Menu Text: Postlink
Command: $TOOLKIT_DIR$\bin\POSTLINK.BAT
Argument: $TARGET_FNAME$ $TOOLKIT_DIR$\bin\POSTLINK.EXE
Initial Directory: $TARGET_DIR$

И поставить галку "Redirect to Output window". Сам файлик POSTLINK.BAT (оригинальный в директории BIN софта IAR) надо подменить на поправленный, который можно взять из темы тут.
После компиляции вызываем из меню "Tools" команду "Postlink". В результате получаем hex-файл прошивки ATMega48V. Зашиваем флеш, а зашивать eeprom нет необходимости - инициализация счётчика загрузок делается программно. Микропрограмматор готов!
---------------------------------------------------
Сделал я сей девайс и пришли другие идеи. Ведь такая штука может быть нужна не только для случая подобного моему. Например, вот ещё. Если увеличить память (другой контроллер взять), то можно шить не только загрузчик, но и вообще весь софт в целевой девайс. Тогда, допустим, это может быть востребовано на производстве - клепают девайсы и тут же шьют, ни компьютеров не надо, ни программаторов (надо только счётчик загрузок выкинуть). Один раз зашил где-то этот микропрограмматор, а потом только переливай.
Или вот ещё мысль. Можно сделать микропрограмматор (опять же если взять с большей памятью) на разные целевые кристаллы, - каждому своя "заливка". При этом, например, выбирать что заливать по коду кристалла, который считывается вначале. Или выбирать перемычками. Тогда будет "походный автономный заливатель" на несколько девайсов.
Прикрепленные файлы
Прикрепленный файл  BootProg.rar ( 21.69 килобайт ) Кол-во скачиваний: 128
Прикрепленный файл  Hex2Src.rar ( 39.33 килобайт ) Кол-во скачиваний: 99
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dimonira   Автономный микропрограмматор BootProg для прошивки boot-а (а может и не только)   Nov 9 2008, 21:12
- - zltigo   Цитата(Dimonira @ Nov 10 2008, 00:12) Кон...   Nov 10 2008, 07:37
- - Josh   ЦитатаДля работы на производстве оптимальный вариа...   Nov 10 2008, 08:24
- - Dimonira   Граждане! При желании можно скопировать всё и ...   Nov 10 2008, 09:09
|- - Maik-vs   Цитата(Dimonira @ Nov 10 2008, 12:09) ......   Nov 10 2008, 11:23
|- - Dimonira   Цитата(Maik-vs @ Nov 10 2008, 14:23)...   Nov 10 2008, 17:30
- - muravei   Цитата(Dimonira @ Nov 10 2008, 00:12) это...   Nov 10 2008, 18:12
- - DVF   Удобная штука для производства. При передаче опера...   Nov 11 2008, 07:22
|- - Огурцов   Ценно! Для себя. Поэтому AES тут не нужен. А в...   Nov 11 2008, 07:48
- - Dimonira   Дык AES будет нужен потом, когда будет заливаться ...   Nov 11 2008, 10:27
|- - Огурцов   Так SPI же на таргет все равно открытый - Вы сами ...   Nov 11 2008, 12:33
- - Dimonira   Ну так ведь речь зашла о назначении AES, а он не с...   Nov 11 2008, 18:25
|- - Огурцов   Не, это ж банально - стоимость взлома защиты должн...   Nov 11 2008, 22:01
|- - Dimonira   Цитата(Огурцов @ Nov 12 2008, 01:01) Имхо...   Nov 12 2008, 05:51
- - Dimonira   Немного доработал програмку преобразования кода в ...   Nov 14 2008, 17:49
- - Dimonira   Новости по результатам реализации нового варианта ...   Nov 15 2008, 21:47
|- - ReAl   Цитата(Dimonira @ Nov 15 2008, 23:47) Кст...   Nov 16 2008, 07:07
|- - Dimonira   Цитата(ReAl @ Nov 16 2008, 10:07) Обижаеш...   Nov 16 2008, 09:31
- - Waso   Здравствуйте! Возникла необходимость собрать п...   Oct 28 2010, 10:05
|- - MrYuran   Цитата(Waso @ Oct 28 2010, 14:05) Какие...   Oct 28 2010, 10:43
|- - Waso   Цитата(MrYuran @ Oct 28 2010, 17:43) Здес...   Oct 28 2010, 16:46
|- - MrYuran   Цитата(Waso @ Oct 28 2010, 20:46) Спасибо...   Oct 29 2010, 06:31
- - ArtemKAD   ЦитатаХацкеры обычно разными способами сбивают эти...   Oct 28 2010, 18:27
|- - ReAl   Цитата(ArtemKAD @ Oct 28 2010, 21:27) Рез...   Oct 28 2010, 19:10
- - ArtemKAD   ЦитатаИ от блин температуры будет блин зависеть бл...   Oct 28 2010, 20:54
- - ReAl   Ну если нужно порсто случайное число, то да. Мне п...   Oct 29 2010, 06:03
- - Waso   Цитата(ArtemKAD @ Oct 29 2010, 01:27) Лич...   Oct 29 2010, 06:19


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 04:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01378 секунд с 7
ELECTRONIX ©2004-2016