Как сделать джитаг схема
Прошивка через JTAG: схема, распиновка, инструкция
Открываем для тебя дивный мир флеш-памяти
Содержание:
Ingredients
Directions
JTAG — это аббревиатура, которая расшифровывается как «Joint Test Action Group», в переводе это значит специализированный интерфейс для отладки и программирования. Данный микропроцессорный интерфейс служит, как понятно из названия, для отладки и мониторинга работы процессора.
Что касается спутников ресиверов, то JTAG дает возможность перепрошить микросхему flash-памяти, если нет возможность прошить ресивер стандартным способом, через кабель к компьютеру. Сегодня мы разберем прошивку через JTAG-интерфейс на примере спутникового ресивера Globo X90 для его восстановления. Ранее мы уже научились прошивать его через кабель (см. предыдущую часть)
Зачем нужен JTAG
Прошивка через JTAG куда сложней обычной процедуры, поэтому к ней прибегают только в самом крайнем случае, когда ресивер совсем не подаёт признаков жизни: не загружается, не горит индикация, прошили другой прошивкой, либо после прошивки у вас только черный экран
JTAG прошивка по шагам
Для того, что бы запрограммировать флэш ресивера с помощью JTAG кроме собственно «пациента», т.е. ресивера, который нам необходимо «оживить», нам нужно иметь следующее:
1. Собрать интерфейс (переходник) от порта ресивера к порту ПК
Собрать адаптер для JTAG не так сложно, как кажется на первый взгляд. Для Globo X90, да и вообще для всех ресиверов, предпочтительным вариантом сборки является вариант на микросхеме 74HC244N (её еще называют даташит). Распиновка JTAG:
Так выглядит собранная схема:
Со стороны ресивера это будет специальный разъём, он иногда даже так и подписан — JTAG
Второй «конец», который уходит в сторону ПК — это обычный LPT-кабель, который можно купить в любом компьютерном магазине. О том, как можно собрать всё это хозяйство:
3. Скачать программу для прошивки
Для реанимации ресиверов Globo и всех их клонов, а так же для Евросатов/Евроскаев потребуется специальный программатор. Что касается программного обеспечения, то на данных процессорах используется программа EJTAG_TT_1.0.6.17 (Я.Диск)
4. Установить драйвер, если у вас Windows XP
Если вы используете Windows XP, то необходимо установить драйвер giveio.sys (Я.Диск). Скопируйте файл драйвера GIVEIO.sys в папку C:\Windows\system32\drivers\ если, конечно, система у Вас установлена на диск С: и Вы не меняли пути установки Windows. Запустите файл install.reg.
5. Скачиваем прошивку
Нужна сама прошивка, т.е. то, что мы будем заливать во Flash-память. Здесь есть два варианта
6. Переводим ресивер в отладочный режим
Обратите внимание на точки подключения. Они должны совпадать с тем, как вы собрали переходник. В некоторых Globo-ресиверах бывает обратная последовательность — не перепутайте. На некоторых ресиверах можно сделать обычную перемычку для перевода в отладочный режим
Можно использовать перемычку с IDE-винчестеров
Так это будет выглядеть:
7. Настраиваем EJTAG и прошиваем
Настройки в нашей JTAG tool выставляем так же как на скриншоте:
Если EJTAG не увидит ресивер, попробуйте поменять тип флеш памяти в последнем столбике. Вообще, здесь можно пробовать менять любые параметры, чтобы ресивер определился
Если после нажатия кнопки «коннект», у вас выходит ошибка «флэш ID нету в *.ini –файле», то попробуйте поменять настройки в программе, как и советовали выше, нужно попробовать все вариации галочек и точек в настройках. Если и это не приведет к успеху, то тут стоит насторожиться — проверить питание процессора, напряжение с БП — есть вероятность того, что флеш-память уже «умерла», тогда никакой JTAG уже не поможет. Следующим шагом жмём «Записать» и в окне проводника выбираем нужный файл с дампом или загрузчиком (лоадером)
При необходимости, как мы и писали выше, EJTAG сотрёт самостоятельно нужный блок памяти и начнет запись.
Здесь есть небольшой нюанс — достаточно залить около 50-70% прошивки через JTAG (желательно, конечно, полностью), но если у вас оборвалась прошивка на этом этапе, то можно попробовать прошивать стандартно (через порт), т.к. дальше уже идут списки каналов, спутники и так далее, т.е. то, что вы зальете и обычный прошивкой.
8. Убираем перемычку, отключаем Debug Mode
Не забудьте в конце прошивки корректно завершить программу EJAG, отключить от сети ресивер и аккуратно отключить JTAG-интерфейс. Так же снять перемычку для входа в отладочный режим. Далее подключаем ресивер уже через ком-порт и заливаем в него софт обычным способом.
Ручной поиск транспондера у спутника
Если вы заливаете «голую» прошивку, то есть необходимость вбить вручную нужные вам транспондеры. У некоторых ресиверов есть функция ручного ввода транспондеров. Для этого
Создаем устройство для соединения JTAG-интерфейса спутникового ресивера
Для сборки устройства нам понадобятся следующие элементы:
1. Резисторы с сопротивлением 100 Ом, 0,125 W – 4 шт.
2. Одна из микросхем серии 74HCT244, 74HC244 либо аналоги К1554АП5 (есть еще и 1554АП4, только у нее один из входов ОЕ «инверсный», а другой «прямой», это обязательно учитывайте при сборке схемы) и К1564АП4.
3. Компьютерный шнур с одним разъемом 25 pin М (со штырьками). Другой конец провода может быть с любым разъемом, это не столь важно, то есть подойдёт абсолютно любой, например модемный, от принтера или SCSI-вый. Длина шнура (кабеля) может быть любая, в примере мы будем использовать шнур длиною около трех метров.
4. Проводок-косичка от COM-порта. Выглядит она следующим образом:
Это девятижильный провод, с одного конца у него черный пластмассовый 10-контактный разъем, с другого – разъем COM-порта. Нам нужен собственно проводок с черным пластмассовым разъемом. Если у вас завалялся старый системник, можно там посмотреть этот проводок.
Небольшая рекомендация для тех, кто не знаком со схемами, не умеет паять и вообще не знает, как тут что делать, лучше обратитесь к знакомому электронщику, сэкономите много времени и нервов. Если вы все же хотите сделать это устройство своими руками, то запаситесь терпением и начинайте!
Проводок-косичка имеет не номерок, а цветовой маркер (красная/черная полоса на крайнем проводнике). Крайний проводник с маркером – первый. Дальше все проводники считаются по порядку: 2, 3, 4, …, 9.
Случается, что на платах нет маркировки первого вывода разъема JTAG. В таком случае пользуются мультиметром. Можно и просто подключать наугад, так как нет никакого риска выхода из строя устройств.
Записываем в ресивер загрузчик через интерфейс JTAG
Эта программа является универсальной при работе с несколькими процессорами. Раньше использовались другие программы, например, EJFlasher. Чтобы программа EJTAG TT работала, нужно LPT-порт компьютера поставить в режим ECP, кроме того, потребуется драйвер прямого доступа в NT-системе (Windows NT, 2000, XP, Vista и выше). Это драйвер GiveIO.sys, он идет в комплекте с программой. Если драйвер не установить, то программа не запустится, а на экране появится сообщение об ошибке. Также программа не будет работать, если кабель не подключен, если неправильно произведено подключение к разъему ресивера или же если сам ресивер неисправен.
Действовать надо в следующем порядке:
1. Присоединиться к ресиверу и полностью стереть флешку.
2. Отключить питание ресивера и JTAG (обязательно!).
3. Заново подключить питание.
4. Соединиться с ресивером и записать загрузчик.
Запуск программы выглядит так:
Здесь мы настраиваем определенные параметры настройки: тип процессора – NEC EMMA2, тип флеши, в данном случае, Intel 16 bit. Если у вас другая микросхема, то следует выбрать «AMD 16 bit» (только для ресиверов is, потому что у них только 2 типа схем – Intel и AMD-совместимости). Далее жмем «Коннект». Появляется окно, в котором находится отчет, какая флешка и какой процессор были найдены.
В выпадающем списке «Длина» устанавливаем значение «200000» и нажимаем «Стереть блок(и)». После этого, появится окно, в котором будет показано, какие блоки удалены. Если процедура прошла успешно, действуйте далее. Выключаем электропитание ресивера из розетки, отсоединяем JTAG, ждем несколько секунд и подсоединяем его обратно, включаем ресивер в розетку. Запускаем программу и нажимаем «Коннект». Появляется окно, в котором видно, в строке «Первые 16 байт флеши» одни значения FFFF.
Далее нажимаем «Записать». Появится окно, где нужно выбрать файл загрузчика. Выбираем его, и запись начинается. Продолжительность записи составляет около 30-ти секунд.
Когда процедура записи загрузчика завершится, выключаем ресивер, отсоединяем JTAG от него, подсоединяем его к COM-порту и непосредственно устанавливаем нужную прошивку.
Если ресивер через COM-порт не прошивается по какой-то причине, то можно воспользоваться и JTAGом. Просто открываете файл прошивки, в меню «Address» выбираете «Main Program» и нажимаете на запись. Через JTAG запись производится дольше, чем через COM-порт, так что придется подождать часок-другой.
Комментариев/отзывов к записи: 1
Arduino, MK-90 и другие
Программирование Arduino, оживление микроэвм Электроника МК-90, аппаратный хакинг.
Страницы
05.02.2010
JTAG на макетке
Микроконтроллеры ATmega можно условно разделить на две категории: те, что программируются только через ISP (шина из проводов MISO, MOSI, SCK + управление сбросом) и те, что имеют в дополнении к этому интерфейс JTAG.
Из набора «горячо любимых» Arduino-контроллеров к первой категории относятся ATmega8, ATmega168, ATmega328P. Но и во второй категории тоже присутствует один экземпляр: ATmega2560, используемый в Arduino/Freeduino MEGA 2560.
Для чего может потребоваться JTAG в повседневной жизни?
Фирменное устройство от ATMEL стоит немало (а я и так уже прикупил нанопаяльник, денег после этого осталось ноль отрицательное количество):
Соединяем схему через вилку ISP с программатором и запитываем от него же, затем зашиваем прошивку и выставляем фьюз-биты:
Если операция прошла успешно, полдела сделано. Можно аккуратно удалить ISP-разъем и преобразовать схему к следующему виду:
На макетке это выглядит так:
В классическом варианте линий JTAG чуть больше, чем на схеме:
Теперь разберемся с питанием. Желательно, чтобы внутрисхемный программатор питался от программируемой схемы. Этим сразу решается проблема стыковки уровней программируемой схемы и программатора. С другой стороны, если в программаторе есть конвертер уровней сигналов, различие VCC программатора и target уже не является проблемой (не считая усложнение схемы программатора).
С обязательной линии VTref должно подаваться напряжение питания устройства. По идее, он нужен вышеуказанному чипу конвертера уровней, внутри программатора. Но если JTAG ICE планирует питаться от target-а, то используется линия Vsupply. Для простоты, их можно объединить, но это не обязательно.
Подключаемся к программатору через AVR Studio, и если все правильно соединено, то можно будет прочитать сигнатуру и прошивку.
(устройство справа я обязательно рассмотрю позже, пока что могу только повторить, что внутри у него ATmega128)
EJTAG: аттракцион для хакеров
Кампания по продвижению нанокомпьютера black swift в самом разгаре (см. также публикацию на habrahabr). black swift построен на базе SoC Atheros AR9331, что позволило сделать его с одной стороны крошечными, недорогим, и малопотребляющим, а с другой стороны в распоряжении пользователя находится процессорное ядро MIPS 24Kc, работающее на частоте до 400 МГц.
Недавно на форуме black-swift.ru был задан вопрос
Есть потребность в документации по использованию JTAG-интерфейса в устройстве. Можно ли ожидать чего-нибудь в этом направлении?
EJTAG в процессорах с архитектурой MIPS
Почему именно JTAG? JTAG является последовательной шиной (возможно использовать только 4 сигнала), позволяющей соединять десятки устройств (возможно очень разных устройств!) в цепочку, и по мере необходимости передавать команды каждому из устройств. JTAG широко используется для тестирования соединений в печатных платах — в настоящее время БИС любой мало-мальски нетривиальной платы соединены в цепочку JTAG. Вполне резонно использовать JTAG не только для проверки соединений, но и для доставки в процессор команд управления отладкой.
Таким образом не надо смешивать JTAG и EJTAG: JTAG это интерфейс передачи данных; EJTAG — это стандартный для MIPS способ проводить внутрисхемную отладку, при котором используется JTAG.
Что надо для работы с EJTAG?
Для взаимодействия с инструментальной ЭВМ будет использоваться интерфейс командной строки, так что готовьте ваши терминалы.
Подключение макетки FT2232H к MR3020
Вот схема подключения (см. также статью на wikidevi.com):
Кому-то такая схема подключения JTAG покажется варварством, но в нашей простой ситуации она вполне оправдана.
Внешний вид MR3020 с подключённой макеткой FT2232H:
Подключение к UART
Вывод интерфейса UART из MR3020 не представляет проблем: на плате уже есть отверстия для впайки штырей.
Обозначения TX и RX на фотографии указаны с точки зрения AR9331, т.е. TX AR9331 (pin 1 на плате) надо подключать к RX FT2232 (BDBUS1).
Рекомендую подключить UART MR3020 к макетке, а саму макетку к инструментальной ЭВМ, и затем, включив питание MR3020, пронаблюдать при помощи minicom сообщения штатного загрузчика U-Boot.
Вот что для этого надо выполнить ряд шагов.
Проверка подключения макетки к инструментальной ЭВМ
Подключить UART MR3020 к макетке; подключить макетку FT2232H к инструментальной ЭВМ по USB; на инструментальной ЭВМ в командной строке запустить dmesg — убедиться, что появились сообщения вроде
Установка и настройка minicom
Установка программы minicom в основанных на Debian дистрибутивах очень проста:
Программа minicom очень добра к новичку — все настройки можно провести через меню, однако эта доброта имеет и обратную сторону — довольно неудобно объяснять как именно выставить необходимые настройки.
Чтобы не связываться с системой меню minicom поступим проще — произведём настройки при помощи конфигурационного файла. Для простоты сделаем глобальный конфигурационный файл, для этого от root’а выполним:
Запуск minicom
Для простоты запустим minicom от root’а;
При этом minicom использует настройки из файла /etc/minicom/minirc.USB1 (если конечно файл
/.minirc.USB1 не существует).
конечно более грамотно добавить своего пользователя в группу dialout. ; но давайте не будем усложнять.
Теперь включаем питание MR3020 и наблюдаем в minicom сообщения от U-Boot:
Далее будут выданы сообщения о загрузки linux, но они нам не очень-то и интересны; если какой-то разумный вывод из UART поступает, то можно переходить к подключению JTAG.
Подключение к JTAG
openocd: начальная настройка
Сборка barebox
Образ barebox для AR9331 должен состоять из инструкций процессора MIPS32, а наша инструментальная ЭВМ почти наверняка построена на базе процессора с системой команд x86 или amd64 (так их, во всяком случае, называет Debian).
Для того, чтобы при помощи процессора x86/amd64 породить инструкции MIPS32, нам понадобится кросс-компилятор (то есть компилятор, который исполняется на ЭВМ с одной архитектурой команд, а генерирует код для ЭВМ с другой системой команд).
Сборка кросс-компилятора с требуемыми свойствами — задача совсем не тривиальная и для её облегчения создано немало всяких инструментов, известных по ключевым словам buildroot, openwrt, crosstool-ng.
Однако в этой демонстрации мы пойдём простым путём — скачаем готовый кросс-компилятор от MentorGraphics.
Итак, скачиваем и распаковываем в /opt готовый кросс-компилятор:
Произведём сборку barebox:
openocd: более полная настройка
В openocd принята довольно разумная практика, при которой описание dongl’а, описание целевого процессора, а также текущий сценарий отладки принято размещать в разных файлах, но в этой публикации для упрощения изложения мы так поступать не будем.
openocd: загрузка barebox
Итак, загрузим и запустим barebox (Не забудьте про джампер отключения ПЗУ. Также не забывайте держать нажатой кнопку SW2 в момент включения питания MR3020! Наберитесь терпения — загрузка занимает более 100 секунд):
После окончания работы openocd в окне minicom мы можем наблюдать сообщения о старте barebox’а:
наблюдать более оптимистическое
Хотя barebox-2015.01.0 поддерживает аппаратуру SoC AR9331 в минимальном объёме (интерфейсы USB и Ethernet не поддерживаются), но прочитать и записать загрузочное ПЗУ barebox’у вполне по силам.
Что дальше? (вместо послесловия)
Загрузка данных в ОЗУ — это не предел возможностей EJTAG. Но нельзя объять необъятное — в публикации не освещены вопросы собственно отладки — этот материал остаётся для будущих публикаций.
Законное негодование вызывает низкая скорость передачи данных — менее 2 Кбайт в секунду, этот момент также надо попытаться исправить.