Подсистема программирования в микроконтроллере

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

Для программирования нужен программатор. Здесь первым делом надо договориться о терминологии [2-1]. При массовом производстве обычно используют промышленные программаторы (Рис. 2.3), имеющие самостоятельные органы управления, контроля, индикации.

Для мелкосерийного и единичного производства (читай «домашних условий») рациональнее использовать компьютерные программаторы. В их основе лежит простая формула: «Программатор = Олектриче-ский адаптер> + <Компьютер> + <Программа^. Адаптер легко изготовить самостоятельно. Компьютер является частью рабочего места радиолюбителя, а управляющая программа доступна в Интернете и, как правило,бесплатна.

Различают автономные (Рис. 2.4) и внутрисхемные (Рис. 2.5) компьютерные программаторы. Первые из них работают в независимом режиме. Микросхема МК вручную устанавливается в панельку, программируется, затем извлекается из панельки и переносится в готовое изделие. Вторые из них используют специальный технологический разъём, расположенный на плате изделия. Через него, не выпаивая МК, можно в любой момент «перепрошить» флэш-ПЗУ.

Очень часто в Интернете (да и в технической литературе) «программатором» почему-то называют именно электрический адаптер, хотя это и не совсем верно.

Внутрисхемное программирование намного удобнее автономного, однако практика показывает, что лучше держать «на запасном пути» оба программатора одновременно. Это пригодится, например, для оперативной проверки работоспособности МК, для предварительного ввода в него программы-загрузчика, для смены режимов работы через конфигурационные биты.

Подсистема программирования

Подсистема программирования

Подсистема программирования

Новые термины «программа-загрузчик» и «конфигурационные биты» будут рассматриваться дальше, но для начала надо чётко представлять их физическое местоположение в памяти. Судя по стрелкам, изображенным на Рис. 2.6, три области памяти из четырёх доступны для внешнего программирования. Информация в них сохраняется при выключении источника питания.

Четвёртая область, ОЗУ или, по-английски, RAM, служит для временного хранения данных. В ОЗУ находятся регистры специальных функций SFR (Special Function Register), отвечающие за текущий режим работы МК. Их подробное описание приводится в даташитах, причём единого стандарта не существует (а жаль!). Каждый регистр из области SFR имеет своё уникальное имя, например, MCUCR, RAMPZ и т.д.

Для изменения состояния регистра достаточно записать в него шестнадцатеричное число.

Таблица 2.1. Разновидности типов памяти у разных МК

Тип памяти МК Расшифровка Выполняемые функции
Mask ROM Masked Read Only Memory Масочное ПЗУ, программируемое при изготовлении кристалла микросхемы
OTPROM One-Time Programmable ROM ПЗУ, однократно программируемое пользователем (самостоятельно)
QTPROM Quick-Turn Programmable ROM ПЗУ, однократно программируемое на заводе-изготовителе по кодам пользователя
SQTPROM Serialized QTPROM То же, что QTPROM, но каждому МК присваивается уникальный серийный номер
UVEPROM Ultra Violet Erasable Programmable ROM ПЗУ, стираемое ультрафиолетовым облучением кристалла через прозрачное окно в корпусе
EEPROM Electrical EPROM Электрически стираемое ПЗУ с произвольным доступом к ячейкам (ЭСПЗУ)
Flash Флэш-ПЗУ (в переводе с англ. «вспышка») Электрически стираемое ПЗУ с блочным доступом к ячейкам
RAM Random Access Memory Статическое ОЗУ (реже динамическое ОЗУ) с произвольным доступом к ячейкам
SFR Special Function Register Отдельная область ОЗУ, где хранятся настройки текущего режима работы МК
ROM-less «Без ПЗУ» ПЗУ в МК отсутствует, управляющая программа вводится с внешнего носителя
Fuse, Option Bits, Configuration Bits Конфигурационные биты Несколько байтов памяти, определяющие глобальные режимы работы МК
BootLoader Программа-загрузчик (Bootstrap Loader) Записанная в флэш-ПЗУ небольшая программа, через которую многократно переписывается основная программа МК

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

Разновидности технологий программирования

В разных микроконтроллерных платформах при программировании применяются свои фирменные средства, технологии и даже названия, а именно:

  • ISP (In-System Programming), ICSP (In-Circuit Serial Programming), ISSP (In-System Serial Programming) — низковольтное последовательное программирование (Рис. 2.7, а);
  • JTAG (Joint Test Action Group) — низковольтное шлейфное программирование по стандарту IEEE Std 1149.1 с возможностью отладки (Рис. 2.7, б);
  • debugWire — низковольтное бднопроводное программирование с возможностью отладки (Рис. 2.7, в);
  • BootLoader — низковольтное программирование, при котором в ПЗУ МК сначала заносятся коды загрузчика на другом программаторе (Рис. 2.7, г, д);
  • HVSP (High Voltage Serial Programming) — высоковольтное последовательное программирование (Рис. 2.7, е);
  • HVPP (High Voltage Parallel Programming) — высоковольтное параллельное программирование (Рис. 2.7, ж).

Подсистема программирования

 

Разделение на низкие и высокие «вольты» произошло исторически. Первые МК программировались повышенным напряжением +8...14/+24...27 В и требовали извлечения микросхемы из панельки на плате устройства. По мере совершенствования технологии инженеры-конструкторы научились встраивать повышающие DC/DC-преобразователи напряжения прямо на подложку кристалла микросхемы. Программирование стало низковольтным от +5 В и внутрисхемным, поскольку теперь не требовалось извлекать МК из панельки.

