29.4. Трансивер JTAG
Трансивер JTAG отвечает за последовательную передачу по четырем линиям ввода-вывода (TMS, TCK, TDI и TDO). Он поддерживает обнаружение условия BREAK, обнаружение ошибок паритета и генерацию паритета. Более детально об этом см. в разделе 28 "IEEE 1149.1-совместимый интерфейс граничного сканирования JTAG".
29.4.1. Разрешение работы
Для разрешения работы интерфейса JTAG необходимо запрограммировать Fuse-бит JTAGEN и сбросить бит JTAG Disable в регистре управления МК. По умолчанию, fuse-бит JTAGEN запрограммирован и работа интерфейса JTAG разрешена. Когда в JTAG регистр инструкции вводится инструкция PDICOM, в качестве регистра данных, включенного между выводами TDI и TDO, выбирается коммуникационный регистр PDI. В этом режиме, интерфейс JTAG может использоваться для доступа к возможностям программирования и отладки интерфейса PDI.
29.4.2. Отключение
Отключить интерфейс JTAG можно либо переводом fuse-бита JTAGEN в незапрограммированное состояние, либо путем программной установки бита JTAG Disable в регистре управления микроконтроллером.
29.4.3. Набор инструкций JTAG
Набор инструкций JTAG микроконтроллеров XMEGA состоит из восьми инструкций, относящихся к граничному сканированию и доступу к контроллеру PDI в целях программирования энергонезависимой памяти. Более детально о наборе инструкций см. в 28.4 "JTAG-инструкции".
29.4.3.1. Инструкция PDICOM
Выбирает в качестве регистра данных 9-битный коммуникационный регистр PDI. Команды вводятся в регистр последовательностью сдвигов, при этом, аналогичным образом выводится результат выполнения предыдущей команды. Активные состояния TAP-контроллера:
- ЗАХВАТ_РД: выполняется выборка параллельных данных из контроллера PDI в коммуникационный регистр PDI.
- СДВИГ_РД: выполняется ввод данных сдвигом с входа TCK в коммуникационный регистр PDI.
- МОДИФ_РД: команды или операнды фиксируются в параллельном формате в регистрах контроллера PDI.
29.4.4. Формат посылки и символов
Трансивер JTAG использует фиксированный формат посылки. Последовательная посылка определена как один символ, состоящего из восьми бит данных и следующего за ними одного бита паритета.
Рисунок 29.10. Формат последовательной посылки интерфейса JTAG
Таблица 1
(0-7) |
Биты данных/команды (0…7), младший бит передается первым |
P |
Бит паритета, используется четный паритет |
29.4.4.1. Специальные символы данных
Предусмотрено три специальных символа данных. У всех этих символов бит паритета инвертирован. Это необходимо для того, чтобы при приеме возникала ошибка паритета. Символ BREAK (0xBB+P1) используется внешним программатором для того, чтобы принудительно прервать любую выполняющуюся контроллером PDI операцию и перевести его в известное состояние. Символ DELAY (0xDB+P1) используется контроллером PDI для сигнализации программатору о том, что у него нет готовых данных программатора и что он не собирается выполнять передачу (т.е. PDI находится в режиме приема).
Рисунок 29.11. Специальные символы данных
29.4.5. Последовательные передача и прием
Интерфейс JTAG использует полнодуплексную передачу данных. Одновременно с вводом данных сдвигом с линии TDI, выполняется вывод данных сдвигом на линию TDO. В свою очередь, интерфейс PDI использует полудуплексную передачу данных. Таким образом, работая совместно с контроллером PDI, трансивер JTAG работает либо в режиме передачи (TX), либо в режиме приема (RX).
Программатор и интерфейс JTAG работают синхронно с сигналом TCK, который генерируется программатором. Зависимость между фронтами синхронизации и выборкой или изменением данных фиксированная. На рисунке 29.10 показано, что изменение уровней на линиях TDI и TDO всегда происходит по падающему фронту TCK, а выборка данных - по нарастающему фронту TCK.
Рисунок 29.12. Изменение и выборка данных
29.4.6. Последовательная передача
После инициации передачи данных, в сдвиговый регистр в параллельном формате помещается байт данных, после чего он последовательно передается сдвигом по линии TDO. Сгенерированный бит паритета передается сразу за битами данных. Скорость передачи зависит от сигнала TCK.
29.4.6.1. Сигнализация статуса
Если PDI перешел в режим передачи (как отклик на инструкцию LD) и во время ввода TAP-контроллером состояния ЗАХВАТ_РД контроллер PDI отправил запрос на передачу, выполняется загрузка действительных данных в параллельном формате в сдвиговый регистр и генерация бита паритета, который в дальнейшем будет передан в состоянии СДВИГ_РД вместе с байтом данных.
Если PDI находится в режиме приема и TAP-контроллер вводит состояние ЗАХВАТ_РД, в сдвиговый регистр помещается байт EMPTY (0xEB) в параллельном формате, а бит паритета устанавливается равным единице (чтобы вызвать ошибку паритета) и передается в дальнейшем вместе с байтом данных в состоянии СДВИГ_РД. Такая ситуация возникает в ходе приема нормальной команды PDI и операнда.
Если PDI перешел в режим передачи (как отклик на инструкцию LD), но от контроллера PDI запрос на передачу еще не отправлен, TAP-контроллер вводит состояние ЗАХВАТ_РД, байт DELAY (0xDB) загружается в сдвиговый регистр, а бит паритета устанавливается равным единице (чтобы вызвать ошибку паритета) и передается вместе с байтом данных в состоянии СДВИГ_РД. Данная ситуация возникает в ходе передачи данных, когда еще нет доступных данных для передачи.
На рисунке 29.13 показан непрерывный поток посылок данных из PDI (МК), которые являются результатом повторяющегося выполнения инструкций LD. В данном примере МК не может возвращать данные быстрее одного байта за две переданных посылки, т.к. между посылками вставляются промежуточные символы DELAY.
Рисунок 29.13. Маркировка неготовности данных
Если посылка данных DELAY передается в отклик на инструкцию LD, программатор должен интерпретировать это так, как будто интерфейс JTAG еще не имел данных для передачи во время предыдущего состояния ЗАХВАТ_РД. Адекватной реакцией программатора в таком случае является инициация повторяющихся передач вплоть до приема действительного байта данных. Выполнение инструкции LD подразумевает возврат определенного количества действительных посылок, а не просто количества посылок. Таким образом, если программатор после передачи инструкции LD обнаруживает символ DELAY, инструкцию LD нельзя передавать повторно, т.к. еще должен быть отправлен отклик на первую инструкцию LD.
29.4.7. Последовательный прием
Во время приема, приемник заполняет сдвиговый регистр с входа TDI восемью битами данных и битом паритета. При каждом приеме действительной посылки происходит фиксация данных в параллельном формате в состоянии МОДИФ_РД.
29.4.7.1. Проверка паритета
Блок проверки паритета вычисляет паритет (используется четный режим) бит данных принятой посылки и сравнивает его с принятым в последовательной посылке битом паритета. Если обнаруживается ошибка паритета, об этом сигнализируется контроллер PDI.
29.4.7.2. Обнаружение символа BREAK
Блок проверки паритета активен как в режиме передачи, так и в режиме приема. Если обнаруживается ошибка паритета, принятый байт данных сравнивается с кодом символа BREAK (при передаче которого искусственно вводится ошибка паритета). При обнаружении символа BREAK, об этом сигнализируется контроллер PDI.
|