П3.1.5. Программирование микроконтроллера в среде PonyProg
Программа PonyProg является бесплатной; ее
последнюю версию можно получить на сайте http://www.lancos.com,
откуда можно скачать не только англоязычный вариант, но и русский, украинский и
др. Однако русифицированная версия программы является устаревшей и не
поддерживающей ряд микроконтроллеров, в частности, МК ATtiny2313. Поэтому лучше пользоваться
англоязычной версией, тем более что она представлена, как правило, самым свежим
вариантом. Программа рассчитана на работу под управлением Windows95, 98, ХP, 2000, NT и Intel
Linux с использованием соответствующих адаптеров,
схемы которых имеются на сайте разработчика, а также на сайте kazus.ru (архив pony.zip).
Запуск программы сопровождается заставкой на рис. П3.1.18
и лошадиным ржанием, которое может быть выключено на последующие сеансы
установкой опции Disable Sound.
Рис. П3.1.18. Рекламная заставка
Наиболее часто используемы команды
программы представлены подсвечиваемыми (со всплывающими подсказами) радиокнопками в ее главном окне (рис. П3.1.19). Первым
действием является выбор типа программируемой микросхемы из выпадающего списка
в поле иконки : первой треугольной кнопкой в этом поле
выбирается семейство микросхем (в нашем случае AVR micro),
а второй — тип (ATtiny2313). Такой же выбор можно
сделать и с помощью меню Device. Заметим, что в этих
списках, кроме изделий компании Atmel, присутствуют
МК компании Microchip, EEPROM с интерфейсами I2C
Bus, Microwire, SPI, и др.,
что позволяет так называемым аппаратным хакерам и ремонтникам взламывать и
ремонтировать кодированную аудио и видеоаппаратуру.
Выбранный тип микросхемы сохраняется при повторных сеансах работы с программой.
Рис. П3.1.19. Главное
окно программы
Следующим шагом является подключение к нашему макету программатора через ISP-кабель, после чего производится настройка интерфейса и
калибровка программы с помощью команд Setup/Interface Setup и Setup/Calibration (меню Setup можно вызвать также кнопкой ). Эти операции
обычно выполняются только один раз и повторяются лишь при сбое программы.
При калибровке, сопровождаемой вызовом окна-ярлыка с
просьбой подтвердить необходимость ее проведения, программа производит
настройку своих внутренних процедур с целью формирования соответствующих временных интервалов под ПК, к которому подключен
программатор. Процесс калибровки завершается сообщением об ее успешном
выполнении.
Команда настройки интерфейса
сопровождается вызовом окна на рис. П3.1.20, где выбирается параллельный порт (Parallel), к которому подключен программатор (обычно это
LPT1), способ программирования (Avr ISP I/O — последовательное программирование по ISP-интерфейсу),
опции инвертирования любого из управляющих сигналов ISP-интерфейса, если в этом
имеется необходимость (например, при использовании в программаторе буферной ИМС
с инверсией). В заключение нажимается кнопка Probe, после чего следует сообщение об успешном выполнении
теста, если исправен программатор, соединительный кабель, активирован LPT1-порт
и т. п. Заметим, что имеющийся в продаже адаптер USB-LPT для принтеров в данном
случае не подходит: требуется не виртуальный LPT, а аппаратный, например, (для
ноутбуков) PCMCIA/Cardbus-LPT или EXPRESS/Cardbus-LPT (тем не менее ни один из
двух апробированных образцов EXPRESS/Cardbus-LPT китайского
производства не был опознан ноутбуком GIGABYTE).
Рис. П3.1.20. Окно
настройки интерфейса
Следующим шагом является чтение и установка битов защиты и конфигурации программируемого МК (так называемых fuse-битов), которое выполняется в окне команды Command/Security and configuration bits (Ctrl + S или кнопка )
(рис. П3.1.21). После нажатия в этом окне кнопки Read
будут прочитаны соответствующие биты МК (это
надо сделать обязательно!!!). При этом отмеченные галочкой биты являются
запрограммированными (они равны 0), а не отмеченные — не запрограммированными
(они равны 1). Для записи внесенных изменений нажимается кнопка Write. В частности, для нашего случая (использование
внутреннего тактового RC-генератора на 8 МГц)
состояние битов CKSEL3—CKSELO должно быть следующим: CKSEL3 — 0 (есть галочка);
CKSEL2 — 0 (нет галочки); CKSEL1 — 1 (есть галочка); CKSELO — 0 (есть галочка).
Значения остальных битов, за исключением CKDIV8 оставляются без
изменений.
Назначение битов конфигурации (fuse-битов) [14]:
1. Lock2, Lock1 — биты защиты от программирования EEPROM, памяти программ и fuse-битов.
2. SUT1—
SUT0 — выбор времени задержки запуска тактового генератора (после системного
сброса) (нулевой (запрограммированный или программируемый) бит в окне на рис.
21 отмечается галочкой):
00 — 14
циклов; 01 — 14 циклов + 4,1 мс; 10 — 14 циклов + 65мс.
3.
CKDIV8 — выбор коэффициента предварительного деления тактовой частоты: 1 —
коэффициент деления 1 (выбран для нашего случая); 0 — коэффициент деления 8, т.
е. коэффициент предделения 8 может быть установлен
выбором CKDIV8 = 0.
4.
BODLEVEL2— BODLEVEL0 — выбор минимального уровня контроля напряжения питания
BOD (Brown-out Detection):
111 — BOD выключена; 110 — минимальное напряжение 1,8 В;
101 — 2,7 В; 100 — минимальное напряжение 4,3 В.
5.
WDTON — выбор времени срабатывания сторожевого таймера: 0 — от 16 мс до 2 с; 1
— 2—8 с; зависит также от
коэффициентов делителя частоты его генератора, определяемых битами WDP2—WDP0.
6. CKSEL3—CKSEL0 — выбор
источника тактового сигнала:
0000 — внешний тактовый генератор
с подключением ко входу XTAL1
(вывод 5);
0010 —
внутренний RC-генератор частотой 4 МГц;
0100 —
внутренний RC-генератор частотой 8 МГц;
1000—1111
— внешний кварцевый или керамический резонатор с подключением между выводами XTAL1 (5) и XTAL2 (4) и
конденсаторами емкостью 12…22 пФ (в зависимости от типа резонатора) между
каждым выводом и общей шиной.
7. DWEN
— бит разрешения (DWEN = 0) или запрета (DWEN = 1) на использование встроенного
отладчика debugWIRE.
8. EESAVE — бит разрешения (EESAVE = 1) или запрета
(EESAVE = 0) стирания данных EEPROM.
9.
SPIEN — бит разрешения (SPIEN = 0) или запрета (SPIEN = 1) последовательного программирования
по SPI-интерфейсу (недоступен при SPI-программировании).
10. RSTDISBL — отключение
внешнего сброса при RSTDISBL = 0 (вывод Reset
используется в этом случае как порт ввода/вывода).
11. CKOUT — при CKOUT = 0 выход генератора тактовой
частоты подключается к выводу 4 (XTAL2).
Микроконтроллер
ATtiny 2313 поставляется со следующими заводскими
установками битов конфигурации: CKSEL = 0100; SUT = 10; CKDIV8 = 0. Перед
записью новых значений битов необходимо в
обязательном порядке произвести их чтение.
Рис. П3.1.21. Окно установки битов конфигурации и защиты
Для калибровки внутреннего тактового генератора МК используются команды Read Osc. Calibration
Byte (Ctrl + O) и Osc. Calibration Options из меню Command. В ATtiny2313 эта операция выполняется автоматически, если в
регистр OSCCAL загрузить соответствующее число (см. строки 32, 33). В других
МК, возможно, потребуется определение калибровочного байта, который вносится в
одну из ячеек программной памяти или EEPROM следующим образом. В первую очередь
выполняется команда Read Osc. Calibration Byte, после чего в окне-ярлыке команды Osc. Calibration Options в поле Address вводится адрес ячейки и
активизируется опция Data memory
offset (Смещение относительно памяти данных), если
калибровочный байт записывается в EEPROM, в противном случае — в программную
память. При этом перед каждым программированием достаточно выбрать команду Read Osc. Calibration Byte и калибровочный байт будет помещен по указанному адресу в текущее окно
программатора. Кроме того, сама управляющая программа (для целевого устройства) должна
быть составлена таким образом, чтобы в начале своей работы она читала
содержимое ячейки с калибровочным байтом и записывала его в регистр OSCCAL
калибровки тактового генератора.
Для загрузки в буфер (окно) программатора данных из
файлов, полученных в результате трансляции управляющей программы, используются
следующие команды меню File:
Open Device File — загрузка файла программы и данных в FLASH и EEPROM память (например, mag_cvet.hex, созданный в AVR Studio);
Open Program
(FLASH) File — загрузка файла программы в FLASH память;
Open Data
(EEPROM) File — загрузка файла данных в EEPROM память.
Эти команды могут быть вызваны также кнопками соответственно. В зависимости от типа
программируемой микросхемы в стандартном окне загрузки выбирается файл с
соответствующим расширением (их всего семь). В нашем случае это файл с
расширением .HEX, генерируемый при трансляции
программы в AVR Studio.
После загрузки в окне программатора отображается дамп
памяти в виде таблицы шестнадцатеричных чисел, записанных рядами по 16 чисел в
ряду (см. рис. П3.1.19). В начале каждого ряда записывается адрес ячейки,
правее — те же шестнадцать чисел в символьной ASCII кодировке.
В окно помещается сначала содержимое программной памяти
МК, а затем (другим цветом) — содержимое EEPROM. Так как ATtiny2313 имеет объем программной памяти 2 Кбайт, то дамп
программной памяти заканчивается ячейкой с адресом 0x7F, затем следует дамп
EEPROM со сквозной нумерацией ячеек, поскольку обе памяти находятся в одном
адресном пространстве. При этом ячейка EEPROM с адресом 0x00 имеет адрес 0x80.
Размещение всей информации в едином адресном пространстве
позволяет хранить программу и данные в одном файле. В процессе программирования
микросхемы программатор автоматически отделяет программу от данных, используя
информацию об объеме программной памяти конкретного МК. Все, что выше этого
объема, автоматически считается данными для EEPROM.
Для записи содержимого буфера программатора в МК используются следующие
команды меню Command:
Write All — запись программы и данных в FLASH и EEPROM память;
Write Program (FLASH) — запись программы в FLASH память;
Write Data (EEPROM) — запись данных в EEPROM память.
Эти команды могут быть вызваны также кнопками соответственно.
Для сравнения (верификации) записанных в МК данных и содержимого буфера
используются следующие команды меню Command: Verify All — верификация программы и данных,
Verify Program (FLASH) — программы в FLASH памяти и Verify Data (EEPROM) — данных в EEPROM памяти.
Для чтения содержимого памяти программ и данных МК и вывода их дампа
используются следующие команды меню Command: Read All — программы и данных в FLASH и EEPROM памяти; Read Program (FLASH) — программы в FLASH памяти; Read Data (EEPROM) — данных в EEPROM памяти. Эти команды
могут быть вызваны также кнопками соответственно, а данные могут быть размещены
в новом окне, вызываемом кнопкой . Все записанные в память МК
данные могут быть стерты (до кода FF в каждой ячейке)
командой Command/Erase,
вызываемой кнопкой .
Для записи прочитанных данных из запрограммированного
устройства (МК, ИМС памяти и т. п.) используются следующие команды меню File:
Save Device File — загрузка файла программы и данных в FLASH и EEPROM память;
Save Program
(FLASH) File As — загрузка файла программы в FLASH память;
Save Data
(EEPROM) File As — загрузка файла данных в EEPROM память.
Эти команды могут быть вызваны также кнопками .
PonyProg имеет встроенную систему
автоматического формирования серийного номера программы (порядкового номера
версии), который автоматически записывается в выбранную ячейку памяти программ
или памяти данных. Настройка этого режима производится командой Utility/Serial Number Config, в окне которой
выбирается адрес ячейки для серийного номера, опция Data
memory offset, параметрAuto Increment автоматического изменения номера и др. Изменение серийного номера и его
запись в выбранную ячейку текущего окна программатора производится командой Utility/Set Serial
Number (дублируется кнопкой ).
В PonyProg предусмотрен также
пакетный режим работы, настройка которого производится в окне команды Command/Program Options. Если в этом окне активизированы опции Reload Files, Erase и Write Program memory (FLASH), то после загрузки файла с
новой версией программы ее перепрограммирование (перепрошивка)
производится несколькими нажатиями кнопки .
Что же
касается программатора, то его самая простая аппаратная реализация состоит из
25-контактного разъема, подключаемого к LPT-порту ПК, 4-х резисторов по 150 Ом
для предохранения порта от повреждения и соединительного кабеля длиной около
Рис. П3.1.22. Схема
программатора