AVR910: Внутрисистемное
программирование
Оригинал:
Application Note AVR910 фирмы ATMEL
перевел: Sinbad
г.Самара. 20.10.2000 г
Особенности
- Программирование любого AVR MCU
установленного в готовом устройстве
- Перепрограммирование Flash памяти
данных и EEPROM памяти
- Исключается панелька из устройства
- Простой 3-х проводной SPI интерфейс
программирования
Введение
Программирование в системе позволяет программировать любой
AVR MCU, расположенный в готовом устройстве. Используя простой 3-х проводной
SPI интерфейс, внутрисистемный программатор связывается последовательно с AVR
MCU, перепрограммируя всю энергонезависимую память в чипе.
Внутрисистемное программирование избавляет от демонтажа
микросхем из устройства. Это сэкономит время и деньги, как при разработке в
лаборатории, так и при обновлении прошивки или параметров в памяти.
Это примечание показывает, как разработать устройство,
поддерживающее внутрисистемное программирование. А также, как может быть
сделать недорогой внутрисистемный программатор, позволяющий программировать AVR
MCU с помощью компьютера, оборудованного 9-ти штырьковым СОМ-портом.
Интерфейс программирования
Для внутрисистемного программирования, программатор
подключается к программируемому устройству как можно меньшим числом проводов.
Для программирования любого AVR MCU в любом устройстве, используется простой
6-ти проводной интерфейс для подключения программатора к плате программируемого
устройства. Рисунок 1, внизу, показывает необходимые соединения.
Рисунок 1. 6-ти проводное соединение программатора и
программируемого устройства.
Последовательный периферийный интерфейс (SPI) представляет
собой 3 провода: последовательный тактовый сигнал (SCK), главный вход -
подчиненный выход (MISO) и главный выход - подчиненный вход (MOSI). При
программировании AVR, внутрисистемный программатор всегда функционирует как
главный, а программируемое устройство как подчиненный.
Внутрисистемный программатор (главный) формирует на линии
SCK тактовый сигнал для связи. Во время каждого импульса на линии SCK,
передается один бит от программатора (главный) к программируемому устройству
(подчиненный) по линии MOSI. Одновременно, по каждому импульсу на линии SCK
передается один бит от программируемого устройства (подчиненный) к
программатору (главный) по линии MISO.
Для обеспечения нормальной связи по трем SPI линиям,
необходимо соединить земли на программаторе и программируемом устройстве (GND).
Для входа и нахождения в режиме последовательного
программирования, сброс программируемого AVR MCU должен удерживаться в активном
состоянии (низкий уровень). Также, при стирании чипа, на сбросе должен быть
сформирован импульс в конце цикла стирания. Чтобы упростить процедуру
программирования, желательно предоставить программатору контроль над линией
сброса программируемого MCU, для автоматизации этой процедуры используется
четвертая управляющая линия (RES).
Для программирования устройства работающего при любом
разрешенном напряжении питания (2.7 - 6.0 V), программатор может питаться от
программируемого устройства (Vcc). Это освобождает от необходимости, иметь
отдельный источник питания для программатора. Аналогично, программируемое
устройство может запитываться от программатора во время программирования,
избавляя от необходимости питания устройства через разъем его постоянного источника
питания, в течение цикла программирования.
Таблица 1. Контакты необходимые для программирования в
системе.
КОНТАКТ
|
НАЗВАНИЕ
|
КОММЕНТАРИЙ
|
SCK
|
Тактовый сигнал
|
Тактовый сигнал программирования, вырабатываемый внутрисистемным
программатором (главным)
|
MOSI
|
Главный выход-подчиненный вход
|
Линия передачи данных от программатора (главный), к
программируемому MCU (подчиненный)
|
MISO
|
Главный вход-подчиненный выход
|
Линия передачи данных от программируемого
MCU(подчиненный) к программатору (главный)
|
GND
|
Общая земля
|
Оба устройства должны иметь общую землю
|
RES
|
Сброс программируемого MCU
|
Для входа в режим последовательного программирования, сброс
программируемого AVR MCU должен удерживаться в активном состоянии. Чтобы
упростить процедуру программирования, внутрисистемный программатор должен
контролировать сброс программируемого AVR MCU.
|
Vcc
|
Питание программируемого MCU
|
Для программирования при любом разрешенном напряжении
питания (2.7 - 6.0 V), внутрисистемный программатор может питаться от
программируемого устройства. Аналогично, программируемое устройство может
питаться через разъем внутрисистемного программирования во время цикла программирования.
|
Рисунок 2. Рекомендуемая схема разъема, для интерфейса внутрисистемного
программирования
Рисунок 2 показывает стандартный разъем, используемый
всеми внутрисистемными программаторами фирмы ATMEL для подключения к
программируемому устройству. Стандартный кабель снабжен 2 Х 3 ножечным разъемом,
с расстоянием между ножками 100 mils.
АППАРАТНЫЕ ОСОБЕННОСТИ
ПРОЕКТИРОВАНИЯ
Для возможности программирования в системе AVR MCU, нужные
выводы подчиненного MCU должны быть освобождены подчиненным устройством по
требованию. Этот раздел описывает детально каждый вывод использоваемый при
программировании.
GND
Системному программатору и программируемому устройству
необходимо работать с одинаковым опорным напряжением. Это достигается
соединением земли программируемого устройства с землей программатора. Ни какие
специальные требования к этому выводу не предъявляются.
RESET
Подчиненный AVR MCU войдет в последовательный режим
программирования, только когда его линия сброса в активном состоянии (низкий
уровень). При стирании чипа, линия сброса должна быть переключена в конце цикла
стирания. Для упрощения этой операции, рекомендуется, чтобы сброс
программируемого устройства контролировался внутрисистемным программатором.
Немедленно, после активизации RESET , внутрисистемный программатор начнет
обмениваться по трем предназначенным для SPI проводам - SCK, MISO и MOSI. Чтобы
избежать конфликта выходов, активный RESET должен немедленно отключить любой
чип, управляющий этими линиями в программируемом устройстве. Обратите внимание,
что AVR MCU автоматически устанавливает все эти I/O выводы как входы, с
отключенными подтягивающими резисторами, когда RESET активен. Чтобы избежать
проблем, внутрисистемный программатор должен быть способен удерживать полный
сброс программируемого устройства в течение цикла программирования.
Программируемое устройство, никогда не должно пытаться управлять тремя SPI
линиями, пока сброс активен. Если использование системного программатора для
контролирования сброса программируемого устройства невозможно, сброс может управляться
вручную. Программатор должен просить оператора формировать сброс, когда это
необходимо. Процедура будет проходить безопаснее и быстрее, если внутри
системному программатору позволят считывать значение с линии сброса, чтобы
проверить, что пользователь выполняет требуемые задачи. С изменением в
программном обеспечении, программаторы произведенные ATMEL, могут поддерживать
этот недостаток управления. Однако этот способ не рекомендуется.
SCK
При программировании в последовательном режиме, внутрисистемный
программатор выдает тактовый сигнал на SCK ножке. Этот вывод всегда управляется
программатором, и программируемое устройство не должно пытаться управлять этим
проводом, когда сброс активен. Немедленно, после того как вывод RESET
становиться активным, на этом выводе программатором формируется ноль. В течение
первой фазы цикла программирования предохраняйте SCK линию от пульсаций, так
как они будут причиной потери синхронизации с программатором. Когда
синхронизация потеряна, единственный способ восстановить синхронизацию, это
освободить линию сброса больше чем на 100 миллисекунд. Программируемый AVR MCU
всегда будет устанавливать SCK вывод как вход без подтягивающего сопротивления,
всякий раз, когда RESET активен. Смотри также описание линии RESET. Минимальные
длительности низкого и высокого уровня для входного последовательного тактового
сигнала определяются как:
Низкий: >1 XTAL1 период тактовой частоты
Высокий: >4 XTAL1 периода тактовой частоты
MOSI
При программировании AVR в последовательном режиме,
внутрисистемный программатор выдает данные для программируемого устройства на
вывод MOSI. Этот вывод всегда управляется программатором, и программируемое
устройство некогда не должно пытаться управлять этим проводом, когда активен сброс
программируемого устройства. Программируемый AVR MCU всегда будет устанавливать
MOSI вывод как вход без подтягивающего сопротивления, всякий раз, когда RESET
активен. Смотри также описание линии RESET.
MISO
Когда формируется сброс программируемого AVR MCU, вывод
MISO устанавливается как вход без подтягивающего сопротивления. Только после
того, как команда "Programming Enable" (Программирование разрешено)
была правильно передана программируемому устройству, программируемый AVR MCU устанавливает
свой вывод MISO как выход. Вначале, внутрисистемный программатор применяет свое
подтягивающее сопротивление, для удержания MISO линии стабильной до тех пор,
пока она не будет под управлением программируемого MCU.
V CC
При программировании MCU, сигнала на выводах
программатора, должны оставаться в пределах указанных в DC характеристиках. Для
упрощения адаптации к любому напряжению питания программируемого устройства,
программатор может получать необходимое питание от программируемого устройства.
Это допустимо, так как внутрисистемный программатор будет потреблять очень
маленькую энергию от программируемого устройства, обычно не больше 20 mA.
Программатор представленный ATMEL работает именно в этом режиме. Как
альтернатива, программируемое устройство может запитываться от программатора,
через тот же разъем, который используется для связи. Это позволяет
программируемому устройству быть запрограммированным без подключения внешнего
источника питания.
Таблица 2. Рекомендации при разработке устройства
поддерживающего внутрисистемное программирование
ВЫВОД
|
РЕКОМЕНДАЦИИ
|
GND
|
Соединение земли программируемого устройства с землей
внутрисистемного программатора
|
RESET
|
Позволяет внутрисистемному программатору сбрасывать программируемое
устройство
|
SCK
|
Когда сброс программируемого AVR MCU активен, эта линия
не должна управляться программируемым устройством. Перепады на этой линии
после установки на RESET низкого уровня, будут причиной потери синхронизации
с программатором. При программировании, колебания на этом выводе должны
допускаться окружающей системой, когда сброс активен.
|
MOSI
|
Когда активен сброс программируемого AVR MCU, эта линия
не должна управляться программируемым устройством. При программировании, колебания
на этом выводе должны допускаться окружающей системой, когда сброс AVR
активен.
|
MISO
|
Когда активен сброс программируемого AVR MCU, эта линия
должна иметь возможность быть выходом. При программировании, колебания на этом
выводе должны допускаться окружающей системой, когда сброс AVR активен.
|
Vcc
|
Можно питать внутрисистемный программатор от
программируемого устройства, для адаптации к любому допустимому
программируемым устройством напряжению. В зависимости от максимально
необходимого потребляемого программатором тока, проявляйте осторожность при
использовании программатора.
|
Протокол программирования
Немедленно, после того как RESET программируемого AVR MCU становиться
активным, микропроцессор готов к входу в режим программирования. Внутренний
Последовательный Периферийный Интерфейс (SPI) активирован, и готов к приему
инструкций от программатора.
Очень важно удерживать вывод SCK стабильным, поскольку один
единственный перепад станет причиной потери синхронизации с программатором.
После установки сброса в низкий уровень, ждать минимум 20 ms перед выдачей
первой команды.
Формат команд
Все команды имеют одинаковый формат, всегда состоящий из
четырех байт. Первый бит содержит код команды, выбранной операции и памяти.
Второй и третий биты содержат адрес выбранной ячейки памяти, Четвертый бит
содержит данные, которые могут передаваться в любом направлении. Данные,
возвращаемые программируемым устройством, обычно данные, посланные ему в
предыдущем байте. В таблице 3 приведен пример, где передаются две
последовательные команды. Обратите внимание, что все возвращаемые байты равны
только что посланным. Некоторые команды возвращают один байт данных из памяти
программируемого устройства. Этот байт всегда возвращается последним (байт 4).
Разрешение доступа к памяти
После того, как вывод RESET становиться активным, доступна
только команда "Programming Enable" для SPI интерфейса. Только эта
команда открывает доступ к Flash и EEPROM памяти, и без этой команды любые
другие команды будут игнорироваться. В таблице 3 (см. выше) приведен пример,
где разрешается доступ к памяти в первой посланной команде.
После того как команда "Programming Enable" была
послана в программируемое устройство, разрешается доступ к энергонезависимой
памяти микроконтроллера, в соответствии с текущими установками защитных Lock -
бит. Программируемое устройство не подтверждает команду "Programming
Enable". Чтобы убедиться, что команда была принята программируемым AVR
MCU, мы можем попробовать считать код устройства, также и известный как
сигнатура.
Таблица 3. Пример разрешение доступа к памяти и стиранию
чипа.
ДЕЙСТВИЕ
|
MOSI, ПОСЛАННЫЕ ПРОГРАММИРУЕМОМУ AVR
|
MISO, ПРИНЯТЫЕ ОТ ПРОГРАММИРУЕМОГО AVR
|
Разрешение программирования
|
$9C 53 xx yy
|
$zz 9C 53 xx
|
Чтение кода устройства $1E по адресу $00
|
$30 nn 00 mm
|
$yy 30 nn 1E
|
Таблица 4. Формат команд последовательного
программирования
ИНСТРУКЦИЯ
|
БАЙТ 1
|
БАЙТ 2
|
БАЙТ 3
|
БАЙТ 4
|
ФУНКЦИЯ
|
Разрешение программирования
|
1010 1100
|
0101 0011
|
хххх хххх
|
хххх хххх
|
Разрешение последовательного программирования после
установки низкого уровня на RESET
|
Стирание чипа
|
1010 1100
|
100х хххх
|
хххх хххх
|
хххх хххх
|
Стирание
Flash, EEPROM и Lock бит
|
Чтение Flash памяти программ
|
0010 H000
|
0000 aaaa
|
bbbb bbbb
|
oooo oooo
|
Чтение H (старший или младший байт) данных o из памяти программ,
слова по адресу a:b
|
Запись Flash памяти программ
|
0110 H000
|
0000 aaaa
|
bbbb bbbb
|
i i i i i i i i
|
Запись H (старший или младший байт) данных i в памяти
программ, слова по адресу a:b
|
Чтение EEPROM памяти
|
1010 0000
|
0000 0000
|
bbbb bbbb
|
oooo oooo
|
Чтение o данных из EEPROM памяти по адресу b
|
Запись EEPROM памяти
|
1110 0000
|
0000 0000
|
bbbb bbbb
|
i i i i i i i i
|
Запись i данных в EEPROM память по адресу b
|
Запись Lock бит
|
1010 1100
|
111x x21x
|
хххх хххх
|
хххх хххх
|
Запись Lock бит, Установка бит 1,2 = "0" для
программирования Lock бит
|
Чтение кода устройства
|
0011 0000
|
хххх хххх
|
0000 00bb
|
oooo oooo
|
Чтение кода устройства o
|
Примечание:
a = адрес старших бит
b = адрес младших бит
H = 0 - младший байт, 1 - старший байт
o = выходящие данные
i = входящие данные
x = не имеет значение
1 = Lock бит 1
2 = Lock бит 2
Код устройства
После того как команда "Programming Enable" была
успешно прочитана через SPI интерфейс, программатор может прочитать код
устройства, известный также как сигнатура. Код будет указывать производителя
(ATMEL), семейство микроконтроллеров (AVR), размер flash в килобайтах, и тип
микроконтроллера (напр. AT90S1200).Формат команды "Read Device Code"
(считать код устройства), находящийся в таблице 4: "Формат Команд
Последовательного Программирования", будет [$30, $XX, $adr, $code].
Допустимые адреса $0, $1 или $2. Таблица 5 показывает, каким должен быть
ожидаемый результат.
Таблица 5. Допустимые кода устройства
АДРЕС
|
КОД
|
ЗНАЧЕНИЕ КОДА
|
$00
|
Код производителя
|
$1E производитель ATMEL
$00 устройств защищено (Lock биты установлены), смотри ниже
|
$01
|
Семейство микроконтроллеров и размер Flash памяти
|
$90 AVR с 1кВ Flash памяти
$91 AVR с 2кВ Flash памяти
$92 AVR с 4кВ Flash памяти
$93 AVR с 8кВ Flash памяти
|
$02
|
Тип микроконтроллера
|
Показывает тип, см. таблицу 6
|
Таблица 6 показывает, что код устройства иногда может
читаться как $FF. Если это происходит, часть кода устройства не была
запрограммирована в микроконтроллер. Это не обозначает ошибку, и эта часть
может вручную устанавливаться программатором.
Таблица 6. Таблица идентификации типа микроконтроллера
Семейство микроконтроллеров и размер Flash
|
Тип микроконтроллера
|
Микроконтроллер
|
$90
|
$01
|
AT90S1200
|
$91
|
$01
|
AT90S2313
|
$92
|
$01
|
AT90S4414
|
$93
|
$01
|
AT90S8515
|
$FF
|
$FF
|
Код устройства стерт (или устройство отсутствует)
|
$01
|
$02
|
Устройство защищено (Lock биты установлены)
|
Код устройства $FF может быть также, если программируемое устройство
не готово, и на MISO линии постоянно высокий уровень. Программатор может
определить эту ситуацию, если другие команды, посланные программируемому
устройству, возвращены как $FF.
Если программируемое устройство возвращает код
производителя $00, семейство микроконтроллеров $01, и тип микроконтроллера$02,
значит, установлены оба Lock - бита. Это защищает память от считывания, и
возвращенные значения будут байтами только что полученными от программатора.
Для стирания Lock - бит, необходимо выполнить команду "Chip Erase".
Таблица 7. Пример чтения кода устройства из AT90S1200, ожидается код $1E
90 01
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Чтение кода производителя по адресу $00
|
$30 xx 00 yy
|
$zz 30 xx 1E
|
Чтение семейства и раз. Памяти по адресу $01
|
$30 nn 01 mm
|
$yy 30 nn 90
|
Чтение типа микроконтроллера по адресу $02
|
$30 xx 02 yy
|
$mm 30 xx 01
|
Доступ к Flash памяти программ
Когда семейство микроконтроллеров определено, прошло время
начинать доступ к Flash памяти. Используя команду "Read Flash Program
Memory" (чтение Flash-памяти программ), можно прочитать один байт
содержимого Flash памяти за раз. Команда посылает адрес памяти ($0a bb) для
выбора 16-битного слова, и выбирает младший или старший байт с помощью бита H (
0 - младший, 1- старший байт). Байт, хранящийся по этому адресу, возвращается
программируемым AVR MCU в байте 4.
Обычно, каждое 16 - битное слова во Flash содержит одну AVR
инструкцию. Допустим, что инструкция, сохраненная по адресу $104 это 'add
r16,r17', тогда код операции для этой инструкции будет сохранен как $0F01.
Считывая последовательно адрес $104, ожидается, что результат, возвращенный в
байте 4 будет $0F из старшего байта, и $01 из младшего. Данные на линиях MISO и
MOSI будут выглядеть, как показано в таблице 8.
Таблица 8. Пример чтения 'add r16,r17' как $0F01 из Flash
памяти по адресу $104
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Чтение $01 по адресу $104, младший байт
|
$20 01 04 xx
|
$zz 20 01 01
|
Чтение $F0 по адресу $104, старший байт
|
$28 01 04 yy
|
$xx 28 01 0F
|
Flash
память записывается командой "Write Program Flash Memory" ( запись
Flash памяти программ). Команда посылает адрес памяти ($0a bb) для выбора
16-битного слова, и выбирает младший или старший байт с помощью бита H ( 0 -
младший, 1- старший байт). Сохраняемый байт посылается в программируемый AVR
MCU в байте 4.
В отличие от параллельного программирования, здесь нет
способа определить, когда цикл записи во Flash закончен. Программатору следует
просто подождать 4 ms прежде, чем пытаться послать другую команду по
интерфейсу. Если команда посылается, прежде чем закончился цикл внутренней
записи, запись может быть нарушена.
Таблица 9. Пример запись 'add r17,r18' как $0F12 во Flash
память по адресу $10С
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Запись $12 по адресу $10С, младший байт
|
$60 01 0C 12
|
$zz 60 01 0C
|
Ждать 4 ms
|
|
|
Запись $0F по адресу $10С, старший байт
|
$68 01 0C 0F
|
$xx 68 01 0C
|
Ждать 4 ms
|
|
|
Доступ к EEPROM памяти данных
Используя команду "Read EEPROM Data Memory" (
чтение EEPROM памяти данных ), может быть прочитан один байт содержимого EEPROM
за раз. Команда передает адрес памяти ($0a bb) для выбора расположения байта в
EEPROM.
Таблица 10. Пример чтения $AB из EEPROM по адресу $3F
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Чтение $AB по адресу $3F
|
$A0 00 3F xx
|
$zz A0 00 AB
|
EEPROM
записывается, как и Flash память, командой "Write EEPROM Memory"
(запись EEPROM памяти). Эта команда выбирает байт для записи, также как и
"Read EEPROM Memory", и передает данные, записанные в последнем байте
посланным программируемому устройству. В отличие от параллельного
программирования, здесь нет способа определить, когда цикл записи во EEPROM
закончен. Программатору следует просто подождать 4 ms прежде, чем пытаться
послать другую команду по интерфейсу. Если команда посылается, прежде чем
закончился цикл внутренней записи, запись может быть нарушена.
Таблица 11. Пример запись $0F из EEPROM по адресу $11
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Чтение $0F по адресу $11
|
$C0 00 11 0F
|
$zz C0 00 11
|
Ждать 4 ms
|
|
|
Доступ к LOCK битам
Для защиты содержимого памяти от случайной перезаписи, или
от неправомочного считывания, могу устанавливаться Lock биты. Как видно из
таблицы 12, память может быть также защищена от записи, или интерфейс
программирования может быть полностью отключен от блока памяти, делая
невозможным как считывание так и запись памяти микросхемы.
Таблица 12. Режимы защиты Lock битами
Lock бит 1
|
Lock бит 2
|
Способ защиты
|
1
|
1
|
Нет защиты памяти
|
0
|
1
|
Запрещение дальнейшего программирования Flash и EEPROM
памяти
|
0
|
0
|
Запрещение дальнейшего программирования и сравнения
Flash и EEPROM памяти
|
Lock биты не могут быть прочитаны, и их установка не может
быть проверена программатором. Для проверки, что Lock биты, установлены
правильно, следует попробовать изменить содержимое в EEPROM. Когда установлен
Lock бит 1, содержимое памяти не меняется. Когда установлены оба lock бита 1 и
2, содержимое не может быть прочитано, и в результате будет возвращен младший
байт адреса пропущенной команды. Установка только Lock бит 2 не будет иметь
защитного эффекта, прежде чем защищать микросхему от считывания, она должна
бать защищена от записи.
Lock биты предотвращаю изменение содержимого памяти только
при программировании. Ядро MCU может считывать Flash память программ и имеет
доступ к EEPROM как обычно, независимо от установки Lock бит.
Есть только один способ вернуть доступ к памяти после
установки Lock бит, путем полного стирания чипа командой "Chip Erase"
(стирание чипа). Lock биты будут сброшены в 1, отключая защиту, только после
полного стирания всего содержимого памяти.
Таблица 13. Пример установки Lock бит 1 для запрещения
дальнейшего программирования
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Установка Lock бит 1 для запрещения программирования
|
$AC FD xx yy
|
$zz AC FD xx
|
Ждать 4 ms
|
|
|
После стирания чипа, Lock биты принимают значение 1,
показывающее сброс бита. Хотя операция установки защиты называется
"установка" Lock бит, но для этого в бит должно быть записано нулевое
значение.
Операция стирания чипа
Прежде чем новое содержимое сможет бать записано во Flash
память программ, память должна быть стерта. Без стирания, возможно
программировать нулевые биты во Flash памяти, устанавливая в некоторые 1.
Стирание памяти выполняется командой "Chip Erase" (стирание чипа).
Эта команда стирает все содержимое памяти, как Flash памяти программ, так и
EEPROM.
Таблица 13. Пример стирания всего содержимого Flash памяти
программ и EEPROM
Действие
|
MOSI, посланные программируемому AVR
|
MISO, принятые от программируемого AVR
|
Стирание чипа
|
$AC 8x yy nn
|
$zz AC 8x yy
|
Ждать 10 ms
|
|
|
Освободить сброс для окончания стирания
|
|
|
После успешного стирания памяти, сбрасываются Lock биты. Этот
метод гарантирует секретность данных в памяти, до того как все данные будут
полностью стерты, и прежде чем доступ будет вновь предоставлен.
После стирания чипа, все содержимое памяти будет
считываться как $FF.
Единственный способ завершить цикл стирания, временно
освободить линию RESET
Простой недорогой
внутрисистемный программатор
Это примечание не обсуждает все аспекты внутрисистемного
программатора. Вместо этого оно показывает, как может быть создан простой и
дешевый программатор, используя только AT90S1200 и несколько дискретных
компонентов. Этот программатор можно приобрести у ATMEL или у одного из её
дистрибьюторов.
Программатор подключается к любому последовательному порту
любого PC. AT90S1200 не содержит аппаратную реализацию UART, но программно
обеспечит полудуплексный UART используя таймер/счётчик 0 для синхронизации
данных. AT90S1200 также полностью берет на себя заботу о программировании AVR,
полностью программно, выполняя главный SPI.
Схема программатора приведена на рис. 3. Питание AT90S1200
получает из программируемого устройства. Отрицательное напряжение необходимое
для последовательной связи с РС через последовательный порт, сохраняется в
С100, когда принимается единица (отрицательное напряжение на линии).
Передающая линия питается этим отрицательным напряжением
от С100, когда транзистор Q100 закрыт. Это посылает логическую единицу в линию
передачи. Логический ноль (положительное напряжение) посылается открывающимся
транзистором Q100, подсоединяя VCC (точнее V CC - 0.2 V) к передающей линии.
Некоторые старые РС могут иметь последовательный порт, не
определяющих напряжение ниже +10 вольт, как логический ноль. Однако, это не
проблема для большинства существующих РС.
Рисунок 3. Недорогой внутрисистемный программатор
HEX
Список компонентов
Кол-во
|
Позиция
|
Значение
|
Компонент
|
Точность
|
Производитель
|
Комментарий
|
1
|
C100
|
1 мкФх20 В
|
CE1U020V
|
20%
|
PHILIPS
|
Тантаталовый конденсатор, SMD
|
1
|
C101
|
100 нФх50 В
|
C08B100N
|
10% X7R
|
MURATA
|
Керамический конденсатор
|
2
|
D100, D101
|
75 В/ 100 мА
|
BAS16
|
|
PHILIPS
|
Импульсный диод, корпус SO-23
|
1
|
J100
|
9 выводов
|
DSUB-9FSOL
|
|
HARTING
|
9-штырьковый разьем D-SUB, мама
|
1
|
J кабель
|
6 выводов
|
HEADER6FC
|
|
HARTING
|
6 контактный разьем, мама
|
1
|
Q100
|
45 В/ 100 мА
|
BC857C
|
|
PHILIPS
|
SMD NPN транзистор, корпус SO-23
|
1
|
Q101
|
45 В/ 100 мА
|
BC847C
|
|
PHILIPS
|
SMD PNP транзистор, корпус SO-23
|
6
|
R100-105
|
4,7 кОм
|
R08_4K7
|
1%
|
KOA
|
Резистор, 0,125 Вт, 0805
|
1
|
R106
|
1 мОм
|
NOT_USED
|
1%
|
KOA
|
Резистор, 0,125 Вт, 0805
|
1
|
U100
|
SOIC - 20
|
AT90S1200-4SC
|
|
ATMEL
|
AVR микроконтроллер
|
1
|
XC100
|
4,0 МГц
|
CSTCC4.00MG
|
0,5%
|
MURATA/AVX
|
Керамический резонатор, SMD
|
1
|
Корпус разъема
|
9 выводов
|
D-SUB Корпус
|
0,5%
|
AMP
|
Корпус 9-ти штырькового разъема
|
1
|
Кабель
|
6 Проводов
|
Плоский кабель
|
|
HARTING
|
Плоский кабель, 300 мм
|
1
|
Плата
|
FR4/ 1,6 мм
|
A9702.3.1000.A
|
|
ATMEL
|
Печатная плата
|