Как прошить телефон через jtag
Описание eMMC
Сейчас и в дальнейшем, при описании работы с EMMC мы будем отталкиваться от работы в программе eMMC tool, которую также называют Easy Jtag Plus.
Модуль eMMC_tool предствляет собой развитие программы EasyJtag Classic в области работы с eMMC. Данный модуль объединяет собой несколько программ типа Direct Odin и Direct Qualcomm, которые изначально были написаны для попыток записи прошивок напрямую в eMMC и общей работы c eMMC.
Основная кнопка программы это Detect EMMC, для проверки подключения и определения, "живая" ли микросхема вообще, т.е. реагирует она на внешние комманды или нет. По данной команде из микросхемы вычитываются основные данные: CID, CSD, размеры разделов, основные биты конфигурации, хранящиеся в Extended CSD (ExtCSD).
CID содержит информацию о производителе микросхемы, название микросхемы, месяц год производства и серийный номер.
ExtCSD представляет собой блок регистров (512 байт), в которых хранится конфигурация микросхемы.
Сама микросхема eMMC представляет собой память с контроллером (интерфейсом), и с точки зрения устройства содержит в себе
1) 4 основных раздела ( ROM1, ROM2, ROM3, RPMB ),
2) до 4 разделов GP ( GP1-GP4 ),
3) регистры конфигурации Extended CSD (ExtCSD)
ROM1 - Main User Datа , иногда называется Userdata;
ROM2 - Boot Partition 1 (Boot1);
ROM3 - Boot Partition 2 (Boot2);
ROM4 - так иногда называют раздел GP1 .
Раздел ROM1 является основным разделов в который пишутся данные (прошивка), и содержит в себе все разделы,
сформированные с помощью таблицы разделов.
ROM2,3 (Boot1,2) являются разделами в котором хранится загрузчик, отправляемый в процессор
(например, MTK (Mediatek), Exynox (Samsung)), или откуда процессор сам его берет (Intel, HiSilicon)
RPMB - защищенный от прямого чтения/записи раздел, предназначенный для хранения данных, к которым должен быть затруднен доступ извне. Данные в этом разделе доступны только через процессор устройства, который получает в него доступ использующий ключ, содержащий с себе SN процессора и еще какие-то данные. Для работы с этим разделом в процессорах содержится специальный блок, который шифрует данные и работает с этим разделом, предварительно согласовав ключи с микросхемой, в которой их еще нет. Достоверных данных о возможности работать с этот разделом минуя процессор, неизвестно.
Разделы GP1-GP4 , это разделы, которые создаются за счет начала раздела ROM1 и физически располагаются на его месте, уменьшая собой размер ROM1. На данный момент такие разделы, а точнее один (GP1) создаются в устройствах, собранных на процессорах Intel (но не на всех, в частности на платформе CloverView).
Размеры ROM2/3/RPMB можно изменить только на EMMC Samsung до ревизии Extended CSD v1.8 (MMC v 5.1), в остальных случаях их размер остается таким, каким его задали на заводе. В большинстве случаев размер не имеет значения, потому как обычно загрузчики редко превышают размер 512KB. Но есть аппараты, которые используют RPMB и отказываются работать с микросхемами, которые предназначены для аппаратов с процессорами Tegra (Nvidia), в которых обычно конфигурируется размер RPMB равным нулю
Также для процессоров MTK со scatter файлами первых версий (например, для процессоров MT6589), сумма размеров ROM2/3/RPMB не может быть больше начала раздела MBR, который должен быть записан по адресу указанному в scatter, который для MT6589 процессора равен 0x600000 (6MB).
Поэтому eMMC с размерами ROM2/3/RPMB 2/2/2MB или 2/2/0,5MB будет работать с MT6589, а с размерами ROM2/3/RPMB 4/4/4 уже не будет.
Раздел(ы) GP1 создаются на всех типах eMMC, поддерживающих General Partition Configuring, однократно. При этом наблюдались проблемы с созданием разделов GP1-GP4 на микросхемах Toshiba.
Лог детакта eMMC, базовая информация о eMMC.
В настройках eMMC_Tool есть галочка "Shot info about eMMC in log". Данная настройка позволяет выводить только основную информацию в логе детекта eMMC.
Первые строки позволяют понять, есть ли физический контакт по линии CMD, которая служит основной линией передачи команд в eMMC.
Т.к. eMMC имеет 2 напряжения, VCC (собственно питание микросхемы) и VCCQ (или VIO - напряжение линии ввода-вывода), то интерфейс обмена eMMC работает с логическими уровнями VCCQ. Поэтому важно, чтобы в интерфейсе программы было выставлено напряжение VIO равное напряжению на адаптере eMMC, обычно это 1,8v.
Тем не менее, при нестабильности коннекта можно увеличить VIO в программе, это позволит за счет перетока тока из бокса в интерфейс eMMC улучшить коннект с проблемным подключением. Настоятельно не рекомендуется повышать больше чем на 1 шаг или ставить ниже реального VCCQ.
Теперь становятся понятным следующие 2 строки:
CMD Pullup Level: - уровень напряжение линии CMD, которое выдает бокс;
CMD Active Level: - уровень сигнала, которое отдает микросхема.
Если CMD Active Level сильно занижено ( 300-500mV ), это значит обычно отсутствие контакта по линии CMD или отсутствие PullUp резисторов между линией CMD и VCCQ в интерфейсе подключения eMMC. Если занижен CMD PullUp Level, это значит, что линия CMD закорочена на землю.
Дальше в логе выводится CID, CSD, потом идет расшифровка CID - из него выделяется для наглядности Brand eMMC (Samsung), eMMC NAME (M8G2FB), Serial Number (S/N: D31CE4AC), версию прошивки firmware eMMC (rev.00).
Дальше выводятся размеры ROM1, ROM2, ROM3, RPMB. Т.к. размеры ROM2/3 всегда одинаковы, они выводятся одной строкой.
Одной из важных строк является версия ExtCSD, которая показывает поколение eMMС, а точнее - стандарт команд, который она поддерживает. При замены eMMC в аппарате нужно знать, что в большинстве случаев более новую eMMC нельзя заменить более старой.
Для того, чтобы в процессе работы с eMMC были видны основные ее параметры, они дублируются над логом одной строкой или по нажатию на кнопку под ней в расширенном виде с расшифровкой.
В первой строке выводится краткая информация: EMMC Brand, NAME, информация о разделе загрузки (boot from, являющегося расшифровкой регистра 179 ExtCSD, кол-во линий data по которым передается boot, записанное в регистре 177 ExtCSD (bus config).
В расширенном варианте также отображаются цифровые значения регистров 179/177 ExtCSD, значение регистра 162 ExtCSD с расшифровкой.
Кроме этого выводится значение регистра конфигурации [PARTITION_SETTING_COMPLETED], 0x01 в котором означает, что раздел ROM1 окончательно сконфигурирован, и создание в нем или изменение разделов GP1-GP4 невозможно.
Последняя строка - значения регистров ExtCSD, которые показывают выставлен ли режим RO (ReadOnly - только чтение) в eMMC.
Temporary Write Protection это временный флаг, который можно легко снять, он выставляется во время загрузки Boot в аппаратах Lumia (и может еще где-то).
Permanent Write Protection выставляется eMMC при ее длительном износе, и говорит обычно о том, что срок службы eMMC пришел к концу.
В расширенном варианте лога выводится еще строка информация по регистру ExtCSD [PARTITIONING_SUPPORT], который отображает возможности eMMC к созданию дополнительных разделов GP1-GP4, битовый регистр, может иметь значения 0x00, 0x01, 0x03, 0x07. Из них 0x00 означает, что микросхема не поддерживает создание GP1-GP4, остальные значения связаны с вариантами конфигурирования GP1-GP4, чем больше значение тем больше опций при создании этих разделов поддерживает eMMC.
Частично или полностью неисправные eMMC.
Признаки плохого контакта eMMC в сокете или же полной неисправности eMMC являются строки:
Can't init device. Reason: CMD Timeout Error
Can't init device. Reason: OCR Ready Timeout Error [Check VCC or eMMC DEAD]
Can't init device. Reason: CARD is Password Locked
У полуживых микросхем в CID выдается информация, которая говорит о том, что микросхема находится в boot-режиме.
примеры:
Sandisk:
EMMC NAME: SDM 032 , S/N: FFFFFFFF , rev. 90
EMMC ROM 1 (Main User Data) Capacity: 30 MB (000001E9C000)
Hynix:
EMMC NAME: M MOR , S/N: 00000000 , rev. 00
EMMC ROM 1 (Main User Data) Capacity: 128 MB (000008000000)
FORESEE
EMMC NAME: , S/N: FFFFFFFF , rev. FF
EMMC NAME (HEX ): 000000000000
Samsung
EMMC NAME: 000000 , S/N: 20110726 , rev. 56
EMMC NAME (HEX): 303030303030
Признаком boot-режима eMMC Samsung является eMMC NAME 000000, и rev.0x56. Так же выглядит запуск eMMC Samsung используя TP (test-point). В eMMC Samsung до MMC rev 5.0 (и в некоторых rev 5.0), чаще всего можно восстановить прошивку eMMC, но это не всегда гарантирует, что она после этого долго проработает (зависит от причины, по которой она оказалась в boot).
Для других eMMC, кроме перечисленных Samsung, восстановление firmware eMMC (вывод из boot) пока не предоставляется возможным. При этом нужно учитывать что Hynix и Sandisk падают в boot при значительном износе ячеек памяти, что значит, что долго они работать после возможного восстановления не будут.
__________________Не задавайте глупые вопросы, и Вы не будете получать глупые ответы. Последний раз редактировалось Layder; 08.11.2017 в 17:12 . Alexbig (08.11.2017), An144 (11.11.2017), Dimasik (16.11.2017), Dood (09.11.2017), Dr_Wolodya (08.11.2017), estonij (10.11.2017), Evgenii60 (11.11.2017), fedja (08.11.2017), geras (09.11.2017), iGoogle (27.11.2017), Kair (08.11.2017), Kallter (08.11.2017), Mantikor (08.11.2017), Master_X (02.01.2018), meta (09.11.2017), MobilaGSM (27.02.2018), nikitin78 (28.11.2017), qrhsystem (08.11.2017), remark (09.11.2017), renat_d (02.01.2018), slaventiy76 (18.01.2018), S_E_Killer (09.11.2017),
Layder
Подготовка eMMC для установки в устройство
Большинство замен eMMC производится на мобильных телефонах и планшетах. И возникает вопрос, что нужно прошить в eMMC, чтобы после её установки в плату мы получили бы или полностью работоспособное устройство, или же, чтобы хотя бы иметь возможность подключить устройство к компьютеру-ноутбуку, чтобы устройство "отдетектилось" как USB устройство.
Тема достаточно широкая, поэтому начнем с простых вещей.
Первое и основное, в микросхему eMMC необходимо записать Boot config
Boot config представляет собой 3 регистра extCSD:
1) Boot Partition [179] - регистр, который указывает, в каком разделе eMMC находится boot для загрузки
2) Bus Config [177] - ширина шины данных, и режим загрузки
3) H/W Reset Function [162] - режим управление выводом RST eMMC
Есть 4 способа это сделать:
1) из файла extcsd, сохранённого с такого же устройства;
2) из файла extcsd, сохранённого с такого же устройства, во время прошивки eMMC;
3) с помощью предустановленных вариантов;
4) вручную.
Вариант 4 (для экспертов):
Для того чтобы получить соединение с компьютером для последующего восстановления устройства с помощью ПО компьютера для устройствами на базе процессоров:
1) Mediatek (MTK)
- записать Boot cfg, и стереть eMMC (устройство определится как MTK USB Port );
или
- записать Boot cfg, и записать "Preloader" в ROM2(3) через "Write by vendor" (устройство определится как MTK Virtual VCOM Port );
или
- записать Boot cfg, и записать сохраненный бекап ROM2(3) через "eMMC General" - "Write ROM" (устройство определится как MTK Virtual VCOM Port ).
В дальнейшем большинство устройств на процессорах MTK программируются (прошиваются) компьютером через родной FlashTool для MTK.
2) Intel . У Intel есть устройства с разделом GP1 и есть без него.
- записать Boot cfg, и стереть eMMC (устройство определится как CloverView Device или другое). В этом варианте в дальнейшем потребуется записать загрузчик с помощью утилиты xfstk и дальше согласно инструкциям;
или
- записать Boot cfg, создать (при необходимости) раздел GP1, и записать в eMMC: ROM2, ROM3, GP1, и минимум примерно 300-500MB бекапа ROM1 для разных моделей. В данном варианте устройство сможет загрузится в DroidBoot , откуда его можно прошить прошивками через компьютер.
3) Qualcomm
- записать Boot cfg, и стереть eMMC (устройство определится как HS QD9008 Loader ). Для многих устройств есть сервисные прошивки для QPST в формате bin/xml, с помощью которой можно в дальнейшем восстановить устройство.
или
- записать Boot cfg, и записать часть прошивки (bootloaders, boot, recovery) через "Write by vendor - Qualcomm/Samsung", чтобы получить устройство, запускающеюся в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту;
или
- записать Boot cfg, и записать начало дампа ROM1 (100-500MB), в которых содержатся bootloaders, boot, recovery и другие необходимые разделы для запуска устройства в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту.
4) Exynos
- записать Boot cfg, и стереть eMMC, в дальнейшем такой аппарат можно восстановить только с помощью специально подготовленной SD карты под конкретное устройство;
или
- записать Boot cfg, и записать часть прошивки (bootloaders, boot, recovery) через "Write by vendor - Samsung", чтобы получить устройство, запускающеюся в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту;
или
- записать Boot cfg, записать ROM2 и записать начало дампа ROM1 (100-500MB), в которых содержатся bootloaders, boot, recovery и другие необходимые разделы для запуска устройства в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту.
5) HiSilicon
- записать Boot cfg, и записать часть прошивки (bootloaders, boot, recovery) через "Write by vendor - HiSilicon", чтобы получить устройство, запускающеюся в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту;
или
- записать Boot cfg, записать ROM2, начало дампа ROM1 (100-500MB), в которых содержатся bootloaders, boot, recovery и другие необходимые разделы для запуска устройства в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту.
6) SpreadTrum
- записать Boot cfg, и записать начало дампа ROM1 (100-500MB), в которых содержатся bootloaders, boot, recovery и другие необходимые разделы для запуска устройства в Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту.
7) Broadcomm
- записать Boot cfg, и записать часть прошивки (bootloaders, boot, recovery) через "Write by vendor - Qualcomm/HiSilicon", чтобы получить устройство, запускающеюся в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту;
или
- записать Boot cfg, записать ROM2 и записать начало дампа ROM1 (100-500MB), в которых содержатся bootloaders, boot, recovery и другие необходимые разделы для запуска устройства в FastBoot/Recovery и в дальнейшем записать в него прошивку через компьютер или SD карту.
Что касается спутников ресиверов, то JTAG дает возможность перепрошить микросхему flash-памяти, если нет возможность прошить ресивер стандартным способом, через кабель к компьютеру. Сегодня мы разберем прошивку через JTAG-интерфейс на примере спутникового ресивера Globo X90 для его восстановления. Ранее мы уже научились прошивать его через кабель (см. предыдущую часть)
Зачем нужен JTAG
Прошивка через JTAG куда сложней обычной процедуры, поэтому к ней прибегают только в самом крайнем случае, когда ресивер совсем не подаёт признаков жизни: не загружается, не горит индикация, прошили другой прошивкой, либо после прошивки у вас только черный экран
JTAG прошивка по шагам
[adace-ad >Для того, что бы запрограммировать флэш ресивера с помощью JTAG кроме собственно «пациента», т.е. ресивера, который нам необходимо «оживить», нам нужно иметь следующее:1. Собрать интерфейс (переходник) от порта ресивера к порту ПК
Собрать адаптер для JTAG не так сложно, как кажется на первый взгляд. Для Globo X90, да и вообще для всех ресиверов, предпочтительным вариантом сборки является вариант на микросхеме 74HC244N (её еще называют даташит). Распиновка JTAG:
Так выглядит собранная схема:
2 . Найти LPT-порт на ПК
Параллельный порт на компьютере сейчас можно увидеть только в музее, поэтому можно докупить специальный LPT-PCI контроллер , который позволяет подключить ваш JTAG к системному блоку ПК, у которого нет LPT порта (а это будет в 99,9% случаев).
Для реанимации ресиверов Globo и всех их клонов, а так же для Евросатов/Евроскаев потребуется специальный программатор. Что касается программного обеспечения, то на данных процессорах используется программа EJTAG_TT_1.0.6.17 (Я.Диск)
4. Установить драйвер, если у вас Windows XP
Если вы используете Windows XP, то необходимо установить драйвер giveio.sys (Я.Диск). Скопируйте файл драйвера GIVEIO.sys в папку C:\Windows\system32\drivers\ если, конечно, система у Вас установлена на диск С: и Вы не меняли пути установки Windows. Запустите файл install.reg.
5. Скачиваем прошивку
[adace-ad >Нужна сама прошивка, т.е. то, что мы будем заливать во Flash-память. Здесь есть два варианта6. Переводим ресивер в отладочный режим
Для прошивки также потребуется перевод ресивера в режим отладки, он же Debug Mode. Способы его перевода зависят от конкретной модели приставки, конкретно для Globo X90 cсоединить (замкнуть) перемычкой предназначенные для этого контактные площадки на плате, где стоит обозначение JP1 . Так же бывает, что надписи JP1 на ресивере нет, тогда нужно выпаять резистор R32
Можно использовать перемычку с IDE-винчестеров
Так это будет выглядеть:
7. Настраиваем EJTAG и прошиваем
Настройки в нашей JTAG tool выставляем так же как на скриншоте:
Если EJTAG не увидит ресивер, попробуйте поменять тип флеш памяти в последнем столбике. Вообще, здесь можно пробовать менять любые параметры, чтобы ресивер определился
[adace-ad >
При необходимости, как мы и писали выше, EJTAG сотрёт самостоятельно нужный блок памяти и начнет запись.
8. Убираем перемычку, отключаем Debug Mode
Не забудьте в конце прошивки корректно завершить программу EJAG, отключить от сети ресивер и аккуратно отключить JTAG-интерфейс. Так же снять перемычку для входа в отладочный режим. Далее подключаем ресивер уже через ком-порт и заливаем в него софт обычным способом.
Ручной поиск транспондера у спутника
Нередки случаи, когда оборудование, нуждающееся в обновлении ПО норовит быть в неожиданных и труднодоступных местах. Да еще и времени на обновление бывает в обрез. Хорошо, когда в оборудовании есть загрузчик, позволяющий прошиться по аплинку/радиоканалу/съемному носителю информации. А что если загрузчик устарел и его самого надо обновить? Или же у ПО напрочь слетела вся память? Тогда-то и востребуется такая штука, как «прошивалка». Маленьких размеров, питающийся от устройства хэдкраб, который сможет залить в устройство заранее подготовленный загрузчик или программу. И главное – никаких нетбуков/ноутбуков/проводов! Даже среднего образования не надо.
Итак, сверхмобильная прошивалка.
Схемотехника
Устройство представляет собой платку с разъемом JTAG (IDC-10, в том формате, который полюбился Atmel) и контроллера ATMega8. В качестве контроллера конкретно здесь может быть любой другой, совместимый по ногам, например, ATMega168.
Схема:
Плата:
Все прекрасно разводится на одном слое, без перемычек.
Принцип работы
Наш хэдкраб тактируется от внутреннего RC-генератора, т.к. JTAG — это синхронных интерфейс и тайминги не важны. Для отображения состояния на плате располагается сдвоенный красно-зеленый светодиод.
После подачи питания контроллер инициализирует линии JTAG (TMS, TCK, TDO, TDI), зажигает красный светодиод и согласно протоколу работы TAP-контроллера (Test Access Point, описание его работы можно найти в даташите на любой МК, поддерживающий JTAG) пытается ввести в режим программирования устройство, к которому он прицепился. Здесь небольшое лирическое отступление. В программе работа с TAP выглядит так:
Реализация функций TAP и shift_instruction выглядит следующим образом:
По сути, каждая операция по JTAG производится через TAP посредством этих двух функций в различных вариациях. Например так выглядит чтение байтов сигнатуры устройства:
Остальные команды можно изучить в описании TAP или же, более наглядно, в прикрепленном к посту рабочем проекте. Лирическое отступление закончилось, вернемся к описанию работы.
После входа в режим программирования прошивалка сверяет байты сигнатур устройства с зашитыми в код прошивалки (не дай Б-г не то устройство прошьем). Если байты не совпадают, прошивалка деинициализирует линии JTAG и начинает мигать обоими светодиодами, пока её не отцепят от устройства. Короче говоря, отваливает от процесса. Если устройство всё же похоже на нужное, то прошивалка делает следующее:
— стирание кристалла (chip erase);
— прошивка память программы устройства из своей собственной памяти (program flash);
— проверка памяти программы устройства со своей собственной памятью (read flash);
— программирование битов конфигурации (fuses);
— программирование битов защиты (lock bits);
— отваливается, погасив все светодиоды.
Конечно же, прошивлка сама по себе не отвалится, её надо отстыковать). Но на момент погашения светодиодов, устройство, к которому наш хэдкраб был подключен, уже должно стартовать: готово к работе!
Если на этапе программирования или проверки возникнет несовпадение или ошибка, прошивалка отлипнет от порта и замигает светодиодами, т.е. опять-таки отвалит от процесса.
Нюансы
1) Естественно, для того чтобы прошивалка все-таки прошила устройство по JTAG, этот самый JTAG должен быть активирован на данном устройстве. Иначе придется применять прошивалку уже другого рода — по ISP. Подобное так же собиралось и функционирует.
2) Собственно сама прошивка для устройства располагается в памяти контроллера прошивалки и может занимать довольно много места. Если не будет влезать в Mega8, то можно применить Mega168, там больше флеша.
3) Бинарник прошивки устройства цепляется к прошивке хэдкраба на этапе линковки, это делается различными способами, в зависимости от среды разработки. В IAR это в свойствах проекта в Linker во вкладке Config указываем Raw binary image путь к файлу бинарника, задаем Symbol, Segment и Align например как a123, SEGa и 2 соответственно. Тогда на вкладке Extra Options надо будет добавить 2 строки:
-ZSEGa=EFF
-ga123
где EFF — это адрес, по которому будет располагаться бинарник устройства в памяти прошивалки.
Вот вроде бы и всё. Устройство бывает крайне полезным, когда устройства сверхподвижны и отлавливать их приходится буквально в поле.
Снова оговорюсь, что есть подобное же устройство, но для программирования через SPI.
Многие знакомы со словом «JTAG», но знакомство это скорее всего поверхностное. В этой статье я хочу перевести Вас на новый уровень, так сказать «во френдзону». Возможно, для многих я не открою ничего нового, но надеюсь тем, кто давно хотел ознакомиться, будет интересно почитать. Итак, от винта.
Введение
В 1985 сформировалась группа производителей электроники — JTAG (Joint Test Action Group). Для решения проблем тестирования в 1990 был выдвинут промышленный стандарт — спецификация IEEE Std 1149.1-1990 (IEEE Standard Test Access Port and Boundary-Scan Architecture). В этом же году Intel вывел в свет первый процессор с JTAG — 80486. С тех пор стандарт постоянно модифицируется и, в данный момент, последняя версия датируется 2013 годом.
«А какие же это проблемы с тестированием?»,- спросите Вы. Ну как же! Мало удовольствия прыгать с осциллографом по выводам микросхемы, особенно если их много больше двух! Стандарт позволяет значительно упростить жизнь за счет встраивания специальной архитектуры в современные чипы, обеспечивающей доступ к выводам (точнее, к специальным блокам ввода-вывода) с помощью 4-х проводного последовательного интерфейса. Эта архитектура позволяет не только контролировать их состояние, но и управлять ими. Таким образом можно обойтись без громоздких пробников с физическим контактом и насладиться всей прелестью этапа отладки цифровых микросхем или устройств уровня печатной платы.
Стандарт используют как для целей внутрисхемного программирования и отладки программ, так и при работе с корпусированными микросхемами. Он же используется для проверки на качество припайки микросхем к плате, межплатного и внутристоечного монтажа плат и блоков. Также надо сказать ему спасибо за восстановление закирпиченных по неосторожности мобильных устройств.
И как же работает?
Механизм граничного сканирования заключен, всего лишь, в сдвиговом регистре (Boundary Scan), подключенном между выводами микросхемы и ядром, и мультиплексоре который подключает в нужный момент этот регистр. Каждому конкретному выводу соответствуют так называемые «ячейки».
В состав ячейки входит один триггер регистра граничного сканирования и мультиплексора выбора данных. Ячейки могут быть разных типов в зависимости от вывода микросхемы и команд интерфейса, т.е. зависит от производителя той или иной микросхемы. Производители не придерживаются строго стандарта и, поэтому, развелось множество модификаций.
На рисунке представлена одна из разновидностей ячейки. PI, PO — параллельные вход и выход, SI,SO — последовательные.
Сигналы на регистр микросхемы попадают через мультиплексор, который позволяет считывать как состояния выводов ядра микросхемы (инструкция INTEST), так и данные, поступающие извне на сдвиговый регистр (инструкция EXTEST). Разновидности инструкций и их функциональность опять же меняются от желаний производителя, но существуют так называемые обязательные:
- EXTEST — инструкция, позволяющая за счет установки логических значений на рабочих контактах электронных компонентов проверить внешние цепи, имеющие непосредственное отношение к тестируемому компоненту.
- INTEST — инструкция обеспечивает возможность установки логических значений внутри микросхемы, то есть на входах ядра, тем самым проверяя его.
- SAMPLE_PRELOAD — позволяет тестировать ядро электронного элемента в статическом режиме, устанавливая значения логических уровней на границе его выходных буферов.
- BYPASS — инструкция, при которой наш регистр граничного сканирования «схлопывается» в один триггер. При этом данные со входа (TDI) на выход (TDO) передаются с задержкой в один такт частоты синхронизации интерфейса (TCK). Этот режим позволяет эффективно использовать возможности последовательного интерфейса при организации длинных последовательно объединенных цепочек.
- IDCODE — инструкция выдвигает на выход значение встроенного 32-битного регистра с идентификаторами производителя, модели и версии устройства.
Сигнальные линии интерфейса
Как уже говорилось выше, интерфейс JTAG имеет следующие сигнальные линии:
- TDI — Test Data Input — сигнал данных на вход, данные задвигаются по переднему фронту TCK.
- TDO — Test Data Output — выход последовательных данных JTAG, выдвигаются по заднему фронту TCK, должен находиться в третьем состоянии — Z — когда данные не передаются.
- TMS — Test Mode Select — сигнал управления TAP — контроллером.
- TRST — Test Reset — не всегда есть, так как ресета можно добиться удерживая некоторое время TMS = 1, активный уровень сигнала — 0.
- TCK — Test Clock — тактовая частота.
TAP — контроллер
Мы добрались до самой сути JTAG, а именно — управляющий работой автомат. С его помощью собственно и живет всё вокруг. Автомат имеет 16 состояний. Управление интерфейсом осуществляется путем воздействия на автомат посредством сигнала TMS. Переходы происходят по переднему фронту сигнала TCK. Чтение и запись данных происходят одновременно. Ниже привожу иллюстрацию работы, взятую из документации микросхем фирмы Altera.
Диаграмма переходов автомата, управляющего режимами TAP
- Test-Logic-Reset – исходное состояние;
- Run-Test/Idle – переходное состояние контроллера при выполнении тестов или ожидании следующей
- команды;
- Select-IR, Select-DR – состояние, после которого будет производиться тестирование команд, данных;
- Capture-IR, Capture-DR – состояние приёма команд, данных;
- Shift-IR, Shift-DR – состояние сдвига команд, данных;
- Exit1-IR, Exit2-IR – выход из режима работы с командами;
- Exit1-DR, Exit2-DR – выход из режима работы с данными;
- Pause-IR, Pause-DR – состояние паузы;
- Update-IR, Update-DR – состояние перезаписи данных в выходные регистры.
Исходное состояние, в котором находится автомат после включения, это Test-Logic Reset. Пока сигнал TMS имеет значение «лог.1», состояние автомата остается неизменным. В этом состоянии, по умолчанию, выбрана инструкция IDCODE или BYPASS.
Сигнал сброса TRST не является обязательным, поэтому для сброса автомата в исходное состояние применяют следующую процедуру. Необходимо подать на вход TMS сигнал высокого уровня и удерживать его не менее 5 тактов частоты TCK. Если сигнал TMS будет установлен хостом в низкий уровень, то автомат перейдёт к состоянию Run-Test/Idle (активное состояни, в котором ничего не происходит). Обычно из этого состояния можно перейти в состояние Select-IR, для того чтобы загрузить в контроллер новую инструкцию. Но если на вход сигнала TMS подействует не сигнал, подаваемый от хоста, а помеха низкого уровня, то, как и в предыдущем случае, автомат перейдёт в состояние Run-Test/Idle. Если же кратковременная помеха (длительностью не более одного периода синхрочастоты) прекратится, то автомат через три такта снова вернётся в исходное состояние – Test-Logic Reset.
Чтобы загрузить в контроллер новую команду, надо из состояния Run-Test/Idle перевести автомат в состояние Select-IR, Capture-IR, Shift-IR. Затем необходимо «продвинуть» в цепочку данных новую команду, а потом перевести автомат через состояния Exit1-IR, Update-IR и снова в Run-Test/Idle. Логика работы с данными такая же. Нужно учитывать, что сигнал высокого уровня при переходе из состояний Shift-IR\DR подается вместе с последним битом информации.
Диаграмма сигналов при выполнении переходов для загрузки команды
Если используя специализированный САПР написать код работы JTAG на Verilog, то результирующая диаграмма будет выглядеть примерно так:
Сылка на дропбокс, картинка в полный размер
Наконец можно показать полную структурную схему устройства JTAG и Вы вполне должны в ней разобраться:
… И в заключение.
Использование JTAG и технологии граничного сканирования в микросхеме, на плате или в устройстве добавляет стоимость и увеличивает время разработки проекта. Но, всё же эти затраты легко окупаются при проведении тестирования, которое обеспечивается на каждой стадии цикла жизни изделия. То, что было первоначально разработано как производственный испытательный инструмент, используется до начала производства, во время серийного производства и после производства, то есть на этапе эксплуатации конечным пользователем. Кроме непосредственно граничного тестирования, проектировщики используют технологию JTAG для того, чтобы производить самотестирование (BIST) (в тех компонентах, где оно реализовано) и загружать внутренние значения в регистры устройства или программировать микросхемы ПЗУ. Тесты, которые были разработаны и использованы на этапе проектирования, могут быть переданы производству, для того чтобы обеспечить дополнительное снижение стоимости и времени на проверку изделий при выходном контроле.Основные положительные эффекты от применения технологии JTAG в производственной фазе – экономия времени при разработке испытательных тестов, улучшенный «охват» тестируемого изделия при поиске ошибки и диагностировании и улучшенная производительность испытаний при одновременном уменьшении времени испытания.
Применение граничного сканирования при эксплуатации изделия также даёт определённый положительный эффект. Отказы при эксплуатации часто происходят из-за структурных отказов, которые вызываются повышенной температурой, влажностью, вибрацией. Используя граничное сканирование, техники имеют возможность быстро проверить изделие на структурные ошибки вплоть до уровня компонентов без трудоёмкого исследования или возвращения платы изготовителю на завод.
Читайте также: