П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 Ом для предохранения порта от повреждения и соединительного кабеля длиной около 1,5 метра. В нашем случае использовалась более совершенная схема на рис. П3.1.22 (см. также материалы сайта А. Редчука http://ln.com.ua/~real/avreal), в которой для развязки LPT-порта и программируемого МК используется неинвертирующий шинный формирователь 74HC244 (аналог 1564АП5) (может быть заменен на 555АП5 (74LS244) или 1533АП5 (74ALS244)). Достоинством схемы является повышение безопасности LPT-порта и надежности программирования за счет улучшения формы сигналов, а также возможность его безопасного отключения путем перевода выходов формирователя в высокоимпедансное Z-состояние. Схема достаточно проста и легко размещается в разъеме стандартного принтерного кабеля Cetronix. Наличие перемычек между контактами 2 и 12, 3 и 11 разъема Х1 означает, что устройство будет опознаваться также как загрузочный ка­бель от STK200/STK300 (отладочные устройства компании Atmel).

 

 

Рис. П3.1.22. Схема программатора

 

Хостинг от uCoz