Автономный программатор AVR.
Введение.
![]() |
Работать нужно с комфортом, но это не всегда получается. Реальность вносит свои коррективы. Пришлось как раз заниматься серийным программированием микроконт- роллеров, у заказчика на объектах. Требовалось заменить программу т.к. по недосмотру отгрузили устройства с диагностической программой за место штатной. Требовалось приехать на объект с программатором и ноутбуком, разобрать устройство, подключить программатор (JTAGICE mkII), заменить прошивку, собрать устройство обратно. Вопрос возник в процессе уже после нескольких итерация, и не давал покоя: Таскать с собой набор в виде ноутбука и программатора ради одной операции ? Требовался программатор+ПК в виде одного устройства. Поиск готовые автономных программаторов не дал положительных результатов. Вот тогда и родилась идея создать программатор удовлетворяющий своим потребностям. При этом программатор необходимо было сделать быстро и из подручных средств. Идея и часть исходного кода была позаимствована с сайта we.easyelectronics.ru Сверхмобильная прошивалка AVR по JTAG. Спасибо автору Dominikanez за статью. |
Реализация.
За основу программатора была взята универсальная макетная плата на микроконтроллере STM32,
ЖКИ индикатор 4 х 20 символов, 4 кнопки, подходящий корпус.
В результате получился программатор который решает следующие задачи:
- Программирования микроконтроллеров без применения ПК с минимальным набором операций со стороны пользователя.
- Устройство позволяет производить серийное программирование микроконтроллеров.
- Возможность использования персоналом с минимальной квалификацией (техник, радиомонтажник или айтишник).
Принцип работы.
1. На персональном компьютере подготавливается образ для AVR микроконтроллера.
2. Полученный образ загружается в программатор через RS-232 по средствам протокола x-modem.
3. Программатор размещает полученный образ(ы) в виде файла(ов) во внутренней флеш памяти
(FAT16, 256Кб).
4. Оператор подключает программатор к плате с AVR микроконтроллером.
5. Оператор производит выбор необходимой прошивки при помощи клавиш и наблюдая результат
работы на индикаторе программатора.
6. Оператор производит запуск на программирование устройства, с последующим визуальным
контролем результата выполнения операции на дисплеи программатора.
Описание.
Устройство является автономный программатором микроконтроллеров AVR т.е. позволяет производить
запись программы в память микроконтроллера без участия ПК. Устройство производит программирование
микроконтроллеров через JTAG интерфейс.
Устройство позволяет производить следующие операции:
- Запись программ в память микроконтроллера с последующей проверкой.
- Запись FUSE-ов.
- Загрузку новой прошивки в память программатора по протоколу X-Modem.
- Просмотр состояния диска программатора (количество и тип прошивок).
Программатор построен на микроконтроллере STM32F103Z. Часть внутренней flash памяти микроконт-
роллера выделена под ДИСК, на котором хранятся прошивки. Программатор имеет на передней панели
текстовый индикатор, а также кнопки управления для взаимодействия с пользователем.
Устройство имеет в своем составе консоль, для диагностики, обслуживания устройства, загрузки новый
программ и т.п.
Программатор поддерживает следующие микроконтроллеры: ATMEGA128, ATMEGA640, ATMEGA162.
При желании можно добавить новый микроконтроллер в список поддерживаемых.
Исходный код.
Исходный код устройства выложен на GITHUB. Софт написан на языке Си, компилятор IAR.
Список поддерживаемых микроконтроллеров представлен в файле: jtag.c, в структуре
avr_signature_st
const avr_signature_struct avr_signature_st[] = {
{"ATmega162", 0x1e9404, 64},
{"ATmega128", 0x1e9702, 128},
{"ATmega640", 0x1e9608, 64}
};
Каждый микроконтроллер описывается структурой avr_signature_struct.
- Первый элемент структуры - текстовое наименование микроконтроллера.
- Второй элемент Device Signature - служит для опознавания подключения микроконтроллера перед программированием.
- Третий элемент структуры - размер страницы flash памяти в словах.
Все предельно просто, добавление нового микроконтроллера не должно составлять труда.
Устройство содержит внешний ком порт который является консолью программатора, и служит для
взаимодействия пользователя с программатором.
Параметры подключения к консоли следующие: 115200 8N1.
Консоль поддерживает следующие команды:
help или ? | - Печать списка команд поддерживаемых консолью. |
xmodem <filename> | - Загрузка файла прошивки по протоколу X-modem. |
mkfs |
- Создание файловой системы внутри flash памяти микроконтроллера(диск),или удаление текущего содержимого диска. |
free | - Печать размера свободного мести на диске. |
ls | - Печать списка файлов диска. |
rm <filename> | - Удаление файла. |
jtag <filename> | - Программирование микроконтроллера программой <filename>. |
Список консольных команд представлен в файле consol.c и реализация команд в файле task_consol.c.
Подготовка новой прошивки для загрузки в программатор.
Перед загрузкой прошивки в программатор необходимо пропустить прошивку (в виде HEX файла)
через конвертер. Исходный код конвертера для ПК представлен в дереве исходников по ссылке fwa.
Конвертер написан на языке Си и предназначен для компиляции в среде VisualStudio.
Конвертер представляет собой консольную программу, которой в командной строке передаются все
необходимые параметры.
Параметры запуска конвертера следующие (на примере ATMEGA640):
fwa -I r640.hex -O r640.bin -S 1E9608 -F 99E0FD
Разбор параметров:
-I r640.hex | Входной HEX файл прошивки. |
-O r640.bin | Выходной файл, для загрузки в программатор. |
-S 1E9608 | Device Signature для ATMEGA640 из документации на микроконтроллер (ВНИМАНИЕ:программатор проверяет сигнатуру перед программированием !) |
-F 99E0FD | Состояние FUSE, необходимо обязательно задавать. |
Загрузка подготовленной прошивки в программатор.
- Подключить нуль модемный кабель к ПК и программатору.
- На Пк запустить терминальную программу с параметрами COM порта 115200 8N1.
- В консоли устройства набрать команду: xmodem <указать-имя-файла>.
- В терминальной программе перейти в режим передачи файла по протоколу X-modem.
Программирование микроконтроллера.
- Подключить JTAG кабель программатора к плате с программируемым микроконтроллером.
- Включить питание программатора и программируемого устройства.
- При помощи кнопок на передней панели программатора выбрать файл программы.
- Нажать кнопку prog на панели программатора и дождаться окончания результата программирования.
Рисунок 1. Внешний вид программатора.
Рисунок 2. Внешний вид индикатора в момент включения устройства.
Рисунок 3. Внешний вид индикатора устройства в режиме выбора файла программы.
Рисунок 4. Основная плата устройства.
Рисунок 5. Устройство вид внутри обе панели.