Главная arrow Статьи arrow Концепция универсального программатора и ее реализация  
14.10.2024 г.
Главная
Проекты
Статьи
Начинающим
Архив новостей
Ссылки
Контакты
Поиск
Файлы
Форум
Карта сайта
Авторизация





Забыли пароль?
Ещё не зарегистрированы? Регистрация
Поддержи наш сайт!
Через WebMoney

 R785211844650
 Z210696637574
 E368177590409

Концепция универсального программатора и ее реализация Печать E-mail
Рейтинг: / 9
ХудшаяЛучшая 
Автор ARV   
23.07.2007 г.

Homo Programmus :-)Среди огромного многообразия современных микроконтроллеров слегка "особняком" стоят микроконтроллеры семейства AT89Сх051 фирмы Atmel. Это MCS51-совместимые микроконтроллеры с 1, 2 или 4К Flash-памяти программ в компактном 20-выводном корпусе. При этом они содержат встроенный компаратор. Благодаря гармоничной системе команд, неплохому набору встроенной периферии, широкому спектру средств разработки программ, малым габаритам и невысокой стоимости эти микроконтроллеры могли бы стать настоящей находкой для радиолюбителей. Однако, к сожалению, этому препятствует невозможность внутрисистемного (ISP - in system programming) программирования. Причина проста - эти микроконтроллеры используют "полупараллельный" интерфейс программирования с использованием повышенного напряжения, т.е. для их программирования необходим специальный программатор.

 

Схем программаторов для упомянутых микроконтроллеров известно немало, взять хотя бы публикации в журнале "Радио" (да и в сети их немало), но все они (в разной степени) имеют ряд недостатков:

  • Все схемы либо достаточно сложны (около десятка микросхем и другой "россыпухи"), либо не позволяют выполнять ряд функций (например, верификацию программирования).
  • Каждая схема поддерживается собственным вариантом программного обеспечения, зачастую для среды MS DOS, функциональность этого ПО так же не всегда полная, не говоря уже о сомнительности его работы в современных операционных системах типа WindowsXP.
  • Широкоизвестные софт-программаторы типа PonyProg, увы, знать не знают об этих микроконтроллерах и программаторах.

Кроме вышеизложенных обстоятельств, на разработку нового программатора автора сподвиг так же опыт работы с всем известным программатором PonyProg. Очень даже неплохой продукт все-же обладает и недостатками, причем из-за своей незначительности ужасно надоедающими (ну, как мухи!): путаница с установкой Fuse-битов, бесконечные нажатия на кнопки в окошках типа "Все успешно сделано", полная неинформативность о причинах возникающих ошибок и т.п. К тому же полная "закрытость" проекта - раз любимый контроллер автор PonyProg не счел нужным поддерживать, значит, так тому и быть, ничего не поделаешь...

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

Итак, вот требования к программно-аппаратному комплексу для программирования устройств (да-да, не микроконтроллеров, а более широко - в принципе, любых электронных программируемых устройств), которые были поставлены:

  • Дружественность интерфейса: работа в современных системах, развитая система подсказок и сообщений об ошибках, "предусмотрительность" системы, позволяющая пользователю избегать нежелательных последствий и т.п.
  • Универсальность: работа с любыми типами устройств должна вестись одними и теми же средствами, чтобы максимально абстрагироваться от конкретной архитектуры устройства и оперировать в работе не "низкоуровневыми" битами конфигурации (к примеру), а осмысленными понятиями вроде "полная защита - защита только от считывания программы" и т.п.
  • Открытость: возможность использовать единственную рабочую среду для любых известных поддерживаемых и появляющихся новых устройств. Расширение спектра поддерживаемых аппаратных средств программаторов и программируемых с их помощью устройств должно осуществляться без замены (обновления) основной программы-оболочки при помощи отдельных (разрабатываемых всеми желающими) модулей-плагинов. Интерфейс для создания плагинов предоставляется всем желающим.
  • Простота и функциональность: вся система должна быть ориентирована на использование по возможности простых схем аппаратных программаторов, дабы их мог собрать любой желающий. Однако, это не исключает поддержку и "сложных" программаторов!
  • Преемственность: система должна быть готова к работе с уже известным набором схем адаптеров для программаторов PonyProg и других.

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

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

Поясню на примерах.

  • Обычная ПЗУ-шка, например РФ5. Содержит единственный блок данных (собственно, сама ПЗУ), размером в 2К и обладающим свойствами "чтение" и "однократная запись" (стирание в обычном программаторе невозможно, поэтому это свойство не принимаем во внимание).
  • Flash-память, например 24С16. Содержит так же единственный блок данных, однако дополнительно обладает свойством "стирание".
  • Микроконтроллер AVR, например AT90S2313. Содержит уже 3 блока: память программ (свойства "чтение", "запись", "стирание"), память данных (свойства те же) и конфигурационные биты (биты защиты, обладают свойством "запись").
  • Мобильник. Может содержать большое количество блоков, например "Прошивка языка", "Фотки", "Мелодии", "Игры" и т.п. Файловую систему можно при желании так же представить в виде набора блоков-файлов и папок.

