Rambler's Top100

Программирование


Неприятные особенности "PONY Prog"
Адаптация "PONY Prog"
И всё-таки высоковольтное программирование
Технология высоковольтного программирования

Параллельное программирование.
Автор

Неприятные особенности "PONY Prog".

Из многих бесплатных схем "PONY Prog" отличает простота и модульность. Можно "слепить" любую необходимую конфигурацию без особых усилий. Но нас интересует пока AVR-семейство. Проблем здесь всего две:

  1. Подходит кварц ТОЛЬКО 4 МГц.
  2. Лучше не использовать встроенный тактовый генератор в ATiny
     ( по той же причине - его частота 1МГц ).
 
Оглавление Оглавление

Адаптация "PONY Prog".

"Адаптация" состоит в основном в замене комплектующих на отечественные. В первую очередь стабилитроны с барьером Шоттки для "срезания" отрицательной части сигнала RS232 можно смело заменить на наши КС147 (любые). Прямое падение на них не больше 0.9 В, что нисколько не вредит портам AVR. Стабилизатор питания - банальная 142ЕН5 (7805, 78L05). В одной из версий даже ЕН-ки не было - просто стабилизатор на транзисторе, лишь бы не больше 5 Вольт. Диоды - любые импульсные (КД522, КД510). Транзистор на входе #RESET - КТ315Е, КТ503В...Д. В общем, лишь бы принципу соответствовало, что ни поставить - всё работает.

Оглавление Оглавление

И всё-таки высоковольтное программирование.

Прежде, чем собрать "PONY Prog", подумайте - ведь есть способ лучше - высоковольтное программирование. Приведу только два весьма веских довода "за", которых, думаю, достаточно:

 
   1. Если у вас ATiny и используется внутренний генератор,
      перепрограммировать контроллер второй раз с помощью "PONY"
      вы не сможете.
   2. То же произойдёт при запрещении SPI (бит SPEN) на любом контроллере.
 
 

В этих случаях (если вы только начали отлаживать программу и обнаружили ошибку) вы получите совершенно бесполезный кусок керамики с ножками вместо контроллера после первой же попытки программирования. Правда, с помощью высоковольтного программирования эта ситуация исправляется - там тактовый генератор контроллера не нужен, а все биты конфигурации доступны по чтению и записи.

Оглавление Оглавление

Технология высоковольтного программирования.

К счастью, ATMEL Corp вырвботала стандарт лдя программирования своих контроллеров. Алгоритм программирования 20-выводных AT90S1200 не отличается от алгоритма ATmega. Правда различия в цоколёвке могут доставить немало хлопот при реализации программатора. Для 8-выводных контроллеров тоже существует режим высоковольтного программирования, но данные при этом загружаются последовательно. Это мы рассмотрим несколько позже.

Параллельное программирование.

На рисунке показано расположение используемых сигналов:



Таблица 1. Назначение выводов

Сигнал Вывод Описание
+12 V #RESET Напряжение программирования
RDY/#BSY PD1 Выход готовности. 0 - идёт исполнение команды, 1 - готов
#OE PD2 Вход разрешения чтения данных.
#WR PD3 Вход разрешения записи данных.
BS PD4 Вход Byte Select (выбор байта). 0 - младший, 1 - старший.
XA0 PD5 Код действия, бит 0.
XA1 PD6 Код действия, бит 1.
- XTAL1 Строб чтения-записи.
DATA PB0...7 Ввод-вывод данных.

Таблица 2. Комбинации сигналов XA0,XA1

XA1 XA0 Действие по стробу XTAL1
0 0 Загрузка адреса в памяти программ или EEPROM (старший или младший байт - определяется BS)
0 1 Загрузка данных (старший или младший байт - определяется BS)
1 0 Загрузка команды
1 1 Останов

Таблица 3. Команды режима программирования

Код команды (HEX) Команда
80 Chip Erase (Стирание)
40 Write Fuse Bits (Запись битов конфигурации)
20 Write Lock Bits (Запись битов защиты)
10 Write Flash (Запись памяти программ)
11 Write EEPROM (Запись EEPROM)
08 Read Signature (Чтение сигнатуры)
04 Read Fuse & Lock Bits (Чтение битов конфигурации и защиты)
02 Read Flash (Чтение памяти программ)
03 Read EEPROM (Чтение EEPROM)

Вход в режим программирования

  1. Подать напряжение питания на Vcc.
  2. Подать уровень "0" на #RESET и BS и удерживать не менее 100 нс.
  3. Подать напряжение программирования (11,5...12,5 В) на вход #RESET.
     Через 100 нс контроллер войдёт в режим программирования.

