Поставки электронных компонентов ведущих мировых производителей
на главнуюнаписать письмокарта сайта ENG
О Корпорации «ТОЧКА ОПОРЫ»
МОСКВА,
Балаклавский проспект, 28 Б, строение 1
(495) 956 3942  (495) 956 3943 (факс)
(800) 200 3942  (бесплатные звонки)
скайп:  fulcrum.office
контакты и схема проезда
поиск по сайту:  ИСКАТЬ
 
 

Технические статьи

Простейший начальный загрузчик для микроконтроллеров AVR®
фирмы Atmel с возможностью самостоятельного программирования
памяти команд

В этом примере мы рассмотрим драйвер  (boot loader)  для  микроконтроллеров семейства AVR  фирмы  Atmel,  обеспечивающий работу с блоком автопрограммирования  (Self-Programming),  позволяющим производить запись памяти программ «на лету» и без применения каких-либо внешних программаторов.
 

1.  Процедура установления связи

Программа начальной загрузки (загрузчик) обменивается данными с персональным компьютером (ПК) через асинхронный интерфейс RS-232.
Формат передачи:  8 бит данных,  стоп-бит – 2 интервала, без контроля четности.

Возможны 3 варианта вызова загрузчика:

I. В данной версии реализован вызов загрузчика при первой подаче питания на устройство через изменение вектора начальной загрузки.  При старте загрузчик проверяет состояние бита  PORF  и сбрасывает его, затем запускается сторожевой таймер с максимальным временем задержки, в течение которого загрузчик ожидает установления связи. 
 
Если связь не была установлена, то контроллер сбрасывается сторожевым таймером и загрузчик, не обнаружив установленный бит  PORF передает управление программе пользователя по адресу  0x0000.  Если связь была установлена, то загрузчик останавливает сторожевой таймер и продолжает свою работу. 
 
Для установления связи ПК передает подряд 16 байт  (0x80),  по ним определяется скорость передачи.  В ответ загрузчик передает подряд 3 байта:  полученный коэффициент деления асинхронного интерфейса  (первым – целая часть,  вторым – дробная)  и байт  0x0D.  Коэффициент деления, отличающийся от ближайшего целого числа больше чем на 4 - 5%, не рекомендуется для использования из-за низкой точности синхронизации  [2, стр. 180-181].
 
II. Вызовом из программы пользователя по адресу  boot_soft  с автоматическим подбором скорости передачи, как указано выше.
 
III. Вызовом из программы пользователя по адресу  boot_main_proc  с заранее настроенным асинхронным интерфейсом и указателем стека. 
В ответ загрузчик передает байт  0x0D/0x1B  (в зависимости от состояния контроллера перед началом работы загрузчика).
 

2.  Протокол обмена данными между ПК и загрузчиком

Загрузчик поддерживает минимальный набор команд, необходимый для работы со всеми ресурсами ИМС, предоставляемыми блоком «Self-Programming».

Команда ПК/ Код команды Ответ загрузчика
Холостая команда 0x0 0x0D/0x1B
Загрузка буфера страницы в количестве  count  слов 0x1,count,count(DATAl:DATAh) 0x0D/0x1B
Чтение памяти команд в количестве  count  байт 0x2,count count(DATA),0x0D/0x1B
Загрузка  SPMCR  и вызов  SPM 0x3,control 0x0D/0x1B
Загрузка  SPMCR  и вызов  LPM 0x4,control 0x0D/0x1B
Загрузка  RAMPZ  (для  mega128) 0x5,control 0x0D/0x1B
Загрузка регистровой пары с адресом  addr = a aaaa 0b xx1aaaaa,DATAl:DATAh 0x0D/0x1B
Выход 0x80 нет

После выполнения каждой команды загрузчик выдает код  0x0D.  Код  0x1B  выдается, если произошло переполнение регистра данных приемника асинхронного интерфейса.  «0» в качестве холостой команды выбран потому, что это единственные данные, которые, будучи записаны в регистр  SPMCRне вызовут несанкционированной записи.