Разделение на «параллельное» и «последовательное» программирование тоже имеет исторические корни. На заре микроконтроллерной эры потребители старались удешевить производство, заказывая на заводе-изготовителе крупные партии МК с определённой версией программы. Промышленное тиражирова ние в заводских условиях должно быть быстрым, а высокую скорость передачи данных обеспечивает именно многопроводной параллельный режим.

С широким внедрением низковольтных адаптеров оказалось, что выгоднее производить программирование небольших партий МК у себя на фирме. Несколько лишних секунд задержки «погоды не делают», зато экономия и удобство налицо. Однако прощаться с параллельным режимом ещё рано, т.к. через него в некоторых МК, например, Atmel ATmega, «прошиваются» важные конфигурационные биты. Говорят, для совместимости поколений «снизу-вверх».

Следующей заметной вехой стало объединение процесса программирования с отладкой программы. Технологии JTAG, debugWire дают программисту полный контроль над аппаратной начинкой МК, позволяют останавливать работу программы в нужных точках, проверять состояние портов и регистров в режиме реального времени. Это инструмент для профессионалов. Как правило, такие отладчики имеют вид заводских фирменных модулей со своим программным обеспечением. Любительские разработки тоже существуют, но они требуют высокой квалификации исполнителя.

Ещё одно интересное направление — это удалённое программирование через программу-загрузчик (BootLoader). Предварительно в МК «прошивается» короткая загрузочная программа, которая при определённых условиях может перепрограммировать своё собственное флэш-ПЗУ и ячейки EEPROM. Похоже на простейшую интеллектуальную систему с элементами самообучения. Такой себе «внутримикросхемный робот». Коды новой прошивки передаются в МК из компьютера по одному из доступных каналов связи: USB,COM, 12С, 1гОАит.д. Если компьютер программатора будет подключён к Интернету, то сменить прошивку можно с другого удалённого компьютера, находясь в любой точке Земного шара.

Самые дальновидные программисты вводят в загрузчик криптозащиту, чтобы байты, передаваемые по свободному каналу связи, не могли быть расшифрованы посторонним человеком. В некоторых МК программа-загрузчик является изначально встроенной в память. Её коды технологически вводятся в матрицу прямо на заводе-изготовителе. Примеры — Philips LPC2104 («Оп-Chip BootLoader Software») и Texas Instruments MSP430F (начальный аппаратный загрузчик BSL).

Область памяти загрузчика защищается от просмотра и изменения специальными конфигурационными битами. Для первого знакомства достаточно знать, что конфигурационные биты (они же «fuse», «Fuse Bits», «Fuses», «Option Bits», «фьюзы») — это некоторые ячейки памяти МК, которые можно многократно прошивать в «1» или «О» с помощью программатора.

Название «fuse» ввела в оборот фирма Atmel, чьи МК очень популярны. Однако этот термин несколько.двусмысленен, т.к. обычно он обозначает пережигаемую перемычку, используемую в однократно программируемых ПЗУ Такую перемычку восстановить невозможно — в отличие от содержимого конфигурационных битов, которое может быть обнулено в процессе полного стирания памяти МК. Однако из основной программы этого сделать нельзя, что, по-видимому, и привело к выбору терминологии. Стоит отметить, что в русскоязычном Интернете часто используют транскрипцию английского термина — «фьюз».

Расшифровка назначений конфигурационных битов приводится в даташи-тах. Конфигурационными битами можно также считать и биты защиты LockBits.

Подсистема программирования

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

Микросхем, которые поддерживают все известные способы «последовательно-параллельного» программирования, не существует. Обычно доступны один, два или три разных способа. Самое важное, что все современные МК могут программироваться внутрисхемно. Это позволяет использовать простые и надёжные программаторы, работающие в протоколе SPI (Serial Programming Interface). В нём за-действуются линии портов с запоминающимися названиями MISO, MOSI, SCK.

С электрической точки зрения выводы, участвующие в программировании, являются обычными входами/выходами КМОП-элементов. Придумывать самому схемы адаптеров программаторов не надо, их легче найти в Интернете.

Реальные схемы компьютерных программаторов

Первое практическое задание, которое должен выполнить любой человек, желающий освоить МК, заключается в изготовлении (приобретении) программатора. Ориентироваться надо на низковольтные варианты с последовательным интерфейсом связи. В Табл. 2.2 приведены адреса сайтов, содержащих схемные решения для 8-битных AYR- и Р1С-контроллеров [2-2].

Подсистема программирования

Среди программаторов выделяются следующие группы:

  • USB — самые быстрые и перспективные, но относительно сложные;
  • LPT — самые простые в изготовлении, но не всегда стабильно работающие;
  • СОМ — самые массовые в любительской среде (на сегодняшний день), но с низкой скоростью программирования.

В Табл. 2.3 даны ссылки на бесплатные универсальные оболочки, используемые в программаторах с интерфейсами USB, LPT, СОМ. Без них «железная» часть устройства функционировать не будет. Кроме универсальных, существуют и узкоспециализированные оболочки, рассчитанные только на одну платформу МК, например, «AVRDUDE» (Atmel AVR), «PICkit-2» (Microchip PIC) и т.д.

Источник:  Рюмик С.М. 1000 и одна микроконтроллерная схема. (Выпуск 1)

0 1628 Микроконтроллеры
микроконтроллер программирование прошивка
кэшбек