Если Вы давно мечтали сделать отладочную плату на базе микроконтроллера PIC18 своими руками, но не знали как, то в этом деле поможет данная статья.
Рассматриваемый принцип является одним из вариантов реализации (причем устаревший), на рынке существует масса готовых отладочных плат для множества решений. Поэтому принципы изложенные в данной статье, я отношу к категории "сделай сам", чтобы накопить опыт и знания базисов.
Итак, всем кто остался в статье:
Для указанных целей потребуется реализовать несколько основных моментов:
1. Распайку микроконтроллера на плате;
1.а. Прошить программу bootloader'a, при помощи программатора;
2. Собрать модуль USB-UART для связи с ПК;
2.а. Установить драйвер на ПК;
2.б. Установить ПО на ПК для связи с микроконтроллером;
3. Написать целевую программу и записать ее в контроллер;
По п.1. создание печатной платы - здесь относительно всё просто, делаем разводку на плате для всех ног микроконтроллера, не забыв, для удобства вывести ноги ICSP разъема в отдельную группу, примерно так, как это выглядит на картинке. На плате желательно указать номера ног и имена портов.
Отладочную плату я выполнил с маской используя метод фоторезиста, хотя это не является обязательным. Принципиальная схема включения контроллера примитивна и должна соответствовать схеме включения по дататшиту. В моем случае, используется контроллер PIC18F46K22, так как он имеет два порта UART, что добавляет универсальности схеме.
Впаиваем контроллер, кварцевый резонатор можно и не впаивать, если предполагается использовать только интегрированный. Также, желателен резистор 10К подвесить к MCLR и организовать подключение ICSP-разъема следующим образом:
Организованная группа пинов ICSP разъема позволит использовать программатор подобным образом, чтобы не использовать провода при прошивке контроллера.
П.
1.а. Прошивка контроллера программой bootloader , которую можно написать самому при желании, но в данном случае я использовал Исходники AN1310 из комплекта выпущенного Microchip - Serial Bootloader AN1310. (можно скачать в интернете),
Однако, этот метод организации Bootloader для PIC18 настолько дремуч, что я даже не смог найти ссылок на официальном сайте
Microchip , так как давно уже не используется и не поддерживается. Но для целей электива по теме отладочных плат - сойдет.
Итак, Вы нашли и скачали исходники
Bootloader
AN1310 (и сам дистрибутив
Serial Bootloader), для работы с ними потребуется MPLAB IDE v8.92.
До того, как вы скомпилируете проект и требуется выполнить несколько ключевых моментов:
- выбрать требуемый UART порт, так как
PIC18F46K22 имеет два USART модуля, а программа Bootloader'а по умолчанию использует первый.
Требуется
открыть код файла bootconfig.inc, идущего в комплекте AN1310 и этом в файле можно выбрать один из двух режимов работы Bootloader'а:
#define UARTNUM 1 , где 1 или 2 будет равняться UART1 или UART2
- выбрать
участок занятой Flash-памяти, в моем примере весь Bootloader размещается в начале файла,
Это позволяет более рационально и экономно распределить ресурсы Flash-памяти между микроконтроллером и Bootloader'ом. Во-вторых, весь код, который необходим для работы Bootloader'а можно аппаратно защитить от записи, ничто не cможет его повредить. Чтобы задействовать REMAPPED Bootloader, необходимо в bootconfig.inc указать
#define BOOTLOADER_ADDRESS 0. (такая строка там есть, возможно ее достаточно раскомментировать)
- биты конфигурации. Обязательное внимание уделяем битам, таким как:
FOSC - ставим в зависимости от того, какой осцилятор используется внешний/внутрений;
PLLCFG - ускоритель частоты х 4 - не включаем.
PWRTEN - пауза для стаблизации питания, включаем.
WDTEN - ватч.дог, выключаем.
PBADEN - особенность для
PIC18F46K22, переводит порты PORTB 5..0 в аналог или цифровой выход
MCLRE - активируем внешний сброс (MCLR Pin Enable bit (MCLR pin enabled, RE3 input pin disabled))
(Читаем даташит!)
Теперь всё готово, прошиваем контроллер используя программатор.
п.2
Собрать переходник USB-UART (или использовать промышленного производства)
С самостоятельной сборке ничего сложного нет, требуется использовать FT232 (есть и другие варианты, например, CP2102) для организации такого подключения. Можно, при желании выполнить сразу в составе отладочной платы, но я вынес в отдельную плату-модуль.
п. 2.а. Установить драйвер на ПК
Главной сложностью, с которой можно здесь столкнуться - драйвер. В целом все просто, микросхема FT232 поддерживается компанией FTDI и поставляет драйвер, только он установится как USB устройство, однако, наш
Serial Bootloader работает только с COM.
Поэтому, в драйвере INF потребуется поменять PID , добавив его в раздел
[FtdiHw]
%VID_0403&PID_6001.DeviceDesc%=FtdiPort.NT,FTDIBUS\COMPORT&VID_0403&PID_6001
и
[FtdiHw.NTamd64]
%VID_0403&PID_6001.DeviceDesc%=FtdiPort.NTamd64,FTDIBUS\COMPORT&VID_0403&PID_6001
После его установки, драйвер относится к разделу COM портов.
п. 2.б. Установить ПО на ПК для связи с микроконтроллером
Берем ПО из архива с Microchip Serial Bootloader AN1310 , в состав которого, входит ПО
AN1310 v1.05r.
В настройках не забываем выбрать соответствующий порт. Программа умеет шить и конфигурационные биты (с чем надо обращаться с осторожностью) и eeprom.
Подключаем переходник UART-USB, к соответствующему порту контроллера и нажимаем кнопку Break/Reset.
Важно!
Тем самым, на выходах RX/TX формируется логические нули, что для прошивки bootloader является триггером определяющим, какую часть кода исполнять, т.е. запуска прошивки пользователя, либо прошивки
bootloader.
С данного момент, после подачи нуля на MCLR (или банального отключения питания), контроллер в момент старта (перезагрузки) определит какую часть кода он запустит.
- Если пользовательское ПО еще на записано в контроллер, то запустится программа bootloader в любом случае.
- Если на
RX/TX сформированы логические нули (нажат
Break/Reset) и контроллер перезапущен,
то запустится программа bootloader.
- В других случаях, при перезагрузке контроллера, будет запущено пользовательское ПО (если оно есть).
Итак,
Break/Reset нажат и контроллер перезагружен!, нажимаем, Bootloader mode. И если видите следующую картину, то bootloader запустился и с ним можно работать.
Например, прочитав можно изучить состав данных в CONFIG, EEPROM и пр.
п.3. Написать целевую программу и записать ее в контроллер;
Наиважнейшим этапом написания программы под bootloader является - offset (или смещение). В пункте п.1.а. указывалось, что программа bootloader'a размещается в самом начале и защищена от записи, следовательно, для целей смещения кода (внутри hex файла) пользовательской программы, обязательно используется linker. Для pic18 и компилятора XC8 это сделать достаточно просто (для PIC24 всё мягко говоря сложнее в разы):
После чего, скомпилированный код не будет затрагивать указанные интервалы пространства.
Для большего понимания зачем это нужно, вот скрин из даташита к AN1310:
По факту завершения написания программы, компилируете и возвращаетесь в Serial Bootloader AN1310., затем:
Reset\Break + MCLR
Запускаем Bootloader, убеждаемся, что он запущен
Открываем скомпилированный код HEX и нажимаем Write Device
По завершение загрузки, нажимаем Run
Контроллер сразу начнет выполнение пользовательского кода.
Вот как так это всё и работает. Зато это гораздо интереснее этой вашей арудины.
В следующий раз расскажу про Bootloader PIC24 и самописное ПО для ПК.