В своей первой статье я описал простая схема программатора , сегодня я вам расскажу, как его подключить к программируемому устройству.
Рис.
1. Внешний вид программатора.
В старые добрые времена, когда микроконтроллеры с флеш-памятью программ на базе FLASH только начинали появляться, их программирование осуществлялось через параллельный интерфейс.
При этом для программирования могло использоваться более 20 контактов и зачастую требовалось использование повышенного напряжения — 12 вольт и более.
Микроконтроллеры тогда выпускались в выходных DIP-корпусах.
Программировали их в основном, вставив в качественные гнезда программатора, и только потом впаяв в устройство.
Однако со временем начался переход к программированию по последовательному каналу, и для программирования стали использоваться только 4-5 сигнальных выводов.
Кроме того, микросхемы стали выпускаться в совершенно экзотических корпусах.
Надежные розетки для таких случаев иногда могли стоить едва ли не дороже самого программатора! Есть возможность и необходимость перепрограммировать микроконтроллеры, не вынимая их из схемы - внутрисхемное программирование.
Это очень удобно для отладки программы.
Кроме того, появилась возможность установки всей платы, а также выполнения программирования во время настройки и выпуска устройства.
Это особенно удобно при работе с контрактными производителями — есть гарантия, что программный код не утечет. Сегодня большинство микроконтроллеров используют внутрисхемное программирование.
Для иллюстрации рассмотрим микроконтроллеры семейства LPC2xxx. Эти микроконтроллеры имеют встроенный загрузчик, позволяющий прошивать FLASH-память с помощью внутрисхемного программирования.
Для передачи данных используется последовательный порт 0 — контакты RXD0 и TXD0. Алгоритм входа в режим программирования очень прост; для этого используются только две дополнительные ножки сигнала — P0.14 и Reset. Порт P0.14 установлен на низкий логический уровень, другими словами, он закорочен на землю, при этом на выводе Reset должен присутствовать высокий логический уровень.
Однако стоит отметить, что исключения возможны, если ранее была запущена пользовательская программа, в которой задействован, например, сторожевой таймер.
Поэтому наиболее надежный алгоритм входа микроконтроллера в режим программирования следующий.
Перед включением питания закоротите контакты P0.14 и Reset на землю.
Подайте питание и подождите, пока оно достигнет номинального значения.
Установите для сброса высокий логический уровень, подождите не менее нескольких миллисекунд и подайте высокий уровень на P0.14. Чтобы успешно использовать эту возможность, необходимо следовать нескольким простым правилам, которые проще продемонстрировать на примере схемы подключения программатора к устройству на базе микроконтроллера серии LPC 214x. Для программирования будем использовать программатор, описанный в предыдущей статье.
Рис.
2. Схема подключения программатора.
Начнем с обзора схемы.
Порт Р0.14 подключается к питанию с помощью резистора R4, чтобы при включении устройства в обычном режиме на нем появлялся высокий уровень и соответственно запускалась пользовательская программа.
В схеме LPC_RESET имеется подтягивающий регистр для питания и конденсатор для земли.
Для нормальной работы их номиналы необходимо выбирать в зависимости от используемого источника питания.
Дело в том, что при подключении устройства к источнику питания напряжение на нем достигает номинального значения не мгновенно, а постепенно, по мере зарядки емкостей фильтров.
Для нормальной работы устройства необходимо, чтобы микроконтроллер запускался только при достижении определенного уровня мощности; в современных микроконтроллерах для этого есть специальные схемы, но полагайтесь на них и не допускайте ошибок - как показывает практика, при медленном увеличении напряжения питания эти схемы могут работать некорректно.
В момент подачи напряжения питания конденсатор С2 начинает заряжаться и напряжение на нем некоторое время удерживается на низком уровне.
Номиналы цепи R5, C2 желательно подобрать таким образом, чтобы высокий уровень на входе RESET появлялся не ранее, чем напряжение питания микроконтроллера достигнет 2,6 Вольт. Процесс программирования происходит, когда на входе RESET низкий уровень, и все порты ввода/вывода микроконтроллера переводятся в высокоомное состояние.
Если порты вашего микроконтроллера используются для управления какими-либо компонентами, например, силовыми ключами или управляемыми стабилизаторами напряжения, необходимо при программировании следить за тем, чтобы они были подтянуты до необходимого логического уровня, иначе могут возникнуть большие неприятности, вплоть до выхода из строя сама плата и устройства, которыми она управляет. В нашем примере нулевой COM-порт используется не только для программирования, но и для обмена данными по интерфейсу RS485. Для этого используется узел на микросхеме D2. Обычно микросхема D2 постоянно включена в режиме приема и формирует сигнал на входе RXD микроконтроллера.
В режиме программирования этот сигнал будет мешать работе программатора; Чтобы этого не произошло, в схеме предусмотрены сопротивления R1 и R3. R1 переводит приемник D2 в неактивное состояние - выход R0 переходит в высокоомное состояние и не мешает передаче данных программатору, а R3 выключает передатчик, чтобы через драйвер интерфейса RS-485 не поступали неверные данные.
Если вы собираетесь использовать для программирования достаточно длинные провода или существует вероятность того, что устройство смогут перепрограммировать пользователи, не обладающие достаточной квалификацией, вам следует побеспокоиться о защите программируемого микроконтроллера от статики и скачков напряжения.
Например, у меня был случай, когда микроконтроллер в устройстве пришлось менять 4 раза из-за кривых «программаторов»! Простейшая защита может состоять из диодов или стабилитронов, ограничивающих напряжение, и последовательно включенных резисторов с малым сопротивлением.
Например, как показано на рисунке 3.
Рис.
3. Схема подключения программатора со схемами защиты.
Остается добавить, что для программирования микроконтроллеров семейства LPC2xxx на базе ядра ARM7TDMI вывод 3 программатора подключается к порту P0.14. Для программирования микроконтроллеров семейства LPCxxx на базе ядра ARM7 Cortex вывод 3 программатора подключается к порту P2.10. Тема программирования микроконтроллеров и других устройств, несмотря на кажущуюся простоту, весьма многогранна и полна нюансов.
Однако для нашего случая Осталось поговорить о программном обеспечении и особенностях программирования серии LPC900. P.S. Эта статья предназначена в основном для начинающих встраивателей, поэтому прошу прощения за возможно слишком подробное объяснение некоторых вещей, очевидных для профессионалов.
Теги: #Электроника для начинающих #программирование микроконтроллеров* #Программирование микроконтроллеров #схемотехника
-
Профессиональный Монтаж Видео Прямо Дома
19 Oct, 24 -
Ферроцен
19 Oct, 24 -
Перевод Документации Webloginpe
19 Oct, 24 -
Забанен На Яндексе
19 Oct, 24 -
Openmoko В Qemu
19 Oct, 24 -
Php: Array_Search — Быстрый Поиск По Массиву
19 Oct, 24 -
Рейтинг Бренда 2006 Г.
19 Oct, 24