Программирование микроконтроллеров PIC. Часть 6.

Как перевести контроллер в режим программирования и залить в него прошивку.

Часть 1. Необходимые инструменты и программы. Основы MPLAB

Часть 2. Что такое микроконтроллер и как с ним работать

Часть 3. Структура программы на ассемблере

Часть 4. Разработка рабочей части программы. Алгоритмы

Часть 5. Ассемблер. Организация циклов и ветвлений

Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку

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

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

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

Как вообще происходит прошивка всяких разных контроллеров? Сначала контроллер специальным образом переводится в режим программирования (то есть контроллеру сообщают, что его собираются программировать). Способы перевода есть различные: специальная последовательность сигналов на определённых ногах, специальные уровни напряжения (например, подача напряжения 12В на определённую ногу, вместо обычных 5 вольт) или и то и другое вместе. Обычно после перехода в режим программирования все неиспользуемые в процессе программирования ноги автоматически переводятся контроллером в высокоомное состояние. Далее в контроллер по последовательному или параллельному интерфейсу передаются команды (запись/чтение/стирание...) и, при необходимости, данные (если мы записываем прошивку, то мы передаём данные, если считываем - контроллер передаёт нам данные...). Подробнее о процессе программирования можно почитать в спецификациях по программированию, выпускаемых производителями контроллеров. Например, спецификации по программированию PIC-контроллеров можно скачать с сайта microchip.com (в разделе design support -> programming specifications). Спецификаций там очень много, поэтому мы вкратце обобщим размещённые в них сведения.

Итак, в микроконтроллерах PIC, фирмы Microchip, обычно реализовано программирование по последовательному интерфейсу. При этом две ноги контроллера используются для организации самого интерфейса (сигналы clock - тактирование и data - данные) и ещё одна или несколько ног используются для перевода контроллера в режим программирования и удержания его в этом режиме (Vpp, PGM...).

Различают два основных метода программирования: высоковольтное (HVP - high voltage programming) и низковольтное (LVP - low voltage programming). В первом методе для перевода контроллера в режим программирования дополнительно используется более высокое напряжение (Vpp - напряжение программирования) по сравнению с рабочим (Vdd). Во втором методе никаких дополнительных напряжений использовать не нужно. В контроллерах, в зависимости от модели, могут быть реализованы оба метода сразу, а может быть реализован только какой-то один из методов.

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

Далее я попробую описать наиболее распространённые алгоритмы перевода контроллеров PIC в режим программирования из обоих методов.

1. High Voltage Programming, "Vpp-first". Суть метода: сначала на специальную ногу подаётся напряжение программирования (Vpp), потом, не раньше, чем через определённый промежуток времени (T1), подаётся питание (Vdd). Через определённый промежуток после этого (T2) контроллер перейдёт в режим программирования и можно будет начинать обмен данными (используя линии clock и data). На начальном этапе, всё то время, пока контроллер переводится в режим программирования, на интерфейсных ногах должен быть нулевой уровень. Ниже представлена диаграмма сигналов, соответствующая этому алгоритму:

диаграмма сигналов для перевода pic-контроллера в режим программирования по методу HVP, алгоритм Vpp-first

2. High Voltage Programming, "Vdd-first". Суть метода: сначала подаётся рабочее напряжение (Vdd), потом, не раньше, чем через определённый промежуток времени (T1), на специальную ногу подаётся напряжение программирования (Vpp). Через определённый промежуток после этого (T2) контроллер перейдёт в режим программирования и можно будет начинать обмен данными (используя линии clock и data). Так же, как и в предыдущем алгоритме, на начальном этапе (всё то время, пока контроллер переводится в режим программирования) на интерфейсных ногах должен быть нулевой уровень. Ниже представлена соответствующая диаграмма сигналов:

диаграмма сигналов для перевода pic-контроллера в режим программирования по методу HVP, алгоритм Vdd-first

3. Low Voltage Programming, "Special Sequence". Суть метода: через определённый промежуток времени (T1) после подачи рабочего напряжения (Vdd), контроллеру посылается специальный 32-х битный ключ, после чего контроллер переходит в режим программирования. При этом нога MCLR/Vpp должна быть притянута к общему проводу. Второй вариант этого же алгоритма (если рабочее напряжение уже приложено к контроллеру) заключается в следующем: нога MCLR/Vpp притягивается к общему проводу, через определённое время (T2) после этого контроллеру посылается специальный 32-х битный ключ, после чего контроллер переходит в режим программирования. Ниже представлены соответствующие диаграммы сигналов:

диаграмма сигналов для перевода pic-контроллера в режим программирования по методу LVP, алгоритм Special Sequence

4. Low Voltage Programming, "Special Pin". Суть метода: при установке в слове конфигурации специального бита (LVP) один из выводов (PGM) контроллера начинает использоваться для перевода контроллера в режим программирования (соответственно, использовать этот пин в качестве цифрового входа/выхода уже нельзя). Так вот, в этом случае перевод контроллера в режим программирования осуществляется подачей высокого уровня (Vdd) на ногу PGM и через некоторое время после (T1) этого подачей высокого уровня (Vdd) на ногу (MCLR/Vpp). Ниже представлены соответствующие диаграммы сигналов:

диаграмма сигналов для перевода pic-контроллера в режим программирования по методу LVP, алгоритм Special Pin

При внимательном рассмотрении видно, что некоторые алгоритмы (2,3,4) позволяют перейти в режим программирования не снимая с контроллера рабочее напряжение питания. При специальной разводке платы эти алгоритмы позволяют программировать контроллер, что называется, "на лету". Способ, при котором контроллер программируется прямо в готовом изделии называется ICSP - in circuit serial programming (по-русски обычно говорят просто - внутрисхемное программирование).

На этом, пожалуй, и всё. Вот здесь можно найти таблицу контроллеров PIC фирмы Microchip, в которой указано, какие алгоритмы перевода в режим программирования поддерживают конкретные модели контроллеров, а также допустимые диапазоны значений Vpp (для контроллеров, поддерживающих HVP).

Часть 1. Необходимые инструменты и программы. Основы MPLAB

Часть 2. Что такое микроконтроллер и как с ним работать

Часть 3. Структура программы на ассемблере

Часть 4. Разработка рабочей части программы. Алгоритмы

Часть 5. Ассемблер. Организация циклов и ветвлений

Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку

radiohlam.ruтеорияконтроллеры и програмирование

Понравилась статья? Поделись с друзьями!

Обсудить эту статью на форуме

 
Rambler's Top100 © 2009 - Материалы сайта охраняются законом об авторском праве