Для адресации при загрузке буфера страницы или чтении программной памяти используется регистровая пара  ZL:ZH.  После чтения/записи каждого байта содержимое указателя  (включая бит  RAMPZ)  увеличивается на 1.

При загрузке буфера страницы контроллера  mega163  необходимо заполнять все неиспользуемые позиции кодом  0xFFтак как в противном случае содержимое этих позиций после записи будет неопределено.  У контроллера  mega128  буфер страницы автоматически заполняется кодом  0xFF  при подаче питания, после выполнения операции записи или после записи  «1»  в бит  RWWSRE.

Перед командой  «Выход»  (передача управления программе пользователя по адресу  0x0000)  необходимо исполнить команду  «Загрузка  SPMCR  и вызов  SPM»  с параметром  0x11 (кроме  mega161).
 

3.  Биты конфигурации и используемые ресурсы.

Биты конфигурации микроконтроллера должны быть установлены следующим образом:

BootRST = 0;
BootSize[1,0] = размер загрузочного блока не менее 256 байт;
BodEN = 0;
BodLEV – соответственно напряжению питания устройства.

Используемые ресурсы:

  • Регистры – R0..1R16..18XL:XHZL:ZH;
  • 16-битный таймер 1 и сторожевой таймер;
  • Бит  PORF  и флаг  Т;
  • Регистр RC-генератора  OSCCAL;
  • Асинхронный интерфейс  UART  или синхронно-асинхронный интерфейс  USART;
  • ОЗУ по адресу  0x01FD..0x01FF – стек.

По адресу  FLASHEND  рекомендуется располагать в младшем байте – версию загрузчика, в старшем – калибровочный байт RC-генератора.
 

4.  Тестирование

Проверка работы загрузчика производилась с использованием терминальной программы, работающей под управлением MS-DOS.  Связь устанавливалась c контроллером  ATmega128-16AI  на скорости  19200 бод  при тактировании от встроенного RC-генератора и напряжении питания  3.3 В  и на скорости  115200 бод  при тактировании от внешнего генератора с частотой  3.6864 МГц  и напряжении питания  5 В.  Протестированы все описанные в протоколе обмена операции загрузчика.
 

5.  Исходные коды на ассемблере

Тестовая программа содержит  «Application section»  в виде изображения бегущей строки  (бегущие «0» выводятся на порт Б) и обращение к внешнему файлу с исходным кодом загрузчика.

В составе включаемых файлов имеются 2 подпрограммы для работы с асинхронным интерфейсом (с программным опросом флагов готовности), которые могут быть использованы самостоятельно:  по адресу  boot_receive  расположена подпрограмма приема байта;  по адресу  boot_transmit  расположена подпрограмма передачи байта.
 

6.  Продолжение следует / coming soon...

(BOOT LOADER по мотивам  AVR910  и  AVR911  с поддержкой  AVRProg  и  AVRDUDE).

 

Литература:

Скачать PDF-файл [1 «ATmega128A Complete»  Doc.8151,  revision H,  updated: 02/2011
(на английском языке)
 
Скачать PDF-файл [2 «ATmega163(L)»  Doc.1142,  revision E,  updated: 02/2003  (ИМС снята с производства)
(на английском языке)

 
 
Автор:  Станислав Лещинский  aka «Точка Опоры»
ООО «МФК Точка Опоры», Москва,  www.fulcrum.ru
04.02.2002

о компании
контакты и схемы проезда
партнерство
    главная        программа поставок    поиск по складу    поддержка    услуги
новости    конференции    рассылки    запросы товаров
 
карта сайта
добавить в избранное
сделать стартовой
 © 1999–2017  FulCrum Corp.
          обратная связь: ic@fulcrum.ru Rambler's Top100 ServiceTop100