Надеюсь, подход ясен. Теперь, используя абстрактные "блоки" с их свойствами, любые операции по программированию любых устройств можно свести всего к четырем (!!!): чтение блока, запись блока, стирание блока, стирание всего устройства. Более того, раз блоки абстрагированы от конкретной аппаратной архитектуры устройства, то в некоторых случаях можно использовать не традиционное двоичное (шестнадцатиричное - не суть!) предстваление данных блока, а существенно более вразумительное смысловое представление. Простой пример: при любом раскладе, установка той или иной комбинации конфигурационных битов всегда может быть описана "человеческим" языком, т.е. вместо традиционного "установить биты RSE, BODEN и LB1" (взято с потолка), используем фразу "режим сброса при понижении питающего напряжения". При этом пользователю вовсе не нужно знать, как именно эти (или те) биты "устанавливаются" (программированием "0" или "1" - вспомните Fuse-биты в PonyProg!). Если пользователь понял, что за функцию он использует, этого и достаточно - конкретную "установку" делает программа!

Естественно, традиционный "низкоуровневый" подход так же может быть сохранен.

Собственно, о принципе все.

Конкретно первая версия программатора ChipBoom уже создана (см. проект ChipBoom) и реализует вышеизложенный подход к работе с блоками.

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

Сведения о том, какие именно блоки и с какими свойствами есть у того или иного устройства, ChipBoom получает из плагина программатора. Смысловое предстваление данных того или иного блока так же определяется плагином программатора. Этот плагин отвечает так же за реализацию протокола программирования каждого из блоков и за интерфейс с аппаратной частью. Плагины могут поддерживать одно или несколько устройств, а так же один или несколько вариантов схем аппаратных программаторов. Оболочка ChipBoom содержит необходимые средства для выбора и конфигурирования плагинов.

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

 

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

Помимо базовых функций "чтение-запись-стирание" оболочка ChipBoom содержит некоторый набор сервисных функций (например, заполнения блока одинаковой последовательностью данных). Дальнейшее расширение функциональности так же реализовано при помощи плагинов дополнительных функций.

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

Эпилог

Проект ChipBoom - открытый проект. Особая надежда на поддержку широких масс: в одиночку автор не в состоянии быстро разработать адаптеры и соответствующие плагины для всего того многообразия программируемых устройств, что активно используется любителями и профессионалами! Вы можете посодействовать развитию проекта! Если у вас есть собственные наработки схем программаторов и ПО для их работы, то (на определенных взаимоприемлемых условиях) возможна интеграция(адаптация) их в(для) ChipBoom. При этом соответствующий плагин вы сможете сделать самостоятельно (если у вас имеется опыт в разработке DLL).

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


Добавить в любимые (0) | Просмотров: 34739

  Коментарии (2)
 1 Написал(а) Максим Зиновьев, в 21:21 17.01.2008
[B]ARV[/B], добрый день! :)  
 
Ну что сказать, кроме "Спасибо!"? Спасибо! 
 
Нарядненько. 
 
Далее - критика. 
 
1. Имхо, совершенно нет смысла крутиться вокруг "пятипроводковых технологий, совместимых "с уже имеющейся бухтой провода". Радости от отсутствия поддержки усб-ком - никакой. :(  
При всём, при том, что пони, хоть медленно, но читает/шьёт через CP2102, CP2103.  
Возможно, Вы специально запретили обнаружение железа через переходники? Там,проверял на CP2103, шмыгает на DSR+RTS loop, но адаптер SPI не обнаружен. 
 
2. Писать "плагины" на новые микросхемы лучше всего в блокноте(notepad), если Вы хотите развития или со временем продавать ПО. Там должны быть описаны алгоритм, цоколевка (при наличии кроватки) и тайминги, если тайминги нужны. (это по типу leaper48)  
Это позволяет расширяться даже некоммерческому проекту за счет написания пользователями своих "*.ini" на конкретную мс. 
.... 
_____ 
А так - нарядненько! :)
 2 Написал(а) Сергей, в 00:54 27.02.2009
Уважаемый [B]Максим Зиновьев[/B]! 
Если писать "плагины" в блокноте с выше перечисленной Вами информацией, то эти "плагины" будут иметь большой размер, да и сам алгоритм чтения этого "плагина" будет сложнее. DLL-ки лутше тем, что выполняются быстрее, имеют меньший размер и... "защищают" проэкт от абсолютно ненужных или очень плохих плагинов, которые сделают плохую репутацию ChipBoom-у... 
И вообще, раз автор решил делать "плагины" в DLL, значит он имеет на это основания!

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

 
« Пред.
Полезные материалы по сходным темам
BannerFans.com