Способы записи программы в микроконтроллер

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

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

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

Различают автономные (Рис. 2.4) и внутрисхемные (Рис. 2.5) компьютерные программаторы. Первые из них работают в независимом режиме.

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

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

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

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

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

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

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

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

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

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

Порты ввода-вывода | Первая программа | Микроконтроллеры с нуля #4

Таблица 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)

Источник: radiostorage.net

Как записывается информация в микроконтроллер

начало

В этой статье мы расскажем про способы записи данных в постоянную память или по-другому говорят ПЗУ- Постоянное запоминающее устройство или еще по-другому энергонезависимая память.

Когда кванторианцы заливают программу в Arduino через USB кабель они не задумываются как информация записывается в микроконтроллере, а зря. Хорошему специалисту по РЕЭ (радиоэлектронной аппаратуре) или Embedded программисту (программисту встраиваемых систем) необходима эта информация.

ROM (Read Only Memory), Mask–ROM или масочно-программируемое ПЗУ

Память вместе с программой изготавли¬ваются на этапе производства микроконтроллеров. Перезаписать информацию невозможно. Первые масочные ПЗУ появились в начале 1960–х годов и находят применение до настоящего времени благодаря таким достоинствам как:

• низкая стоимость при массовом производстве изделий;

• высокая надежность хранения программ.

Недостатки масочных ПЗУ — любое изменение прикладной программы связано со значительными затратами средств и времени на их внедрение в производство.

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

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

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

EEPROM (Electrically Erasable Programmable Memory – электрически стираемая программируемая память) можно считать новым поколением EPROM памяти. В такой памяти ячейка стирается не ультрафиолетовым светом, электрическими сигналами с помощью транзисторов.

• память EEPROM более дорогая, чем EPROM (в два раза дороже EPROM с однократным программированием);

• EEPROM работает немного медленнее, чем EPROM;

• ПЗУ типа EEPROM имеют ограниченную емкость, размер увеличивается, а плотность записи низка;

• появились ПЗУ типа FLASH, которые имеют близкие пользовательские характеристики, но более низкую стоимость и высокую плотность записи.

Дальнейшее развитие EEPROM – flash-память. Транзисторы в таком случае подключаются группами. Память FLASH (как и EEPROM) сохранила возмож¬ность многократного стирания и программирования. Из схемы памяти изъят тран¬зистор адресации каждой ячейки, что, с одной стороны, лишило возможности программировать каждый бит памяти отдельно, с другой стороны, позволило уве¬личить объем памяти.

Таким образом, функционально FLASH –память мало отличается от EEPROM. Основное отличие состоит в способе стирания записанной информации: если в EEPROM памяти стирание производится отдельно для каждой ячейки, то во FLASH памяти — целыми блоками.

Кстати, микроконтроллеры ATmega используемые в Arduino, оснащены сразу двумя видами памяти EEPROM и flash.

Всем удачи в изучении микропроцессорной техники!

Воронов Евгений Валерьевич — педагог ИТ-квантума

Источник: kvantorium.su

Шпаргалка начинающего программиста AVR МК

Отладочная плата для микроконтроллера

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

Читайте также:
After effects программа характеристики

Напоминаю, что в качестве примера у нас выбран популярный AVR микроконтроллер Atmega8, а в качестве основного языка программирования – Си.
Однако приступим к делу:

И начнём мы с программирования портов ввода-вывода микроконтроллера.

1. Регистр выбора направления передачи данных DDR

Выводы (порты) микроконтроллера могут работать как входы и как выходы. Поэтому предварительно нужно настроить вывод МК на соответствующий режим посредством специального регистра, который называется DDR.
У каждого порта есть свой DDR регистр. Например, у Atmega8 три порта: B, C и D, а соответствующие им регистры называются: DDRB, DDRC и DDRD.
В том случае, если нам необходимо сконфигурировать вывод МК как вход, то в соответствующий разряд DDR регистра записывается ноль, если – как выход, то единица.
Одним из распространённых способов настройки DDR регистров является запись в виде двоичного кода с количеством разрядов, совпадающим с разрядностью порта. К примеру, чтобы настроить вывод PC0 как выход, мы должны написать следующую команду:

Здесь префикс 0b идентифицирует следующее за ним число как двоичное, а порядковый номер бита отвечает номеру бита внутри порта. То есть последний (крайний правый) разряд этого числа соответствует PC0, предпоследний – PC1 и т. д. Как итог: PC0 настроен как выход, все остальные разряды (PC1. PC6) – как высокоимпедансные входы.
Поскольку порт С в Atmega8 содержит не 8 разрядов, а 7, то и количество битов в двоичном коде равно 7.

Ещё один пример с 8-разрядным портом D:

Здесь третий и седьмой биты порта D сконфигурированы как выход, а остальные биты – как вход.

Если подставить двоичное число (то, что находится после 0b) в калькулятор и конвертировать его в шестнадцатеричный код, то можно полученное число также использовать в настройке бита, только при этом – 0b заменить на 0x.
Перепишем наши примеры с шестнадцатеричными числами:

DDRC = 0x01;
DDRD = 0x88;

Часто функциональное назначение отдельно взятого вывода удобнее задавать побитовой настройкой. Для того, чтобы нам настроить PC0 как выход, в этом случае следует записать следующую команду:

Эта запись означает, что для нулевого разряда порта С (номер разряда указывает последняя цифра), т. е. для вывода PC0 мы прописали в DDR единицу и тем самым настроили его как выход.
А вот, если бы нам туда понадобилось прописать ноль, т. е. настроить PC0 как вход, то команда выглядела бы так:

Запишем в побитовой форме и второй пример – настроим третий и седьмой биты порта D как выходы:

Эти две команды можно заменить одной:

2. Регистр выходных данных порта PORT

Служит для управления состоянием вывода.
Если вывод (контакт) сконфигурирован как выход, то единица в соответствующем бите регистра PORTx формирует на выводе сигнал высокого уровня, а ноль – формирует сигнал низкого уровня.
Если вывод (контакт) сконфигурирован как вход, то единица в бите регистра PORTx подключает к выводу внутренний подтягивающий pull-up резистор, который обеспечивает высокий уровень на входе при отсутствии внешнего сигнала.
Воспользуемся предыдущими примером, в котором мы установили вывод PC0 как выход, т. е. использовали команду:

Тогда, чтобы установить на этом выходе высокий логический уровень, нам надо прописать:

PORTС = 0b0000001; – в двоичном коде, либо
PORTС = 0x01; – в 16-ричном, либо
PORTC |= (1 А для того, чтобы установить низкий уровень –

PORTС = 0b0000000; – в двоичном коде, либо
PORTС = 0x00; – в 16-ричном, либо
PORTC – в двоичном коде, либо
PORTС = 0x05; – в 16-ричном, либо
PORTC |= (1 то это будет означать, что на выходе PC0 присутствует высокий логический уровень, а ко входу PC2 подключён внутренний подтягивающий к питанию резистор.
Все остальные разряды порта С настроены как обычные высокоимпедансные входы.

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

3. Регистр считывания состояния вывода PIN

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru