JTAG микроконтроллера ATmega32 |
![]() |
Добавил(а) microsin | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
В микроконтроллер ATmega32 встроен интерфейс JTAG (совместимый со стандартом IEEE std. 1149.1). Этот интерфейс может быть использован для тестирования схем (технология граничного сканирования JTAG Boundary-Scan), программирования внутренней памяти микроконтроллера (память программ FLASH, энергонезависимая память EEPROM, фьюзы, биты защиты) и для отладки программ. Отладчик имеет доступ к следующим внутренним ресурсам микроконтроллера: • Все периферийные устройства. Встроенная в кристалл поддержка отладки (On-chip Debug System, сокращенно OCD) включает следующее: • Инструкция AVR Break. Отладчик JTAG может программировать и считывать память RAM, FLASH и EEPROM, фьюзы управления и защиты. OCD поддерживается системами программирования AVR Studio, Atmel Studio, IAR. Примечание: цоколевка и почти все функциональные особенности ATmega32, ATmega32L и ATmega32A совпадают. Поэтому все, что здесь было сказано про ATmega32, также относится и к микроконтроллерам ATmega32L и ATmega32A (если специально не указано нечто иное). Все непонятные термины и сокращения, касающиеся интерфейса JTAG, см. в разделе Словарик, в конце статьи. У ATmega32 выводы JTAG совмещены с ножками GPIO порта C (см. таблицу и цоколевки ниже). Когда интерфейс JTAG разрешен, эти выводы не используются как порты GPIO.
TDI, бит 5 порта C. Сигнал JTAG Test Data In: последовательный вход данных, которые вдвигаются в регистр инструкций (Instruction Register, IR) или регистр данных (Data Register, DR) цепочек сканирования. TDO, бит 4 порта C. Сигнал JTAG Test Data Out: последовательный вывод данных из IR или DR. Вывод TD0 находится в третьем состоянии, пока TAP не выдвигает данные. TMS, бит 3 порта C. Сигнал JTAG Test Mode Select: этот вывод используется для навигации по дереву машины состояний автомата TAP-контроллера. TCK, бит 2 порта C. сигнал JTAG Test Clock: такты, используемые для синхронизации системы JTAG. По умолчанию интерфейс JTAG разрешен фьюзами OCDEN и JTAGEN, и в этом случае выводы JTAG PC5 (TDI), PC4 (TDO), PC3 (TMS) и PC2 (TCK) не могут использоваться как порты GPIO. Кроме того, на выводах входов JTAG PC5(TDI), PC3(TMS) и PC2(TCK) автоматически активируются верхние подтягивающие резисторы (pull-up) даже тогда, когда произошел сброс микроконтроллера. Вывод PC4 (TD0) находится в третьем состоянии кроме случая, когда автомат TAP вошел в состояние сдвига данных наружу. Широко используемая цоколевка ATmel JTAG, совместимая с Altera JTAG, AVR Dragon, JTAGICE mkII и другими JTAG-адаптерами/отладчиками.
Интерфейс JTAG на макетной плате AVR-USB-MEGA16: Если встроенная в кристалл микроконтроллера система отладки (OCD) разрешена фьюзом OCDEN (по умолчанию, в заводском состоянии этот фьюз разрешает отладку), и микроконтроллер вошел в режим Power down (выключено) или Power save sleep (режим сна для экономии энергопотребления), то основной источник тактовой частоты остается разрешенным. В этих режимах сна это приведен к значительному общему потреблению тока. Есть три способа избежать этого: • Запретить отладку фьюзом OCDEN Fuse. Вывод TDO остается в "плавающим", когда интерфейс JTAG разрешен и контроллер JTAG TAP не выдвигает данные. Если аппаратура, подключенная к выводу TDO, не делает его подтяжку к одному из логических уровней, то энергопотребление вырастет. Обратите внимание, что вывод TDI следующего устройства в цепочке обычно имеет pull-up, который решит эту проблему. Также запишите лог. 1 в бит JTD регистра MCUCSR, или оставьте бит фьюза JTAG не запрограммированным, что запретит интерфейс JTAG и снизит энергопотребление. MCU находится в состоянии сброса, пока имеется лог. 1 в регистре сброса (Reset Register) одной из цепочек сканирования системы JTAG. Подробнее см. раздел "Использование граничного сканирования (Boundary-scan)" с кратким описанием IEEE 1149.1 (JTAG) Boundary-scan. Рис 14-1. Логика сброса. Пояснения к рис. 14-1: MCU Control and Status Register регистр управления и статуса микроконтроллера (см. далее описание этого регистра). PORF, BORF, EXTRF, WDRF, JTRF биты этого регистра. Power-On Reset логика, обеспечивающая сброс при подаче питания. Brown-Out Reset логика, обеспечивающая сброс при выходе напряжения питания за допустимый нижний предел. BODEN, BODLEVEL фьюзы, управляющие логикой Brown-Out Reset. Подробнее см. описание этих фьюзов в даташите на микроконтроллер. ~RESET внешний вывод для подачи сигнала сброса (активный уровень лог. 0). SPIKE FILTER заградительный фильтр, не пропускающий короткие импульсы. JTAG Reset Register регистр JTAG, обеспечивающий сброс микроконтроллера (блок JTAG при этом не сбрасывается). COUNTER RESET сброс счетчиков таймаута. TIMEOUT сигнал истечения таймаута сторожевого таймера. INTERNAL RESET сигнал внутреннего сброса микроконтроллера. CKSEL[3:0] фьюзы, определяющие выбор источника тактирования ядра микроконтроллера. SUT[1:0] фьюзы, определяющие время запуска тактового генератора. [JTAG и регистры микроконтроллера] В этом разделе описаны регистры ATmega и их биты, влияющие на работу JTAG. Описание остальных битов этих регистров см. в даташите на микроконтроллер. Примечание: когда для доступа к этим регистрам используются команды ассемблера IN и OUT, работающие с адресным пространством I/O 0x00..0x3F, то должны использоваться адреса, указанные во врезке с описанием регистра. Когда эти же регистры адресуются через адресное пространство данных командами ассемблера LD и ST, то к этому адресу нужно добавить 0x20. OCDR – On-chip Debug Register, это регистр управляющий отладкой. Адресное смещение в пространстве адресов ввода/вывода 0x31 (адрес в пространстве данных будет 0x51).
Бит 7, IDRD/OCDR7: USART Receive Complete. Регистр OCDR предоставляет канал обмена данными между программой, запущенной в микроконтроллере, и отладчиком. CPU может передать байт в отладчик, записав его в этот регистр. В то же самое время внутренний флаг I/O Debug Register Dirty (IDRD) установится, чтобы показать отладчику, что был записан этот регистр. Когда CPU читает регистр OCDR, то младшие 7 бит будут прочитаны из регистра OCDR, в то время как старший бит будет битом IDRD. Отладчик очищает бит IDRD, когда читает эту информацию. В некоторых микроконтроллерах AVR этот регистр расположен в общем стандартном адресном пространстве ввода/вывода (I/O). В этом случае к регистру OCDR можно получить доступ только в том случае, если запрограммирован фьюз OCDEN, и отладчик разрешает доступ к регистру OCDR. Во всех других случаях осуществляется доступ к стандартной ячейке I/O. Для дополнительной информации по использованию этого регистра обратитесь к документации на отладчик. Биты 6:0, OCDRn: On-chip Debug Register n [n = 6:0]. MCUCSR – MCU Control and Status Register, регистр управления и статуса. Адресное смещение в пространстве адресов ввода/вывода 0x34 (адрес в пространстве данных будет 0x54).
Бит 7, JTD: JTAG Interface Disable. Когда в этом бите лог. 0, интерфейс JTAG разрешен, если запрограммирован фьюз JTAGEN. Если в этом бите лог. 1, то работа интерфейса JTAG запрещена. Чтобы избежать случайного запрета или разрешения интерфейса JTAG, должна соблюдаться определенная последовательность действий во времени, когда изменяется этот бит: программа приложения должна записать в этот бит нужное значение дважды в течение 4 тактов ядра, чтобы бит поменял свое значение. Если интерфейс JTAG не подключен, или оставлен подключенным к другим схемам JTAG, то бит JTD должен быть установлен в лог. 1. Причина для этого в том, что желательно перевести TDO в третье состояние, чтобы избежать появления статического тока вывода TDO в интерфейсе JTAG. Бит 4, JTRF: JTAG Reset Flag. Этот бит устанавливается, если сброс был вызван появлением лог. 1 в JTAG Reset Register, который был записан JTAG-инструкцией AVR_RESET. Этот бит сбрасывается сбросом от включения питания, или путем записи нуля в этот флаг. У микроконтроллера ATmega32A есть 2 байта фьюзов. Таблицы в этой секции кратко описывают функционал всех фьюзов, и как они отображаются на байты фьюзов. Обратите внимание, что когда фьюз читается как лог. 0, то он считается запрограммированным. Имена фьюзов, влияющих на работу JTAG, выделены в таблицах жирным шрифтом. Таблица 29-3. Старший байт фьюзов.
Примечания: 1. Фьюз SPIEN недоступен в режиме программирования через SPI (SPI Serial Programming). 2. Функция CKOPT зависит от установок битов CKSEL, подробнее см. раздел даташита "Clock Sources" (источники тактирования). 3. Значение по умолчанию для BOOTSZ1:0 соответствует максимальному размеру сектора загрузчика (Boot Size). См. таблицу "Boot Size Configuration" в секции даташита "Boot Loader Parameters". 4. Не поставляйте готовое изделие с запрограммированным фьюзом OCDEN, независимо от установки бит защиты (lock bits) и фьюза JTAGEN. Запрограммированный бит фьюзов OCDEN разрешает некоторые части системы тактирования в рабочем состоянии для некоторых режимов сна. Это может увеличить энергопотребление. 5. Если интерфейс JTAG не подключен, то по возможности фьюз JTAGEN должен быть не запрограммирован (в состоянии лог. 1, чтобы JTAG был отключен). Это позволит избежать статического тока через вывод TDO. Таблица 29-4. Младший байт фьюзов.
Примечания: 1. Значение по умолчанию SUT1:0 соответствует максимальному времени запуска генератора. Подробности см. в таблице "Start-up Times for the Internal Calibrated RC Oscillator Clock Selection" в секции "Calibrated Internal RC Oscillator" даташита. 2. Значение по умолчанию CKSEL3:0 соответствует внутреннему генератору RC, дающему тактовую частоту 1 МГц. Подробнее см. таблицу "Device Clocking Options Select" в разделе "Clock Sources" даташита. Состояние битов фьюзов не меняется при стирании чипа (Chip Erase). Обратите внимание, что биты фьюзов заблокированы, если запрограммирован бит защиты 1 (Lock bit1, LB1). Программируйте биты фьюзов перед программированием бит защиты. Значения фьюзов защелкиваются (их настройки вступают в действие), когда устройство входит в режим программирования, и изменение значений фьюзов не даст эффекта, пока устройство не покинет режим программирования. Это не относится к фьюзу EESAVE, настройка которого входит в действие сразу после программирования. Фьюзы также защелкиваются в нормальном режиме, когда происходит подача питания/включение (Power-up). [JTAG и встроенная в кристалл система отладки] Поддержка OCD основана на приватных инструкциях JTAG, и информация о них распространяется только внутри ATMEL и среди выбранных сторонних производителей оборудования и программного обеспечения. На рис. 27-1 показан интерфейс JTAG и система OCD. Машина состояний контроллера TAP управляется сигналами TCK и TMS. Контроллер TAP выбирает либо регистр инструкций JTAG (Instruction Register, IR), либо один из нескольких регистров данных (Data Registers, DR) как цепочку сканирования (регистр сдвига) между выводами TDI (вход данных) и TDO (выход данных). IR хранит инструкции JTAG, управляющие поведением DR. Регистры ID, Bypass и Boundary-scan Chain это регистры данных, используемые на уровне тестирования печатной платы. Интерфейс программирования JTAG (основанный на нескольких физических и виртуальных регистрах данных) используется для последовательного программирования через JTAG. Внутренняя цепочка сканирования (Internal Scan Chain) и цепочка сканирования точки останова (Break Point Scan Chain) используется только для OCD. TAP – Test Access Port. К интерфейсу JTAG осуществляется доступ через 4 вывода корпуса AVR. В терминологии JTAG эти выводы представляют порт доступа тестирования, Test Access Port (TAP). Вот эти выводы:
Стандарт IEEE 1149.1 также указывает возможное наличие опционального (не обязательного) сигнала сброса TAP. Это сигнал ~TRST (Test ReSeT), который не предоставляется микроконтроллером ATmega32. Когда фьюз JTAGEN не запрограммирован (это не состояние по умолчанию, которого можно достичь только с помощью программатора), эти 4 вывода TAP работают как обычные ножки GPIO, и контроллер TAP находится в состоянии сброса. Когда фьюз JTAGEN запрограммирован (это не заводское состояние по умолчанию), и бит JTD в регистре MCUCSR очищен, входные сигналы TAP подтянуты внутри микроконтроллера к лог. 1, и JTAG разрешен для программирования и запуска тестов Boundary-scan. В этом случае выход TAP (TDO) остается в отключенном (плавающем) состоянии, когда JTAG TAP-контроллер не сдвигает данные, так что он должен быть подключен либо к внешнему верхнему подтягивающему резистору (pull-up) или другой аппаратуре, где есть такой pull-up (например, это может быть вход TDI следующего устройства в цепочке сканирования). Микроконтроллер поставляется с запрограммированным фьюзом JTAGEN (работа JTAG не запрещена, это состояние фьюза по умолчанию). Для системы OCD, в дополнение к выводам интерфейса JTAG, отладчиком мониторится вывод ~RESET, чтобы можно было обнаружить сигнал сброса от внешних источников. Отладчик может также подтянуть вывод ~RESET к лог. 0, чтобы сбросить всю систему, что подразумевается использовании в схеме сигнала сброса приложения только открытых коллекторов (стоков). Рис. 27-1. Блок-диаграмма JTAG ATmega32. TAP-контроллер имеет стандартную машину с 16 состояниями, которая управляет работой схемы граничного сканирования (Boundary-scan), схемы программирования JTAG, или системой OCD. Переходы между состояниями, показанные на рис. 27-2, зависят от сигнала, присутствующего на TMS (показан сигнал, соседствующий с каждым переходом состояния) в момент нарастания уровня (положительного перепада) тактов TCK. Начальное состояние после сброса при включении питания - Test-Logic-Reset. Как определено стандартом, LSB вдвигается и выдвигается первым для всех регистров сдвига. Рис. 27-2. Стандартная схема переходов машины состояний TAP-контроллера JTAG. Если предположить, что настоящее состояние машины это Run-Test/Idle, то типичный сценарий использования интерфейса JTAG следующий: • На вход TMS подается последовательность 1, 1, 0, 0 в такт с положительными перепадами TCK, чтобы войти в состояние сдвига регистра инструкций – состояние Shift-IR. В этом состоянии вдвигаются 4 бита инструкции JTAG в регистр IR через вход TDI по положительным перепадам TCK. Вход TMS должен удерживаться в лог. 0 в течение ввода 3 LSB, чтобы машина оставалась в состоянии Shift-IR. Бит MSB инструкции вдвигается, когда происходит выход из этого состояния установкой TMS в лог. 1. Когда инструкция вдвигается через вывод TDI, захваченное состояние IR (captured IR-state) 0x01 выдвигается наружу через вывод TDO. Регистр IR выбирает определенный регистр данных DR как путь распространения данных между TDI и TDO, и управляет схемами, окружающими выбранный DR. • На вход TMS подается последовательность 1, 1, 0 для повторного входа в состояние Run-Test/Idle. Инструкция захватывается в параллельный выход из пути регистра сдвига в состояние Update-IR. Состояния Exit-IR, Pause-IR и Exit2-IR используются только для навигации по состояниям машины. • На вход TMS подается последовательность 1, 0, 0 по положительным перепадам TCK для входа в состояние сдвига регистра данных – Shift-DR. В этом состоянии происходит загрузка выбранного DR (он был выбран предыдущей инструкцией JTAG, которая была помещена в IR) со входа TDI по положительным перепадам TCK. Чтобы остаться в состоянии Shift-DR, вход TMS должен удерживаться в лог. 0 во время ввода всех бит, кроме бита MSB. MSB данных вдвигается, когда происходит выход из этого состояния установкой TMS в лог. 1. Когда в DR вдвигаются данных через вывод TDI, параллельные входы DR, захваченные в состоянии Capture-DR, выдвигаются через вывод TDO. • На вход TMS подается последовательность 1, 1, 0 для повторного входа в состояние Run-Test/Idle. Если выбранный DR захватывается на параллельный выход, то это происходит в состоянии Update-DR. Состояния Exit-DR, Pause-DR и Exit2-DR используются только для навигации по состояниям машины. Как показано на диаграмме состояний, в состояние Run-Test/Idle не нужно заходить между выбором инструкции JTAG и использованием регистров данных, и некоторые инструкции JTAG могут выбирать определенные функции, выполняемые в состоянии Run-Test/Idle, делая его недоступным для использования как состояние ожидания (Idle state). Примечание: независимо от начального состояния TAP-контроллера, в состояние Test-Logic-Reset можно всегда войти, удерживая TMS в лог. 1 на 5 тактовых периодов TCK. Подробную информацию по спецификации JTAG можно получить из литературы, перечисленной в разделе Библиография. [Библиография] • IEEE: IEEE Std 1149.1-1990. IEEE Standard Test Access Port and Boundary-scan Architecture, IEEE, 1993. [Использование граничного сканирования (Boundary-scan)] Основные возможности: • Интерфейс JTAG, совместимый со стандартом IEEE std. 1149.1 Compliant. Обзор системы. Цепочка граничного сканирования (Boundary-scan Chain) позволяет управлять логическими уровнями на выходах и анализировать входные логические уровни на цифровых портах ввода/вывода (CPIO), а также на границе между цифровой и аналоговой логики для аналоговой части схемы, подключенной к чипу микроконтроллера снаружи. На уровне системы все микросхемы, у которых есть функции JTAG, последовательно соединяются через сигналы TDI/TDO, формируя таким способом длинный регистр сдвига. Внешний контроллер (мастер шины JTAG) настраивает устройства управления уровнями на их выходах и для отслеживания уровней на их входах. Мастер-контроллер сравнивает принятые данные с ожидаемым результатом. Таким образом, технология граничного сканирования предоставляет механизм для тестирования внутренних соединений на печатной плате между различными узлами схемы, используются только 4 сигнала TAP. Стандарт IEEE 1149.1 определяет 4 обязательные инструкции JTAG: IDCODE, BYPASS, SAMPLE/PRELOAD и EXTEST. Для ATmega32 также определены публичная, специфичная для AVR, инструкция AVR_RESET. Эти 5 инструкций могут использоваться для тестирования печатной платы системы. Начальное сканирование регистра данных покажет идентификатор устройства (ID-code), поскольку IDCODE является инструкцией JTAG по умолчанию. Может быть желательным иметь во время тестирования AVR в состоянии сброса. Если AVR не в состоянии сброса, то входы устройства можно опросить операциями сканирования, и внутреннее программное обеспечение может быть в неопределенном состоянии, когда произошел выход из режима тестирования. После сброса выходы ножек портов немедленно окажутся в состоянии высокого сопротивления, делая инструкцию HIGHZ избыточной. Если необходимо, может быть выдана инструкция BYPASS, что предоставляет самый короткий путь для данных, которые проходят через устройство. Устройство можно установить в состояние сброса либо путем подтягивания внешней ножки ~RESET к уровню лог. 0, либо выдачей инструкции AVR_RESET с подходящей установкой регистра данных сброса (Reset Data Register). Инструкция EXTEST используется для выборки уровней внешних выводов (чтение) и загрузки выходных выводов данными (запись). Данные с выходной защелки будут передаваться на выводы, как только инструкция EXTEST окажется загруженной в регистр IR JTAG. Таким образом, должна также использоваться инструкция SAMPLE/PRELOAD для установки начальных значений в цепочку кольца сканирования, чтобы избежать повреждения платы, когда инструкция EXTEST выдается первый раз. Инструкция SAMPLE/PRELOAD также может использоваться для получения снимка состояния внешних выводов во время нормальной работы тестируемой микросхемы. Должен быть запрограммирован фьюз JTAGEN, и очищен бит JTD в регистре MCUCSR, чтобы разрешить работу JTAG TAP. Когда для граничного сканирования используется интерфейс JTAG, возможно использование тактовой частоты JTAG TCK выше, чем внутренняя тактовая частота чипа. Для работы тестов частота чипа не требуется. [Регистры данных] К операциям граничного сканирования относятся следующие регистры: • Bypass Register (регистр пропуска данных). Bypass Register. Этот регистр состоит из одной стадии регистра сдвига. Когда выбран Bypass Register между TDI и TDO, этот регистр сбрасывается в 0, когда покидает состояние Capture-DR контроллера TAP. Bypass Register может использоваться для сокращения цепочки сканирования в системе, когда тестируются другие устройства печатной платы/системы. Device Identification Register. Рисунок ниже показывает структуру регистра идентификации.
Рис. 27-3. Формат Device Identification Register. Version. Регистр Version это 4-битное число, идентифицирующее ревизию этого компонента. Номер версии JTAG следует за номером ревизии устройства, и повторяется в ревизии P (0xF). Ревизии A и Q равны 0x0, ревизии B и R равны 0x1, и так далее. Part Number. Номер типа компонента это 16-битный код, идентифицирующий тип электронного компонента (в данном случае модель ATmega32A, ATmega32L и т. п.). Номера некоторых типов микроконтроллеров ATmega перечислены в таблице 27-1. Таблица 27-1. AVR JTAG Part Number. 0x9502
Примечание: ATmega32, ATmega32A и ATmega32L отличаются в регистре идентификации только по номеру версии Version. Manufacturer ID. Идентификатор производителя это 11-битный код, который указывает на производителя микросхемы. JTAG manufacturer ID компании ATMEL и других производителей показаны в таблице ниже. Таблица 27-2. Manufacturer ID.
Reset Register. Регистр сброса относится к регистрам данных тестирования (Test Data Register), используемый для сброса устройства. Поскольку AVR переводит при сбросе свои выводы портов в третье состояние, то Reset Register также может заменить функцию не реализованной опциональной JTAG-инструкции HIGHZ. Лог. 1 в регистре сброса соответствует подтяжке внешнего вывода сброса (~RESET) к уровню лог. 0. Сброс устройства продолжается, пока присутствует лог. 1 в Reset Register. В зависимости от настроек фьюзов для опций тактирования, после освобождения регистра сброса (после появления в нем лог. 0) микроконтроллер останется в состоянии сброса еще на период таймаута сброса (Reset Time-Out Period, см. раздел даташита "Clock Sources", посвященных источникам тактирования). Вывод из регистра данных DR не захватывается, так что сброс войдет в силу немедленно, как показано на рисунке ниже. Рис. 27-4. Reset Register. Boundary-scan Chain. Цепочка граничного сканирования (Boundary-scan Chain) имеет возможность управления выходными логическими уровнями и отслеживание уровней на цифровых выводах GPIO, как и уровнями на границе между цифровой и аналоговой логики для аналоговых схем, подключенных к микроконтроллеру снаружи. Подробное описание см. в главе "Boundary-scan Chain". [JTAG-инструкции, относящиеся к Boundry-scan] Регистр инструкций (Instruction Register, IR) имеет длину 4-бита, что дает поддержку 16 инструкций. Перечисленные ниже инструкции JTAG полезны для функционирования технологии Boundary-scan. Обратите внимание, что опциональная инструкция HIGHZ не реализована, однако все выходы могут быть переведены в третье состояние с помощью инструкции AVR_RESET, поскольку начальное состояние всех выводов портов отключенное. LSB вдвигается и выдвигается первым для всех регистров сдвига. OPCODE (двоичный код) для для каждой инструкции показан в круглых скобках рядом с именем инструкции в шестнадцатеричном формате. Текст с описанием показывает, какой регистр данных будет выбран как путь данных между TDI и TDO для каждой инструкции. EXTEST (0x0). Эта обязательная инструкция JTAG, применяемая для выбора цепочки Boundary-scan как регистра данных DR для тестирования схем, находящихся снаружи по отношению к корпусу AVR. Для каждого вывода порта, запрета верхних подтягивающих резисторов (Pull-up Disable), управления выходом, выходных данных и входных данных имеется доступный разряд в цепочке сканирования. Таким образом, цепочка получается довольно длинной (см. таблицу 27-7). Для аналоговых схем, подключенных к чипу снаружи, есть интерфейс между аналоговой и цифровой логикой в цепочке сканирования. Содержимое захваченных выходов цепочки граничного сканирования будут переданы наружу, как только в IR-регистр JTAG окажется загруженной инструкция EXTEST. Активные состояния инструкции: • Capture-DR: данные внешних выводов захватываются в цепочку Boundary-scan. IDCODE (0x1). Опциональная инструкция JTAG выбирает 32-битный регистр идентификации (ID Register) как регистр данных (DR). ID Register содержит номер версии, номер устройства (его тип) и код производителя, присвоенный организацией JEDEC. После включения питания эта инструкция находится в IR по умолчанию. Активные состояния инструкции: • Capture-DR: данные в регистре IDCODE выбираются в цепочку Boundary-scan. SAMPLE_PRELOAD (0x2). Обязательная инструкция JTAG для предварительной загрузки выходных защелок и получения снимка входных и выходных выводов без влияния на работу системы. Однако выходные защелки не подключены к этим выводам. Цепочка Boundary-scan выбирается как DR. Активные состояния инструкции: • Capture-DR: данные на внешних выводах выбираются в цепочку Boundary-scan. AVR_RESET (0xC). Публичная JTAG-инструкция, относящаяся к специфике AVR, предназначенная для принудительного перевода AVR в режим сброса, или вывода его из режим сброса. TAP-контроллер не сбрасывается этой инструкцией. Этот одноразрядный регистр сброса выбирается как DR. Обратите внимание, что сброс активен, пока находится лог. 1 в цепочке сканирования, когда активна инструкция сброса. Вывод из этой цепочки не захватывается. Активные состояния инструкции: • Shift-DR: Reset Register сдвигается по сигналу тактов TCK. BYPASS (0xF). Обязательная инструкция JTAG, выбирающая в качестве DR регистра пропуска данных (Bypass Register). Активные состояния инструкции: • Capture-DR: загружает лог. 0 в Bypass Register. [Boundary-scan Chain] Цепочка граничного сканирования (Boundary-scan) дает возможность управлять логическими уровнями выходов и отслеживать логические уровни цифровых портов ввода/вывода, а также на границе между цифровой и аналоговой схемой, подключаемой к чипу снаружи. Сканирование цифровых выводов портов. Первый рисунок ниже показывает ячейку граничного сканирования (Boundary-scan Cell) для ножки двунаправленного порта GPIO с функцией подключаемого верхнего подтягивающего резистора (pull-up). Эта ячейка состоит из стандартной ячейки Boundary-scan для функции Pull-up Enable (PUExn), и из ячейки двунаправленного вывода, которая комбинирует в себе 3 сигнала: Output Control (OCxn), Output Data (ODxn) и Input Data (IDxn), в регистр сдвига только из двух стадий (разрядов). Индексы порта и вывода в следующем описании не используются. Логика Boundary-scan не включена в рисунках из даташита. Рис. 27-6 показывает простую ножку цифрового порта, как она описана в секции "I/O Ports". Подробности Boundary-scan из первого рисунка (27-5) заменяют блок, обозначенный пунктиром, из нижнего рисунка (27-6). Когда альтернативная функция порта не представлена, входные данные (Input Data, ID) соответствуют значению регистра PINxn (но ID не имеет синхронизатора), выходные данные (Output Data) соответствуют регистру PORT, управление выходом (Output Control) соответствует регистру направления данных (Data Direction Register, DDR), и разрешение подтягивающего резистора (Pull-up Enable, PUExn) соответствует логическому выражению PUD · DDxn · PORTxn. Цифровые альтернативные функции порта, подключенные вне области, ограниченной штриховой линией на рис. 27-6, делают возможным чтение актуального значения уровня логики на выводе чипа. Для аналоговой функции здесь есть прямое подключение от внешнего вывода до аналоговой схемы, и цепочка сканирования вставляется в интерфейс между цифровой логикой и аналоговой схемой. Рис. 27-5. Ячейка граничного сканирования (Boundary-scan Cell) для двунаправленного вывода порта с функцией подключаемого верхнего подтягивающего резистора (Pull-Up). Рис. 27-6. Общая схема вывода порта. См. также раздел "I/O Ports" в даташите на микроконтроллер. У ATmega32, как и у многих AVR, есть популярный двухпроводный интерфейс I2C (по терминологии Atmel он называется TWI, сокращение от Two-wire Interface), реализованный аппаратно. Его выводы SCL и SDA имеют один дополнительный управляющий сигнал в цепочке сканирования, разрешающий работу интерфейса - Twowire Interface Enable (TWIEN). Как показано на рисунке ниже, TWIEN разрешает работу буфера с тремя состояниями, снабженный функцией управления скоростью переключения (slew-rate control), параллельно с обычными цифровыми выводами порта (GPIO). Основная ячейка сканирования, как показано на рис. 27-11, подключена к сигналу TWIEN. Рис. 27-7. Дополнительный сигнал сканирования для TWI/I2C. Примечания: 1. Не предоставлена отдельная цепочка сканирования для 50-наносекундного фильтра коротких помех на входе (spike filter). Обычная поддержка сканирования для цифровых выводов порта достаточна для проверки соединений в схеме. Единственная причина наличия TWIEN в цепочке сканирования - иметь возможность отключить буфер управления скоростью переключения (slew-rate control buffer), когда выполняется тестирование схемы по технологии граничного сканирования. 2. Убедитесь, что сигналы OC и TWIEN не выставлены одновременно, так как это приведет к конфликту выходов. Вывод сброса ~RESET микроконтроллера принимает на входе 5V, и у него активный для сброса уровень лог. 0. Также на этом выводе присутствует логика определения уровня 12V, предназначенная для режима высоковольтного параллельного программирования (High Voltage Parallel programming, HVPP). Сигнал 5V сброса называется RSTT, и сигнал 12V сброса называется RSTHV. Для обоих этих сигналов предоставлена ячейка, показанная на рисунке ниже, предназначенная только для считывания (Observe-only Cell). Рис. 27-8. Ячейка сканирования, предназначенная только для обзора сигнала. Микроконтроллеры AVR имеют множество опций тактирования, выбираемых фьюзами: внутренний RC-генератор (Internal RC Oscillator, используется довольно часто), внешний RC-генератор (External RC, используется редко), подача внешнего тактового сигнала (External Clock), высокочастотный кварцевый генератор (High Frequency Crystal Oscillator, используется чаще всего), низкочастотный кварцевый генератор (Low-frequency Crystal Oscillator) и генератор на керамическом резонаторе (Ceramic Resonator). На рисунке ниже показано, как каждый генератор с внешними соединениями (использующий внешние выводы микроконтроллера) поддерживается в цепочке сканирования. Сигнал разрешения (Enable) поддерживается обычной ячейкой граничного сканирования, в то время как выход генератора/тактов подключен к ячейке, предназначенной только для считывания (такой, как показана на рис. 27-8). В дополнение к основному тактовому сигналу (который используется для тактирования MCU и периферийных устройств микроконтроллера), генератор таймера (Timer Oscillator, дополнительный генератор, используемый для RTC) сканируется таким же способом. Выход внутреннего RC-генератора не сканируется, потому что у этого генератора нет внешних выводов на корпусе микроконтроллера. Рис. 27-9. Ячейки Boundary-scan для генераторов и опций тактирования. В следующая таблица суммирует информацию по регистрам сканирования для внешнего тактового сигнала XTAL1, генераторов с соединениями XTAL1/XTAL2, как и для генератора таймера на 32768 Гц. Таблица 27-3. Сигналы сканирования для генераторов(1)(2)(3).
Примечания: (1). Не разрешайте одновременно больше одного источника тактового сигнала. (2). Сканирование выходов генератора даст неопределенные логические уровни, потому что тактовая частота внутреннего генератора не синхронна с тактовой частотой JTAG. Если это возможно, предпочтительнее сканировать внешний сигнал тактов (когда он работает на частоте, на порядок ниже частоты TCK). (3). Конфигурация тактирования задается программированием фьюзов. Поскольку фьюзы нельзя поменять во время работы программы (run-time), то считается, что опции тактирования фиксированы для имеющегося приложения. Советуем проводить сканирование с такими же опциями тактирования, как будут использоваться в конечной рабочей системе. Сигналы разрешения поддерживаются в цепочке сканирования, потому что системная логика может запретить опции тактирования в режимах сна (sleep mode), так что отключает выводы генератора от цепочки сканирования. Фьюзы INTCAP не поддерживаются в цепочке сканирования, так что цепочка сканирования не может предоставить для генератора XTAL требуемые внутренние конденсаторы для его запуска, если фьюзы запрограммированы не корректно. Сигналы компаратора, относящиеся к граничному сканированию, показаны на рисунке 27-10. Ячейка граничного сканирования, показанная на рис. 27-11, подключена к каждому из этих сигналов. Сигналы описаны в таблице 27-4. Компаратор не требуется для действительной проверки соединений в схеме, потому что его аналоговые входы совмещены с обычными цифровыми портами GPIO. Рис. 27-10. Аналоговый компаратор. Рис. 27-11. Основная ячейка сканирования, используемая для сигналов компаратора и АЦП. Таблица 27-4. Сигналы граничного сканирования для аналогового компаратора.
На рис. ниже показана блок-схема АЦП со всеми соответствующими сигналами управления и анализа состояния. Ячейка граничного сканирования, показанная на рис. 27-8, подключена к каждому из этих сигналов. ADC не нужно использовать для полного теста соединений, поскольку аналоговые входы совмещены с выводами цифровых портов (GPIO). Рис. 27-12. Аналого-цифровой преобразователь. Примечание: неправильная установка ключей, показанных на рис. 27-12, приведут к соединению сигналов, которые могут повредить микроконтроллер. Есть несколько выборов входов схемы выборки/хранения на инверсном входе выходного компаратора на рис. 27-12. Убедитесь, что выбран только один путь - либо вывода ADC, либо источник опорного напряжения, либо общий провод. Эти сигналы кратко описаны в следующей таблице. Таблица 27-5. Сигналы граничного сканирования для ADC (АЦП).
Если ADC не используется в сканировании, то рекомендуются входные значения из таблицы, приведенной выше. Во время сканирования не рекомендуется использовать каскады дифференциального усиления АЦП. Каскады усиления, основанные на переключаемых конденсатора, требуют быстрого функционирования и аккуратного выдерживания интервалов времени, что сложно обеспечить в цепочке сканирования. Таким образом, не предоставляется подробная информация по поводу операций с каскадом дифференциального усиления. AVR ADC основан на аналоговой схеме, показанной на рис. 27-12, которая работает по алгоритму последовательного приближения, реализованному в цифровой логике. Когда это используется в граничном сканировании, есть проблема в том, что нужно гарантировать наличие приложенного аналогового напряжения, измеряемого в некоторых пределах. Это можно проще осуществить без запуска алгоритма последовательной аппроксимации: подайте нижний предел на цифровые линии DAC[9:0], убедитесь, что выход компаратора в лог. 0, затем подайте верхний предел на DAC[9:0], и проверьте, что на выходе компаратора лог. 1. ADC не требует полного тестирования на соединения, поскольку аналоговые входы также совмещены с цифровыми портами GPIO. Когда используете ADC, помните о следующем: • Вывод порта канала ADC при использовании должен быть сконфигурирован как вход, с отключенным резистором pull-up - чтобы не конфликтовать с уровнем сигнала на входе коммутатора АЦП. В качестве примера рассмотрим задачу проверки 1.5V ±5% входного сигнала на канале 3 ADC, когда напряжение питания VCC равно 5.0V и AREF подключено к VCC снаружи чипа микроконтроллера. Нижний предел: 1024 • 1.5V • 0.95/5V = 291 = 0x123 Рекомендуемые значения из таблицы 27-5 используются за исключением тех случаев, когда используются другие значения в алгоритме из следующей таблицы. Показаны только значения DAC и выводов порта в цепочке сканирования (Scan Chain). Столбец "Actions" описывает инструкцию JTAG, которая используется перед заполнением регистра Boundary-scan в последующих столбцах. Проверка должна быть выполнена по данным, выведенным из чипа при сканировании, эти данные указаны в той же строке этой таблицы. Таблица 27-6. Алгоритм использования ADC.
При использовании этого алгоритма ограничения по интервалам времени сигнала HOLD накладывают ограничения на тактовую частоту TCK. Поскольку алгоритм удерживает HOLD в лог. 1 для 5 шагов, то частота TCK должна быть как минимум в 5 раз больше чем количество битов сканирования, поделенное на максимальное время удержания thold,max. [Порядок работы граничного сканирования ATmega32] В таблице ниже показан порядок сканирования между TDI и TDO, когда как путь прохождения данных между ними выбрана цепочка граничного сканирования (Boundary-scan Chain). Бит 0 будет самым младшим (LSB); это первый бит, введенный при сканировании, и первый выведенный бит. Порядок сканирования следует порядку выводов, пока это возможно. Таким образом, биты порта A (PAx) сканируются в обратном порядке в сравнении с другими портами (PB, PC, PD). Исключениями из правил будут цепочки сканирования аналоговых схем, которые представляют самые значащие старшие биты цепочки сканирования, независимо от того, к какому физическому выводу корпуса чипа они подключены. На рис. 27-5, PXn. Data соответствует выводу FF0, PXn. Управление соответствует FF1 и PXn. Pullup_enable соответствует FF2. Биты 2, 3, 4 и 5 Port C не находятся в цепочке сканирования, поскольку эти выводы задействованы под подключение TAP, когда разрешен интерфейс JTAG. Таблица 27-7. Порядок сканирования ATmega32A.
Примечания: (1). PRIVATE_SIGNAL1 всегда сканируется как 0. [Файлы описания граничного сканирования BDSL] Файлы с описанием на языке Boundary-scan Description Language (BSDL) описывают устройства, поддерживающие граничное сканирование, в стандартном формате, используемом программным обеспечением автоматической генерации тестов. Порядок и функция бит в регистре данных Boundary-scan включены в это описание. [Использование OCD] Как показано на рис. 27-1, аппаратура поддерживающая отладку (OCD), главным образом состоит из: • Цепочка сканирования на интерфейсе между внутренним CPU микроконтроллера AVR и внутренними периферийными устройствами. Все операции чтения (read) или модификация/запись (modify/write) нужные для реализации отладчика, реализованы выдачей инструкций AVR через внутреннюю цепочку сканирования CPU AVR. CPU посылает результат в ячейку, отображенную на память I/O, которая является частью коммуникационного интерфейса между CPU и системой JTAG. Блок точки останова реализует точку останова по изменению потока вычислений (Break on Change of Program Flow), одиночная точка останова на выполнение одной инструкции (Single Step Break), две точки останова на памяти программ (Program Memory Break) и две комбинированные точки останова. Всего 4 точки останова могут быть сконфигурированы в одном из вариантов: • 4 одиночные точки останова на памяти программ. Однако система отладки, наподобие Atmel Studio®, может использовать одну или большее количество этих ресурсов для своих внутренних целей, оставляя меньше возможностей конечному пользователю. Фьюз JTAGEN должен быть запрограммирован, чтобы разрешить работу JTAG TAP. Чтобы могла работать система OCD, дополнительно должен быть запрограммирован фьюз OCDEN, и не должны быть запрограммированы биты защиты (Lock bits). Как возможность защиты программного обеспечения, система OCD запрещается, если установлены биты защиты. Иначе система отладки предоставляет бэкдор в устройство, позволяя проводить несанкционированное копирование и обратную разработку программного обеспечения. Интегрированная система разработки и отладки (IDE) Atmel Studio позволяет пользователю полный контроль за выполнением программ на устройстве AVR, на котором есть функция отладки (OCD), и когда к нему подключен внутрисхемный эмулятор (AVR In-Circuit Emulator). Также возможно выполнение программы пользователя в симуляторе процессора AVR (AVR Instruction Set Simulator). Atmel Studio поддерживает выполнение кода по листингу ассемблера, который был скомпилирован с помощью AVR Assembler компании Atmel, и по исходному коду на языке C, который был скомпилирован компиляторами сторонних производителей (из коробки в системе Atmel Studio используется форк бесплатного AVR GCC). В этом описании дана только общая информация о системе Atmel Studio, касающаяся OCD. Более подробное описание Atmel Studio см. в специальном руководстве (Atmel Studio User Guide), которое доступна как система онлайн-помощи. Все выполняемые команды видны в листинге отладки Atmel Studio, как на уровне листинга исходного кода, так и в дизассемблированном виде. Пользователь может выполнить программу в реальном времени, выполнять одиночные шаги по коду, либо трассировать выполнения до нужного места в программе, выполнять трассировку выполнения с заходом в тело функции и без захода в функцию, выполнять код до выхода из функции, устанавливать курсор на нужный оператор кода и запускать выполнение до указанного курсором места, в любой момент останавливать выполнение и сбрасывать процессор. Дополнительно пользователь может установить неограниченное количество точек останова по коду (которые работают с использованием инструкции BREAK) и до двух точек останова на памяти данных, которые можно альтернативно комбинировать с маской (диапазоном) точки останова. Поддержка отладки основана на частных инструкциях JTAG, описание которых распространяется только внутри самой ATMEL и между специально выбранных сторонних производителей систем отладки. Вот эти приватные инструкции, предназначенные для доступа к системе OCD:
Имеется всего 16 адресуемых регистров. После IR следующий DRSHIFT будет флагом RW (1 означает запись) + 4 бита адреса. Эти данные в инструкции 21 бита (5+16). Имейте в виду, что операция чтения адреса OCD должна быть предварительно захвачена. Register 0 PSB0 Register 8 Break Control Register (BCR)
Примечание *: когда установлены D7, D4, D3, то PDSB разрешен Program Break. Register 9 - Break Status Register (BSR)
Register C - OCDR Readback
Register D - Control and Status Register
[Программирование через JTAG] Программирование осуществляется через те же самые 4 вывода JTAG: TCK, TMS, TDI и TDO. Только эти выводы нужны для управления/отслеживания процесса программирования через JTAG (в дополнение к выводам питания). Не требуется подавать внешнее напряжение 12V, не требуется управление сбросом и выводами тактирования (XTAL1, XTAL2). Фьюз JTAGEN должен быть запрограммирован (микроконтроллер поставляется с завода с запрограммированным битом JTAGEN), и бит JTD регистра MCUCSR должен быть очищен, чтобы был разрешен доступ к порту TAP JTAG. Альтернативно, если бит JTD установлен, он может быть сброшен подачей внешнего сброса, тогда JTD очистится через 2 такта чипа, и выводы JTAG станут доступны для программирования. Это подразумевает, что выводы JTAG используются как обычные порты GPIO в рабочем режиме, но все еще можно воспользоваться ими для внутрисистемного программирования через JTAG. Обратите внимание, что эта техника, использующая внешний сброс для очистки JTD, не может использоваться для разрешения работы JTAG в режиме граничного сканирования (Boundary-scan) или в режиме отладки OCD). В этих случаях выводы JTAG должны быть выделены специально, и не могут использоваться как порты GPIO. Программирование через JTAG предоставляет следующие возможности: • Программирование и проверка FLASH (память программ). Примечание: биты защиты действуют одинаково и в режиме параллельного программирования. Если биты защиты LB1 или LB2 запрограммированы, то бит OCDEN не может быть запрограммирован, кроме как через выполнение стирания чипа. Эта функция безопасности гарантирует, что не будет действовать бэкдор JTAG/ISP, позволяющий чтение всего содержимого запрограммированного устройства. В последовательности данных младший бит (LSB) вдвигается и выдвигается первым. Инструкции JTAG, относящиеся к программированию. Регистр инструкций (IR) имеет длину 4 бита, что дает поддержку до 16 инструкций. Ниже рассмотрены все эти инструкции. Код операции для каждой инструкции (OPCODE) в шестнадцатеричном формате показан рядом с именем инструкции. Сопутствующий текст описывает для каждой инструкции, какой регистр данных выбирается как путь между TDI и TDO. Состояние Run-Test/Idle контроллера TAP используется для генерации внутренних тактов. Оно также может использоваться как состояние ожидания между последовательностями операций JTAG. Ниже показана последовательность изменения машины состояний для смены слова инструкции. Рис. 29-12. Последовательность машины состояний для изменения слова инструкции (Instruction Word, IW). AVR_RESET (0xC). Публичная, относящаяся к AVR инструкция JTAG для перевода AVR в режим сброса, или вывода AVR из режима сброса. TAP-контроллер не сбрасывается этой инструкцией. Один бит регистра сброса (Reset Register) выбирается как регистр данных. Обратите внимание, что сброс будет активным, пока в цепочке сканирования сброса присутствует лог. 1. Вывод из этой цепочки не захватывается. Активные состояния инструкции: • Shift-DR: Reset Register сдвигается по тактам на выводе входе TCK. PROG_ENABLE (0x4). Публичная, относящаяся к AVR инструкция JTAG для разрешения программирования через порт JTAG. В качестве регистра данных выбирается 16-битный регистр разрешения программирования (Programming Enable Register). Активные состояния инструкции: • Shift-DR: сигнатура разрешения программирования вдвигается в регистр данных. PROG_COMMANDS (0x5). Публичная, относящаяся к AVR инструкция JTAG для ввода команд программирования через порт JTAG. Как регистр данных выбирается 15-битный регистр команд программирования (Programming Command Register). Активные состояния инструкции: • Capture-DR: результат предыдущей команды загружается в регистр данных. PROG_PAGELOAD (0x6). Публичная, относящаяся к AVR инструкция JTAG для прямой загрузки страницы данных FLASH через порт JTAG. Как регистр данных выбирается 1024-битный виртуальный регистр загрузки страницы FLASH (Virtual Flash Page Load Register). Это виртуальная цепочка сканирования, длина которой в битах равна количеству бит одной страницы памяти FLASH. Внутренний регистр сдвига имеет разрядность 8 бит. В отличие от большинства инструкций JTAG, состояние Update-DR не используется для передачи данных из регистра сдвига. Эти данные автоматически передаются байт за байтом в буфер страницы FLASH в состоянии Shift-DR внутренней машины состояний. Имеется только одно активное состояние: • Shift-DR: данные страницы FLASH вдвигаются через TDI по тактам на входе TCK, и автоматически загружаются в страницу в страницу FLASH байт за байтом. Примечание: инструкция PROG_PAGELOAD может использоваться только если устройство AVR находится первым в цепочке сканирования JTAG. Если AVR не первый в цепочке сканирования, то должен использоваться побайтный алгоритм программирования. PROG_PAGEREAD (0x7). Публичная, относящаяся к AVR инструкция JTAG для чтения данных всей страницы FLASH. В качестве регистра данных используется 1032-битный виртуальный регистр чтения страницы FLASH (Virtual Flash Page Read Register). Это виртуальная цепочка сканирования, длина которой равна количеству бит страницы FLASH плюс 8. Внутренний регистр сдвига имеет разрядность 8 бит. В отличие от большинства инструкций JTAG, состояние Capture-DR не используется для передачи данных в регистр сдвига. Данные автоматически передаются из буфера страницы FLASH байт за байтом в состоянии Shift-DR внутренней машины состояний. Имеется только одно активное состояние: • Shift-DR: данные FLASH автоматически считываются по одному байту и выдвигаются через TDO по тактам на входе TCK. Уровень на входе TDI игнорируется. Примечание: инструкция PROG_PAGEREAD может использоваться только если устройство AVR находится первым в цепочке сканирования JTAG. Если AVR не первый в цепочке сканирования, то должен использоваться побайтный алгоритм программирования. Регистры данных. Эти регистры данных выбираются инструкциями JTAG, описанными в предыдущей секции. Следующие регистры данных относятся к операциям программирования: • Reset Register (регистр сброса). Reset Register. Это регистр данных для тестирования (Test Data Register), используемый для сброса устройства во время программирования. Это требуется для сброса устройства перед входом в режим программирования. Лог. 1 в регистре сброса соответствует подтяжке внешнего вывода ~RESET к лог. 0, что соответствует аппаратному сбросу микроконтроллера. Устройство находится в состоянии сброса, пока лог. 1 находится в регистре сброса (этот регистр имеет размер 1 бит). В зависимости от настроек фьюзов для опций тактирования, устройство будет оставаться в состоянии сброса на время таймаута (Reset Time-Out Period, см. раздел "Clock Sources" даташита) после того, как регистр сброса будет освобожден (в нем появится лог. 0). Вывод из регистра данных не захватывается, так что сброс произойдет немедленно. Programming Enable Register. Это 16-битный регистр, содержимое которого сравнивается с двоичным кодом 1010_0011_0111_0000. Если содержимое записанной в этот регистр сигнатуры совпадает с этим кодом, то программирование через JTAG разрешается. Этот регистр сбрасывается в 0 после сброса при включении питания (Power-on Reset), и этот регистр всегда должен быть сброшен при выходе из режима программирования. Рис. 29-13. Programming Enable Register. Programming Command Register. Это 15-битный регистр, используемый для вдвигания в него команд программирования, и последовательного вывода результата предыдущей команды, если он имеется. Набор инструкций программирования JTAG показан в таблице 29-17. Последовательность машины состояний при вдвигании команд иллюстрирован на рис. 29-15. Рис. 29-14. Programming Command Register. Таблица 29-17. JTAG Programming Instruction Set. Здесь: a = адрес старших бит, b = адрес младших бит, H = 0 - младший байт, 1 - старший байт, o = выход данных, i = вход данных, x = не имеет значения.
Примечания: (1). Эта последовательность команд не требуется, если 7 старших бит были корректно установлены последовательностью предыдущей команды (что является нормальным случаем). Рис. 29-15. Смена состояний машины для изменения/чтения слова данных. Virtual Flash Page Load Register. Это виртуальная цепочка сканирования, у которой длина равна количеству бит на странице памяти FLASH. Размер внутреннего регистра сдвига равен 8 битам, и данные автоматически передаются байт за байтом в буфер страницы FLASH. Последовательный ввод всех слов инструкций на страницу начинается с LSB первой инструкции на этой странице и заканчивается MSB последней инструкции на этой странице. Это предоставляет эффективный способ загрузки страницы FLASH целиком перед выполнении записи страницы (Page Write). Рис. 29-16. Virtual Flash Page Load Register. Virtual Flash Page Read Register. Это виртуальная цепочка сканирования, у которой длина равна количеству бит на странице памяти FLASH + 8. Размер внутреннего регистра сдвига равен 8 битам, и данные автоматически передаются байт за байтом из страницы FLASH. Первые 8 тактов используются для передачи первого байта во внутренний регистр сдвига, и биты, которые выдвигаются наружу во время этих первых 8 тактов, должны быть игнорированы. Вслед за этой инициализацией данные выдвигаются наружу начиная с LSB первой инструкции на этой странице и заканчивая MSB последней инструкции на этой странице. Это предоставляет эффективный способ чтения страницы FLASH целиком для проверки процедуры программирования. Рис. 29-17. Virtual Flash Page Read Register. Алгоритм программирования. Все ссылки ниже типа "1a", "1b" и так далее, относятся к таблице 29-17. Интервалы времени см. таблице 29-13 врезки "Характеристики параллельного программирования". Вход в режим программирования: 1. Введите JTAG-инструкцию AVR_RESET, и вдвиньте 1 в Reset Register. Выход из режима программирования: 1. Введите JTAG-инструкцию PROG_COMMANDS. Выполнение стирания чипа (Chip Erase): 1. Введите JTAG-инструкцию PROG_COMMANDS. Программирование памяти FLASH. Перед программированием FLASH должна быть выполнена операция Chip Erase. 1. Введите JTAG-инструкцию PROG_COMMANDS. Более эффективную передачу данных можно реализовать с инструкцией PROG_PAGELOAD: 1. Введите JTAG-инструкцию PROG_COMMANDS. Чтение FLASH: 1. Введите JTAG-инструкцию PROG_COMMANDS. Более эффективную передачу данных можно реализовать с инструкцией PROG_PAGEREAD: 1. Введите JTAG-инструкцию PROG_COMMANDS. Программирование EEPROM. Перед программированием EEPROM необходимо выполнить Chip Erase. 1. Введите JTAG-инструкцию PROG_COMMANDS. Обратите внимание, что для программирования EEPROM нельзя использовать инструкцию PROG_PAGELOAD. Чтение EEPROM: 1. Введите JTAG-инструкцию PROG_COMMANDS. Обратите внимание, что для чтения EEPROM нельзя использовать инструкцию PROG_PAGEREAD. Программирование фьюзов: 1. Введите JTAG-инструкцию PROG_COMMANDS. Программирование битов защиты: 1. Введите JTAG-инструкцию PROG_COMMANDS. Чтение фьюзов и битов защиты: 1. Введите JTAG-инструкцию PROG_COMMANDS. Чтение байт сигнатуры: 1. Введите JTAG-инструкцию PROG_COMMANDS. Чтение байта калибровки: 1. Введите JTAG-инструкцию PROG_COMMANDS. Рис. 29-7. Интервалы времени параллельного программирования, включая некоторые основные требования к интервалам времени. Рис. 29-8. Интервалы времени параллельного программирования, последовательность загрузки с требованиями времени(1). Примечание (1): требования к интервалам времени, показанные на первом рисунке в этой врезке (например, tDVXH, tXHXL и tXLDX) также относятся к операции загрузки. Рис. 29-9. Интервалы времени параллельного программирования, последовательность чтения (в пределах одной страницы) с требованиями к интервалам времени(2). Примечание (2): требования к интервалам времени, показанные на первом рисунке в этой врезке (например tDVXH, tXHXL и tXLDX) также относятся к операции чтения. Таблица 29-13. Характеристики параллельного программирования, VCC = 5V ± 10%.
Примечание: 1. tWLRH допустимо для команд записи FLASH, записи EEPROM, записи бит фьюзов и записи бит защиты. В этом примере описана работа в среде операционной системы Windows, JTAG-адаптер на основе FT2232H Board [7] подключен к плате AVR-USB-MEGA16, на которую установлен ATmega32A [4]. Управление осуществляется с помощью открытого программного обеспечения UrJTAG [6]. 1. Скачайте с сайта Atmel пакет BSDL-файлов (подробнее см. [6]). 2. С помощью кабеля из 5 проводов подключите JTAG тестируемого микроконтроллера ATmega32A к контактам разъема адаптера JTAG.
Подключите адаптер JTAG к компьютеру, подайте питание на тестируемый микроконтроллер. 3. Запустите jtag.exe, выполните команду подключения к адаптеру JTAG: jtag> cable FT2232 vid=0403 pid=6010 Connected to libftd2xx driver. jtag> 4. Распакуйте содержимое архива в произвольную папку на диске. Главное требование - файлы BSDL (*.bsd) должны находиться в папке, путь до которой не содержит пробелов (UrJTAG пока что не поддерживает пути с пробелами, по крайней мере в команде bsdl path). Предположим, что файлы распакованы и находятся в папке c:\temp\megaAVR_BSDL. Теперь эту папку можно добавить командой bsdl path, и UrJTAG будет просматривать её в поиске описаний микросхем, когда будет введена команда detect. c:\Program Files\UrJTAG>dir c:\temp\megaAVR_BSDL Том в устройстве C не имеет метки. Серийный номер тома: 7CCB-BDB0 Содержимое папки c:\temp\megaAVR_BSDL 04.02.2017 09:18 < DIR > . 04.02.2017 09:18 < DIR > .. 21.08.2012 11:54 34 596 AT90CAN128.BSD 21.08.2012 11:54 34 578 AT90CAN32.BSD 21.08.2012 11:54 34 578 AT90CAN64.BSD 16.08.2012 07:18 13 965 AT90USB1286.bsdl 16.08.2012 07:18 15 143 AT90USB1287.bsdl 16.08.2012 07:18 13 974 AT90USB646.bsdl 16.08.2012 07:18 15 129 AT90USB647.bsdl 21.08.2012 11:54 17 846 ATMEGA128.BSD 21.08.2012 11:54 13 194 ATMEGA1280.BSD 21.08.2012 11:54 10 971 ATMEGA1281.BSD 21.08.2012 11:54 14 941 ATMEGA16.BSD 21.08.2012 11:54 12 675 ATMEGA162.BSD 21.08.2012 11:54 9 331 ATMEGA164P.BSD 21.08.2012 11:54 16 405 ATMEGA165.BSD 21.08.2012 11:54 16 419 ATMEGA165P.BSD 21.08.2012 11:54 16 417 ATMEGA169.BSD 21.08.2012 11:54 12 812 ATMEGA2560.BSD 21.08.2012 11:54 10 583 ATMEGA2561.BSD 21.08.2012 11:54 12 165 atmega32.bsd 21.08.2012 11:54 11 694 atmega323.bsd 21.08.2012 11:54 9 331 ATMEGA324P.BSD 21.08.2012 11:54 16 405 ATMEGA325.BSD 21.08.2012 11:54 19 173 ATMEGA3250.BSD 21.08.2012 11:54 16 803 ATMEGA325P.BSD 21.08.2012 11:54 16 417 ATMEGA329.BSD 21.08.2012 11:54 19 278 ATMEGA3290.BSD 21.08.2012 11:54 14 855 atmega64.bsd 21.08.2012 11:54 13 180 ATMEGA640.BSD 21.08.2012 11:54 9 331 ATMEGA644P.BSD 21.08.2012 11:54 16 405 ATMEGA645.BSD 21.08.2012 11:54 19 173 ATMEGA6450.BSD 21.08.2012 11:54 16 417 ATMEGA649.BSD 21.08.2012 11:54 19 278 ATMEGA6490.BSD 16.08.2012 07:18 12 402 USB16U4.bsdl 35 файлов 568 029 байт 2 папок 458 596 229 120 байт свободно В этом списке файлов есть файл atmega32.bsd (выделен в списке жирным шрифтом), который, к сожалению, не подходит для ATmega32A, потому что атрибут IDCODE_REGISTER в файле не совпадает с атрибутом, который будет прочитан из микросхемы через JTAG: jtag> bsdl path c:\temp\megaAVR_BSDL jtag> detect IR length: 4 Chain length: 1 Device Id: 10001001010100000010000000111111 (0x000000008950203F) Manufacturer: Atmel Unknown part! chain.c(149) Part 0 without active instruction chain.c(200) Part 0 without active instruction chain.c(149) Part 0 without active instruction jtag> Сообщение "Unknown part!" говорит о том, что среди всех BSDL-файлов, которые были просмотрены, не было найдено ни одно описание микросхемы, который содержит идентификатор, совпадающий с прочитанным через JTAG (выделен жирным шрифтом). Однако это легко исправить, если изменить атрибут IDCODE_REGISTER в файле atmega32.bsd. 5. Сделайте копию файла atmega32.bsd под новым именем atmega32a.bsd. 6. Откройте файл atmega32a.bsd, найдите в нем атрибут IDCODE_REGISTER. attribute IDCODE_REGISTER of ATmega32 : entity is "0101" & "1001010100000010" & "00000011111" & "1" ; Этот IDCODE почти полностью совпадает с кодом, прочитанным из ATmega32A, кроме первых 4 бит (выделены). Исправьте их на 1000: attribute IDCODE_REGISTER of ATmega32 : entity is "1000" & "1001010100000010" & "00000011111" & "1" ; 7. Теперь микроконтроллер ATmega32A будет распознаваться командой detect: jtag> detect IR length: 4 Chain length: 1 Device Id: 10001001010100000010000000111111 (0x000000008950203F) Filename: c:\temp\megaAVR_BSDL/atmega32a.bsd jtag> 8. На макетной плате AVR-USB-MEGA16 к ножке микроконтроллера PB0 подключен светодиод. Следующие команды переведут ножку PB0 в режим выхода с лог. 1 на выходе. Светодиод загорится: jtag> instruction EXTEST jtag> shift IR jtag> set signal PB(0) out 1 jtag> shift DR Теперь выведем на ножку PB0 уровень лог. 0, светодиод погаснет: jtag> set signal PB(0) out 0 jtag> shift DR jtag> [Словарик] ADC Analog-Digital Converter, аналого-цифровой преобразователь, АЦП. Boundary-scan дословно "граничное сканирование". Специальная технология, предназначенная для проверки качества сборки печатных плат, содержащих сложные интегрированные устройства (микросхемы). CPU Central Processor Unit, в данном контексте означает вычислительное ядро микроконтроллера. DAC Digital-Analog Converter, цифро-аналоговый преобразователь, ЦАП. LSB Least Significant Bit, самый младший по значимости бит. MCU MicroController Unit, обычно имеется в виду аппаратура ядра микроконтроллера. MSB Most Significant Bit, самый старший по значимости бит. OCD On-Chip Debug, система отладки, встроенная в кристалл микроконтроллера. RTC Real-Time Clock, часы реального времени. TAP Test Access Port, порт для доступа к тестированию. АЦП аналого-цифровой преобразователь. То же самое, что и ADC. [Ссылки] 1. 8-Bit AVR Microcontroller ATmega32A DATASHEET COMPLETE site:atmel.com. |