Прошивка через JTAG: схема, распиновка, инструкция
JTAG — это аббревиатура, которая расшифровывается как «Joint Test Action Group», в переводе это значит специализированный интерфейс для отладки и программирования. Данный микропроцессорный интерфейс служит, как понятно из названия, для отладки и мониторинга работы процессора.
Что касается спутников ресиверов, то JTAG дает возможность перепрошить микросхему flash-памяти, если нет возможность прошить ресивер стандартным способом, через кабель к компьютеру. Сегодня мы разберем прошивку через JTAG-интерфейс на примере спутникового ресивера Globo X90 для его восстановления. Ранее мы уже научились прошивать его через кабель (см. предыдущую часть)
Зачем нужен JTAG
Самый большой плюс в JTAG — это возможность внутрисхемного программирования микросхем памяти ресиверов. С его помощью восстанавливать потерянное или испорченное содержимое флэш-памяти, при этом не выпаивая микросхем и без необходимости использования программаторов. То есть JTAG нужен именно тогда, когда неисправен загрузчик , что делает невозможным заливку ПО штатным способом.
Минусом является тот факт, что интерфейс JTAG, в большинстве своём, на всех ресиверах разный — единый стандарт существует, но каждый производитель его модифицирует по-своему. Globo X90 работает на процессоре ALI 3329С .
Прошивка через JTAG куда сложней обычной процедуры, поэтому к ней прибегают только в самом крайнем случае, когда ресивер совсем не подаёт признаков жизни: не загружается, не горит индикация, прошили другой прошивкой, либо после прошивки у вас только черный экран
JTAG прошивка по шагам
Для того, что бы запрограммировать флэш ресивера с помощью JTAG кроме собственно «пациента», т.е. ресивера, который нам необходимо «оживить», нам нужно иметь следующее:
1. Собрать интерфейс (переходник) от порта ресивера к порту ПК
Собрать адаптер для JTAG не так сложно, как кажется на первый взгляд. Для Globo X90, да и вообще для всех ресиверов, предпочтительным вариантом сборки является вариант на микросхеме 74HC244N (её еще называют даташит). Распиновка JTAG:
Так выглядит собранная схема:
Со стороны ресивера это будет специальный разъём, он иногда даже так и подписан — JTAG
Второй «конец», который уходит в сторону ПК — это обычный LPT-кабель, который можно купить в любом компьютерном магазине. О том, как можно собрать всё это хозяйство:
2 . Найти LPT-порт на ПК
Параллельный порт на компьютере сейчас можно увидеть только в музее, поэтому можно докупить специальный LPT-PCI контроллер , который позволяет подключить ваш JTAG к системному блоку ПК, у которого нет LPT порта (а это будет в 99,9% случаев).
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-память. Здесь есть два варианта
- Только загрузчик (лоадер) — файл с расширением .bin. это та часть содержимого флэш ресивера, которая обеспечивает загрузку в него ПО(софта) через порт. Если мы имеем случай, когда нам для заливки нужен только загрузчик(лоадер) ресивера, то поступаем одним из двух способов – или скачиваем готовый файл с загрузчиком, или делаем его самостоятельно. Для этого в HEX-редакторе отрезаем от файла ПО первые 65536 байт и сохраняем как отдельный файл *.bin. Это и есть загрузчик.
- Полный дамп . Дамп для JTAG, в случае, с ресиверами Globo — это обычный дамп, который используется для прошивки. Единственное, необходимо будет сменить расширение файла с *.abs на *.bin
6. Переводим ресивер в отладочный режим
Для прошивки также потребуется перевод ресивера в режим отладки, он же Debug Mode. Способы его перевода зависят от конкретной модели приставки, конкретно для Globo X90 cсоединить (замкнуть) перемычкой предназначенные для этого контактные площадки на плате, где стоит обозначение JP1 . Так же бывает, что надписи JP1 на ресивере нет, тогда нужно выпаять резистор R32
Обратите внимание на точки подключения. Они должны совпадать с тем, как вы собрали переходник. В некоторых Globo-ресиверах бывает обратная последовательность — не перепутайте. На некоторых ресиверах можно сделать обычную перемычку для перевода в отладочный режим
Можно использовать перемычку с IDE-винчестеров
Так это будет выглядеть:
7. Настраиваем EJTAG и прошиваем
Настройки в нашей JTAG tool выставляем так же как на скриншоте:
Если EJTAG не увидит ресивер, попробуйте поменять тип флеш памяти в последнем столбике. Вообще, здесь можно пробовать менять любые параметры, чтобы ресивер определился
В некоторых мануалах пишут, что предварительно нужно стирать флеш — делать этого не стоит, ни поблочно, ни полностью, перед записью программа сама сотрёт столько памяти, сколько ей надо записать, она умеет это делать. Далее жмём «коннект» . В окне программы должен побежать текст лога.
Если после нажатия кнопки «коннект», у вас выходит ошибка «флэш ID нету в *.ini –файле», то попробуйте поменять настройки в программе, как и советовали выше, нужно попробовать все вариации галочек и точек в настройках. Если и это не приведет к успеху, то тут стоит насторожиться — проверить питание процессора, напряжение с БП — есть вероятность того, что флеш-память уже «умерла», тогда никакой JTAG уже не поможет. Следующим шагом жмём «Записать» и в окне проводника выбираем нужный файл с дампом или загрузчиком (лоадером)
При необходимости, как мы и писали выше, EJTAG сотрёт самостоятельно нужный блок памяти и начнет запись.
Здесь есть небольшой нюанс — достаточно залить около 50-70% прошивки через JTAG (желательно, конечно, полностью), но если у вас оборвалась прошивка на этом этапе, то можно попробовать прошивать стандартно (через порт), т.к. дальше уже идут списки каналов, спутники и так далее, т.е. то, что вы зальете и обычный прошивкой.
8. Убираем перемычку, отключаем Debug Mode
Не забудьте в конце прошивки корректно завершить программу EJAG, отключить от сети ресивер и аккуратно отключить JTAG-интерфейс. Так же снять перемычку для входа в отладочный режим. Далее подключаем ресивер уже через ком-порт и заливаем в него софт обычным способом.
Ручной поиск транспондера у спутника
Если вы заливаете «голую» прошивку, то есть необходимость вбить вручную нужные вам транспондеры. У некоторых ресиверов есть функция ручного ввода транспондеров. Для этого
- Нажмите «Меню» на пульте
- Далее выберите «Установка»
- Следующий пункт «Настройка антенны и поиск каналов»
- Нажмите желтую кнопку на пульте (PVR) и попадаете в режим редактирования транспондеров.
Распиновка jtag для altera
Здесь приведены цоколевки попадавшихся мне интерфейсов JTAG.
[JTAG10]
Эта версия JTAG используется для подключения микроконтроллеров AVR (например, ATmega16) к внутрисхемному эмулятору JTAGICE mkII. Никакие нагрузочные резисторы в целевой плате не нужны. Резисторы, показанные на схеме необходимы для развязки, если ножки микроконтроллера с этими сигналами используются в пользовательской программе (чего следует избегать). Для подключения необходим минимум из 6 проводов — TCK, TDO, TDI, TMS, VTref and GND. Опциональным является сигнал nSRST, но его лучше развести. Сигнал nTRST не используется, он зарезервирован для совместимости с другим железом. Пример подключения к целевой плате и программирование см. [4, 5, 6].
[JTAG14]
Эта версия может использоваться вместе с микроконтроллерами AT91SAM7 на некоторых отладочных платах, например Tahoe — AT91SAM7LIGHT, отладочная плата, OrCAD (FREE) (site:svn.berlios.de). Для подключения к отладчику J-LINK необходим переходник с JTAG20 на JTAG14.
[JTAG20]
Полная, стандартная версия JTAG, использующаяся на большинстве отладочных плат — например AT91SAM7X-EK от Atmel или sam7-ex256 от Olimex. Для подключения к эмулятору J-LINK переходник не нужен.
[ARM-20 JTAG]
Эта разводка используется на большинстве систем, основанных на микроконтроллерах ARM.
1 | VREF | ![]() | ![]() | VSUPPLY | 2 |
3 | nTRST | ![]() | ![]() | GND | 4 |
5 | TDI | ![]() | ![]() | GND | 6 |
7 | TMS | ![]() | ![]() | GND | 8 |
9 | TCK | ![]() | ![]() | GND | 10 |
11 | RTCK | ![]() | ![]() | GND | 12 |
13 | TDO | ![]() | ![]() | GND | 14 |
15 | nSRST | ![]() | ![]() | GND | 16 |
17 | DBGRQ | ![]() | ![]() | GND | 18 |
19 | DGBACK | ![]() | ![]() | GND | 20 |
[ARM-14 JTAG]
Урезанная версия ARM-20.
1 | VREF | ![]() | ![]() | GND | 2 |
3 | nTRST | ![]() | ![]() | GND | 4 |
5 | TDI | ![]() | ![]() | GND | 6 |
7 | TMS | ![]() | ![]() | GND | 8 |
9 | TCK | ![]() | ![]() | GND | 10 |
11 | TDO | ![]() | ![]() | nSRST | 12 |
13 | VREF | ![]() | ![]() | GND | 14 |
[MIPS EJTAG]
JTAG на устройствах с микроконтроллерами MIPS, которые можно найти на электронике с Wi-Fi.
1 | nTRST | ![]() | ![]() | GND | 2 |
3 | TDI | ![]() | ![]() | GND | 4 |
5 | TDO | ![]() | ![]() | GND | 6 |
7 | TMS | ![]() | ![]() | GND | 8 |
9 | TCK | ![]() | ![]() | GND | 10 |
11 | nSRST | ![]() | 12 | ||
13 | DINT | ![]() | ![]() | VREF | 14 |
[Toshiba MIPS]
1 | nTRST | ![]() | ![]() | — | 2 |
3 | TDI | ![]() | ![]() | GND | 4 |
5 | TDO | ![]() | ![]() | GND | 6 |
7 | TMS | ![]() | ![]() | GND | 8 |
9 | TCK | ![]() | ![]() | GND | 10 |
11 | VREF | ![]() | ![]() | GND | 12 |
13 | nSRST | ![]() | ![]() | — | 14 |
15 | — | ![]() | ![]() | — | 16 |
17 | — | ![]() | ![]() | — | 18 |
19 | — | ![]() | ![]() | — | 20 |
[Philips MIPS]
1 | nTRST | ![]() | ![]() | GND | 2 |
3 | TDI | ![]() | ![]() | GND | 4 |
5 | TDO | ![]() | ![]() | GND | 6 |
7 | TMS | ![]() | ![]() | GND | 8 |
9 | TCK | ![]() | ![]() | GND | 10 |
11 | nSRST | ![]() | ![]() | GND | 12 |
13 | — | ![]() | ![]() | GND | 14 |
15 | — | ![]() | ![]() | GND | 16 |
17 | — | ![]() | ![]() | GND | 18 |
19 | — | ![]() | ![]() | GND | 20 |
[AVR JTAG]
Широко используемая цоколевка, совместимая с AVR, Altera JTAG и др.
1 | TCK | ![]() | ![]() | GND | 2 |
3 | TDO | ![]() | ![]() | VREF | 4 |
5 | TMS | ![]() | ![]() | nSRST | 6 |
7 | — | ![]() | ![]() | nTRST | 8 |
9 | TDI | ![]() | ![]() | GND | 10 |
[Altera ByteBlaster]
Широко используемая цоколевка, совместимая с AVR, Altera JTAG и др.
1 | TCK | ![]() | ![]() | GND | 2 |
3 | TDO | ![]() | ![]() | VREF | 4 |
5 | TMS | ![]() | ![]() | — | 6 |
7 | — | ![]() | ![]() | — | 8 |
9 | TDI | ![]() | ![]() | GND | 10 |
[Maxim MAXQ JTAG]
Цоколевка, частично совместимая с AVR JTAG.
1 | TCK | ![]() | ![]() | GND | 2 |
3 | TDO | ![]() | ![]() | VREF | 4 |
5 | TMS | ![]() | ![]() | nSRST | 6 |
7 | — | ![]() | ![]() | VSUPPLY | 8 |
9 | TDI | ![]() | ![]() | GND | 10 |
[Actel FlashPro3 JTAG]
1 | TCK | ![]() | ![]() | GND | 2 |
3 | TDO | ![]() | ![]() | — | 4 |
5 | TMS | ![]() | ![]() | VJTAG | 6 |
7 | VPUMP | ![]() | ![]() | TRST | 8 |
9 | TDI | ![]() | ![]() | GND | 10 |
[PLD-JTAG]
1 | VCC | ![]() |
2 | TDO | ![]() |
3 | TDI | ![]() |
4 | nSRST | ![]() |
5 | ||
6 | TMS | ![]() |
7 | GND | ![]() |
8 | TCK | ![]() |
[Cypress Ultra-isr]
1 | GND | ![]() | ![]() | TMS | 2 |
3 | JTAGEN | ![]() | ![]() | TCK | 4 |
5 | ISR | ![]() | ![]() | TDI | 6 |
7 | VREF | ![]() | 8 | ||
9 | TDO | ![]() | ![]() | GND | 10 |
[Lattice JTAG ispDOWNLOAD 2x5pin]
1 | TCK | ![]() | ![]() | — | 2 |
3 | TMS | ![]() | ![]() | GND | 4 |
5 | TDI | ![]() | ![]() | VREF | 6 |
7 | TDO | ![]() | ![]() | GND | 8 |
9 | nTRST | ![]() | ![]() | nISPEN | 10 |
[Lattice JTAG ispDOWNLOAD 9pin]
1 | VCC | ![]() |
2 | TDO | ![]() |
3 | TDI | ![]() |
4 | ispEN# | ![]() |
5 | nTRST | ![]() |
6 | TMS | ![]() |
7 | GND | ![]() |
8 | TCK | ![]() |
9 | — | ![]() |
[TI MSP430]
Цоколевка JTAG Texas Instruments для микроконтроллеров MSP430.
1 | TDO | ![]() | ![]() | VREF | 2 |
3 | TDI | ![]() | ![]() | — | 4 |
5 | TMS | ![]() | ![]() | TCLK | 6 |
7 | TCK | ![]() | ![]() | VPP | 8 |
9 | GND | ![]() | ![]() | — | 10 |
11 | nSRST | ![]() | ![]() | — | 12 |
13 | — | ![]() | ![]() | — | 14 |
[Xilinx JTAG]
Xilinx Parallel IV 14pin JTAG.
1 | VGND | ![]() | ![]() | VREF | 2 |
3 | GND | ![]() | ![]() | TMS | 4 |
5 | GND | ![]() | ![]() | TCK | 6 |
7 | GND | ![]() | ![]() | TDO | 8 |
9 | GND | ![]() | ![]() | TDI | 10 |
11 | GND | ![]() | ![]() | — | 12 |
13 | GND | ![]() | ![]() | — | 14 |
[Xilinx JTAG 9pin]
Xilinx Parallel III и IV 9pin JTAG.
1 | VREF | ![]() |
2 | GND | ![]() |
3 | — | ![]() |
4 | TCLK | ![]() |
5 | — | ![]() |
6 | TDO | ![]() |
7 | TDI | ![]() |
8 | — | ![]() |
9 | TMS | ![]() |
[Linksys WRT54G(S) — используется как EJTAG]
Цоколевки интерфейсов JTAG, используемые на роутерах Linksys WRT54G / WRT54GS.
1 | nTRST | ![]() | ![]() | GND | 2 |
3 | TDI | ![]() | ![]() | GND | 4 |
5 | TDO | ![]() | ![]() | GND | 6 |
7 | TMS | ![]() | ![]() | GND | 8 |
9 | TCK | ![]() | ![]() | GND | 10 |
11 | nSRST | ![]() | ![]() | GND | 12 |
[Bosch EDC16/MED9 car ECU]
Bosch EDC16 BDM JTAG.
1 | PORRESET | ![]() | ![]() | ? | 2 |
3 | TMS | ![]() | ![]() | NC | 4 |
5 | DSCK | ![]() | ![]() | GND | 6 |
7 | DSDI | ![]() | ![]() | DSDO | 8 |
9 | +12V | ![]() | ![]() | VLFS1 | 10 |
11 | +5V | ![]() | ![]() | VLFS0 | 12 |
13 | NC | ![]() | ![]() | NC | 14 |
[Motorola PowerPC BDM port]
1 | VLFS0 | ![]() | ![]() | SRESET | 2 |
3 | GND | ![]() | ![]() | DSCK | 4 |
5 | GND | ![]() | ![]() | VLFS1 | 6 |
7 | HRESET | ![]() | ![]() | DSDI | 8 |
9 | VCC | ![]() | ![]() | DSDO | 10 |
[Какую цоколевку JTAG выбрать?]
Если Вы разрабатываете электронное устройство на основе микроконтроллера ARM или MIPS, то рекомендуется выбрать соответствующий коннектор (EJTAG или ARM JTAG), чтобы сохранить совместимость со стандартным инструментарием разработки. В других случаях рекомендуется выбрать цоколевку JTAG, рекомендованную производителем Вашего чипа, или выбрать AVR/Byteblaster JTAG (который совместим со многими продуктами на рынке), или стандартный 8pin коннектор PLD JTAG.
Если у Вас в устройстве есть несколько чипов с JTAG, то нужно либо предоставить для каждого отдельный коннектор JTAG (это самое простое, но не экономное решение), либо соединить интерфейсы JTAG в цепочку (в этом случае коннектор JTAG будет только один). Обычно JTAG поддерживает множество устройств в одной цепочке JTAG, но многие инструменты не поддерживают эту возможность. Ознакомьтесь с документацией на Ваши средства разработки, перед тем как соединять устройства в цепочку JTAG.