Стирание

  1. Включить режим загрузки команд (XA0...XA1, таблица 2).
  2. Подать уровень "0" на BS.
  3. Подать команду Chip Erase ($80) на порт B.
  4. Подать уровень "0" на #WE на 10 мс.
     Контроллер не выдаёт сигнал RDY/#BSY при стирании.
  5. Через 10 мс подать уровень "1" на #WR.

Запись памяти программ и EEPROM

  1.  Включить режим загрузки команд (XA0...XA1, таблица 2).
  2.  Подать уровень "0" на BS.
  3.  Подать команду Write Flash ($10) Write EEPROM ($11) на порт B.
  4.  Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  5.  Включить режим загрузки адреса (XA0...XA1, таблица 2).
  6.  Установить BS в "1".
  7.  Подать старший байт адреса на порт B.
  8.  Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  9.  Установить BS в "0".
  10. Подать младший байт адреса на порт B.
  11. Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  12. Включить режим загрузки данных (XA0...XA1, таблица 2).
  13. Установить BS в "1".
  14. Подать старший байт данных на порт B.
  15. Подать отрицательный импульс длительностью не менее 100 нс на #WR.
      Ожидать, пока RDY/#BSY не установится в "1".
  16. Установить BS в "0".
  17. Подать младший байт данных на порт B.
  18. Подать отрицательный импульс длительностью не менее 100 нс на #WR.
      Ожидать, пока RDY/#BSY не установится в "1".
Этот цикл в некоторых случаях можно сократить. Если вы только программируете без проверки чтением, то шаги 1...4 выполняются только в начале цикла. Если вы программируете всё ПЗУ подряд, старший байт адреса (шаги 5...8) можно загружать только в начале 256-байтовой страницы ПЗУ. Можно пропустить запись $FF, т.к. после стирания все байты ПЗУ устанавливиются в $FF.

Чтение памяти программ и EEPROM

  1.  Включить режим загрузки команд (XA0...XA1, таблица 2).
  2.  Подать уровень "0" на BS.
  3.  Подать команду Read Flash ($02) или Read EEPROM ($03) на порт B.
  4.  Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  5.  Включить режим загрузки адреса (XA0...XA1, таблица 2).
  6.  Установить BS в "1".
  7.  Подать старший байт адреса на порт B.
  8.  Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  9.  Установить BS в "0".
  10. Подать младший байт адреса на порт B.
  11. Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  12. Установить BS в "0".
  13. Подать "0" на #OE. Прочитать младший байт данных из порта B.
  14. Установить BS в "1". Прочитать старший байт данных из порта B.
  15. Подать "1" на #OE.

   Замечание
   Различия при чтении и записи ПЗУ и EEPROM данных только в кодах команд.

Чтение битов конфигурации и защиты

  1. Включить режим загрузки команд (XA0...XA1, таблица 2).
  2. Подать уровень "0" на BS.
  3. Подать команду Read Fuse and Lock ($04) на порт B.
  4. Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  5. Установить BS в "0".
  6. Установить #OE в "0". Считать данные с порта B.
  7. Установить #OE в "1".

Запись битов конфигурации и защиты

  1. Включить режим загрузки команд (XA0...XA1, таблица 2).
  2. Подать уровень "0" на BS.
  3. Подать команду Write Fuse ($40) или Write Lock ($20) на порт B.
  4. Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  5. Включить режим загрузки данных (XA0...XA1, таблица 2).
  6. Установить BS в "0".
  7. Подать байт данных на порт B. "0" в соответствующем бите означает 
     что бит программируется.
  8. Подать отрицательный импульс длительностью не менее 1,5 мс на #WR.
     При программировании битов конфигурации RDY/#BSY не устанавливается.
     При программировании битов защиты ожидать, пока RDY/#BSY не установится в "1".

   Замечание
   Запрограммированые биты защиты не перезаписяваются. Их можно сбросить только 
   стиранием памяти программ.

Чтение сигнатуры

  1.  Включить режим загрузки команд (XA0...XA1, таблица 2).
  2.  Подать уровень "0" на BS.
  3.  Подать команду Read Signature ($08) на порт B.
  4.  Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  5.  Включить режим загрузки адреса (XA0...XA1, таблица 2).
  6.  Установить BS в "0".
  7.  Подать младший байт адреса на порт B.
  8.  Подать положительный импульс длительностью не менее 100 нс на XTAL1 .
  9.  Установить BS в "0".
  10. Подать "0" на #OE. Прочитать байт данных из порта B.
  11. Подать "1" на #OE.

Байты сигнатуры находятся по адресам $00...$02.

Оглавление Оглавление



© Берёзкин С.Е., 2001 г.

stlab@rambler.ru



Оглавление

Главная

Микроконтроллеры



Рейтинг@Mail.ru bigmir)net TOP 100 Rambler's Top100 AllBest.Ru Яндекс цитирования