Прошивка ML-2160 V1.01.02.00 с понижением через JTAG

Статья описывает процесс прошивки принтеров серии ML-2160 с текущей версией V1.01.02.00, V1.01.02.01 и выше на программаторе JTAG.

Какие модели прошиваются через JTAG

  • ML-2160, ML-2165, ML-2167 с версиями V1.01.02.00, V1.01.02.01; (кроме ML-2165W и ML-2168W, у них SPI Flash, также попадаются ML-2160 с версией 1.01.02.03, по отзывам никто не смог понизить);
  • ML-1610, ML-1640, ML-1660, ML-1670, ML-1860, ML-1910, ML-2015, ML-2040, ML-2520;
  • Phaser 3140, Phaser 3155, Phaser 3160.

Информация в статье касается только серии ML-2160, для других моделей необходимо искать схему подключения JTAG, загрузчик, а также список команд.

Что потребуется

  1. Программатор J-Link v8. Оригинальный стоит более 300$, но китайские клоны на Aliexpress продаются за 10-15$ и отлично подходят для нашей задачи. Из внушающих доверие лотов мы нашли такой или еще дешевле без переходников (не понадобятся)
  2. Паяльник с тонким жалом, навыки аккуратной пайки т.к есть сложный момент с отпаиванием ножки процессора.
  3. Компьютер с ОС Windows XP, 7, 8, 10 (x64/x86) и ПО на программатор (скачать можно ниже).
  4. Оригинальная прошивка версии 1.01.01.11 (скачать).

Подготовка к прошивке

  1. В комплекте с программатором J-Link находится 20-контактный шлейф с двумя разъёмами. С одной стороны необходимо отрезать разъём и подготовить провода (залудить, лишние загнуть) по этой схеме:
    Выводы шлейфа

    Фото выше обрезано для наглядности, не отрезайте шлейф до такой степени! Также не вырезайте неиспользуемые провода: по отзывам появляются наводки, которые могут помешать процессу
  2. Устанавливаем JLinkARM 4.24f. После запуска может появиться сообщение "A new firmware version is available..." — откажитесь от обновления, если не уверены, что программатор оригинальный, иначе может не пройти проверку по серийному номеру (в версии 4.24f такой проверки нет).
  3. Скачиваем загрузчик boot.bin и сохраняем в корень диска C (путь получится C:\boot.bin).

Прошивка на примере ML-2160 V1.01.02.00

Есть несколько вариантов подключения. Мы описываем тот, в котором после подключения JTAG плата форматирования устанавливается обратно в принтер, debug-интерфейс при этом не используется, внешнее питание на плату подавать не нужно.
  1. Выводы № 1, 2 на шлейфе объедините между собой, заизолируйте и загните в сторону шлейфа: эти контакты не будут использоваться в нашем варианте подключения.
  2. Снимите боковую крышку принтера со стороны USB-порта (сзади один болт, остальное — защёлки).
  3. Отключите все разъёмы от платы форматирования, извлеките плату.
  4. Выводы № 3, 5, 9, 13 припаяйте в соответствии с фото:
    Подключение JTAG ML-2160
  5. Вывод № 20 — к земле, например на контакт debug:
    Подключение JTAG к ML-2160
  6. Вывод № 7 шлейфа самый ответственный: его нужно подключить к одной ножке процессора, предварительно аккуратно отпаять и слегка (1-2 мм, не больше) приподнять от платы, чтобы не было контакта. Далее к ней припаять тонкий гибкий провод и зафиксировать (можно клеем к плате, скотчем), а уже к нему подцеплять 7-ой вывод шлейфа.
    Подключение JTAG к процессору ML-2160
    Очень важно не отломать ножку. В противном случае потребуется тратить время и подручными средствами (булавкой например) пытаться подключаться к остаткам от ножки. После прошивки припаивать ножку к плате не обязательно: на работоспособность принтера она не влияет.
  7. Проверьте ещё раз правильность подключения всех контактов, установите плату форматирования обратно в принтер и подключите все разъёмы.
  8. Подключите программатор и сам принтер к USB-портам компьютера (желательно использовать качественные USB-кабели, длиной не более 1,2 м).
  9. Включите принтер в принудительном режиме: удерживая кнопку "Печать экрана" (выше кнопки включения) нажмите один раз кнопку питания, кнопку "Печать экрана" продолжайте удерживать 3 секунды, затем отпустите. Если сделали правильно — не должно быть звука работы двигателя, индикатор питания должен непрерывно гореть зелёным.
  10. Запустите J-link Commander из меню Пуск.
  11. Должен определиться процессор:  Found ARM with core Id 0x07926F0F (ARM9) .
    Лог JTAG ML-2160
  12. Если у вас так, как на скриншоте выше — введите  h  и нажмите Enter:
    Лог JTAG ML-2160
  13. Набираем  be  и Enter.
  14. Вводим  loadbin c:\boot.bin, 0x40700000  (файл boot.bin скачивали заранее), нажимаем Enter и ожидаем приглашения на ввод следующей команды.
  15. Команда  setpc 0x40700050  и нажимаем Enter.
  16. Последняя команда —  g . Принтер должен вернуться в принудительный режим загрузки. Если вы не вынимали картридж, то можете услышать, как двигатель крутится в обратную сторону, это нормально.
    Лог JTAG ML-2160
  17. Ничего не отключая, сразу прошиваем оригинальной или фикс-прошивкой более низкой версии (перетаскиваем файл прошивки на usbprns2.exe).
  18. После автоматической перезагрузки принтера проверьте версию прошивки, если она понизилась — поздравляем, процесс завершён удачно :) Можно отключать JTAG от платы (двигатель перестанет крутиться в обратную сторону) и закрывать крышку. Напоминаем, что припаивать ножку процессора обратно к плате смысла нет.

Частые проблемы прошивки через JTAG и решения

Пишет «Error: Write memory error @ address 0x{любой адрес}, word access: Core error»

  1. Проверьте ещё раз правильность подключения к JTAG.
  2. Возможно, вы используете неродной шлейф к адаптеру J-Link или, например, отрезали лишние выводы (появляются помехи и ошибки).
  3. Есть вероятность, что вам попался некачественный программатор.
  4. Можно попробовать уменьшить скорость подключения: до команды  loadbin  наберите  speed 50 .

Пишет «No devices found on JTAG chain»

  1. Проверьте правильность подключения JTAG.
  2. Убедитесь, что вы отпаяли правильную ножку на процессоре (сравните с фото), она не отломалась и не контактирует с платой.
  3. Проверьте, что принтер действительно входит в принудительный режим.

На 16-ом пункте (после команды g) принтер не принимает оригинальную прошивку

Если текущая версия прошивки 1.01.02.00 — попробуйте обновить до 1.01.02.01 (скачать), а затем попробовать понизить заново. По отзывам часто помогает (спасибо пользователям DaDe и Илья за информацию).

Ошибка «TCK (pin 9) low» или «Reset pin is high but should be low»

Внутри JTAG-адаптера должен быть трёхпиновый переключатель (подписан VSupply, V3.3 и т.п). Попробуйте переключить в другое положение и попробуйте снова.

Ошибка «Could not measure total IR len. TDO is constant high»

Проверьте правильность подключения, убедитесь, что дорожки микросхемы не замкнулись (пользователь burago ниже в комментариях писал об этом). Значение VTarget в J-Link Commander должно быть больше 3,2 В.

После команды «h» пишет MMU Off, ICache Off, DCache Off (должно быть On)

Причина может быть в пайке или нестабильном питании 3,3 В.

Пишет «WARNING: CPU core not found»

По какой-то причине J-Link "не видит" процессор.

  1. Внутри адаптера есть 3-х пиновый джампер (может быть подписан как VSupply, V3.3 и т.п) — переключите его в другое положение и попробуйте снова.
  2. Если вы использовали неродной шлейф — попробуйте с родным. Из-за некачественных/длинных проводов такое уже случалось.
  3. Проверьте правильность подключения JTAG к плате принтера, иногда нет контакта из-за пайки.
  4. Есть вероятность, что вам попался некачественный программатор.

В логе не показывает серийный номер адаптера, процессор не определяется

Пример лога
SEGGER J-Link Commander V4.24f (‘?’ for help)
Compiled Mar 29 2011 15:37:59
DLL version V4.24f, compiled Mar 29 2011 15:37:40
Firmware: J-Link ARM V8 compiled Nov 14 2012 22:34:52
Hardware: V8.00
J-Link>

То есть после версии Hardware не выводится серийный номер адаптера, напряжение питания и информация о процессоре.

Если же ввести  h  — пишет, что процессор принтера не найден:

Пример лога
J-Link> h .
WARNING: CPU core not found.
****** Error: Could not read hardware status!
****** Error: Can not read register 8 (CPSR) while CPU is running
****** Error: Can not read register 9 (R15 (PC)) while CPU is running
PC: (R15) = 00000000, CPSR = 00000000 (Unknown mode, ARM)

Варианты решения

  1. Отключите программатор J-Link от USB. Вскройте корпус. Внутри есть 3-х пиновый джампер (подписан иногда как VSupply, V3.3) — переключите его в другое положение и попробуйте снова.
  2. Возможно, проблема в неправильном подключении JTAG к плате форматирования принтера.
  3. Если вы использовали неродной шлейф — попробуйте с родным.

Благодарим пользователя под ником Гоги за информацию о понижении через JTAG!


  1. DaDe:

    Не подскажите, может кто-нибудь сталкивался с такой проблемой.

    Все делается правильно, но после подачи команды g принтере перезагружается в обычный режим и уже не принимает прошивку.

    • OverChip:

      Здравствуйте. Была один раз такая проблема (ниже в комментариях), но увы, автор не сообщил о решении. Причин может быть масса, debug-кабеля у вас нет случайно?

      • DaDe:

        Debug был подключен, но он ничего интересного не сообщал, чтобы могло дать понять в чем трабла.

        Я разобрался в чем проблема или как ее решить.
        Проблема оказалась в кривой прошивке 2.00 (хотя как она могла повредиться, там же ЭЦП).
        Пришлось обновиться до 2.01 и после этого все пошло как надо.

  2. art4e:

    Jtag не видит процессор, пробовал два варианта данных устройств.
    Выдает: Could not measure total IR len. TDO is constant high.
    CPU core not found.
    Подключение проверялось не раз, пока тыкался отломал ножку (( подпоял и закрепил на термоклей контакт. Шлейф порезал родной, какие ещё могут быть подводные камни.

    • OverChip:

      Здравствуйте. Какое показывает напряжение в J-Link Commander (VTarget)? В самом начале выводит серийный номер самого программатора (S/N)?

      • burago:

        Здравствуйте. Пришлось прошить два принтера с одной партии. Первый прошился сразу и с первого раза, а второй ни в какую. Пайку даже под микроскопом смотрел. Все аккуратно. Уже голову сломал.
        Тут уже было такое у людей, может кто подскажет? может каку-нибудь мелочь упустил. Очень странно то, что один из двух принтеров прошился и работает.
        VTarget = 3.274V
        Info: Could not measure total IR len. TDO is constant high.
        Ну и cpu not found.
        Вскрыл принтер который прошился и еще раз попробовал подключить к jtag и он подключился. Мистика.

        • burago:

          Вот и сам могу ответить на свой вопрос. Конечно же виновата мелочь. Отпаивая ножку на чипе и я случайно кинул соплю на соседнюю ножку. Причем не видно было ее ни как, тонюсенькая и под флюсом. Узнал прозвонкой соседних ножек.

          • OverChip:

            Здравствуйте. Спасибо за информацию! Добавили в FAQ после статьи про ваш случай.

  3. Santas:

    Здравствуйте,такая трабла-на 14 пункте -Теперь вводим loadbin c:\boot.bin, 0x40700000….После ввода команды получаю target memory @ 0х0000000..Вопрос как быть?подскажите куда копать буду признателен.

    • OverChip:

      Здравствуйте. Пытались задать уточняющие вопросы на тот e-mail, который вы указали при отправке комментария, но он не существует. Отправьте пожалуйста весь лог J-link Commander’а.

  4. spi99:

    По вашей ссылке заказал из Китая программатор, получил, установил, подпаял, трижды все проверил и запустил программу. Вот что выдала —

    Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFULL
    VTarget = 1.326V
    Info: Could not measure total IR len. TDO is constant high.
    Info: Could not measure total IR len. TDO is constant high.
    No devices found on JTAG chain. Trying to find device on SWD.
    No device found on SWD.
    Failed to identify target. Trying again with slow (4 kHz) speed.
    Info: Could not measure total IR len. TDO is constant high.
    Info: Could not measure total IR len. TDO is constant high.
    No devices found on JTAG chain. Trying to find device on SWD.
    No device found on SWD.
    No device found at all. Selecting JTAG as default target interface.

    Инфу о коробке читает нормально — просто сюда не скопировал. Но почему-то показывает напряжение низкое. Из-за чего может быть? Заранее спасибо!

    • OverChip:

      Здравствуйте. А попробуйте вскрыть корпус программатора, внутри есть трёхпиновый джампер (бывает, подписан как VSupply, V3.3) — переключите его в другое положение и попробуйте снова. У наших клиентов уже было, что из-за это показывало заниженное напряжение и не определялся процессор.

  5. Denis:

    Здравствуйте, подскажите, как быть?
    Такая ситуация.
    Все этапы проходят правильно, как у вас на скринах.
    Но после отправки команды g, принтер не переходит в режим принудительной загрузки, а включается и при этом начинает крутить двигателем в обратную сторону.

    • OverChip:

      Здравствуйте.
      То, что крутит в обратную сторону это нормально, когда отпаяете JTAG будет правильно.
      А вот почему не входит в принудительный сложно сказать. Начните с этого момента.

  6. Андрей:

    Здраствуйте, спасибо за данный материал. Вот все подготовил завтра собираюсь прошивать. Мучит сомненье, дело в том что Jtag 430 от фирмы omilex 14 пиновый в отличие от описываемого здесь 20 пин. Подскажите, если знаете там все аналогично, т.к. я сделал согласно его распиновки, и вашим указаниям, все подпаял, и вот теперь сижу боюсь ) включить. Спасибо заранее.

    • OverChip:

      Здравствуйте. К сожалению, насчёт Jtag 430 ничего не можем сказать: никогда не пробовали его в действии (да что уж скрывать, никогда не слышали о нём :), клиенты тоже только про J-Link v8 отписывались. Теоретически, если выводы там такие же — может и получится понизить (хотя если с J-Link понижается далеко не с первого раза, то неизвестно, как будет здесь :)

      Нужно также разузнать, какие команды вводить, по аналогии с J-Link Commander.

  7. Владимир:

    Здравствуйте! помогите пожалуйста найти программатор как у Вас, поиск по Вашему ключевому слову на алиэкспресе ничего не дал =( либо ссылочку на Вашу модель программатора. заранее спасибо

    • OverChip:

      Здравствуйте. Например, наш клиент покупал такой.

      Но вот подешевле, правда без переходников (они в принципе не нужны для понижения) у того же продавца. Продавец крупный, проблем быть не должно. Но тем не менее советую следить за таймером защиты и распаковывать/проверять работу адаптера на видео.

  8. Рафа:

    прошивал через jtag,версия понизилась до 12-ой,но не хочет прошиваться фиксом,для этого по новой заходил через коммандер принтер самостоятельно становится в принудительный режим,но не прошивается.

  9. 777:

    Все делаю как описано, все идет как по скиринам на экране, НО все равно горять две красные лампочки, УЖЕ два принтера погубил.

    • OverChip:

      В каком смысле погубили? Убить аппараты по этой инструкции вряд ли возможно. Раз вы пишите, что «горят две красные лампочки», значит всё не так плохо.

      На успех понижения оказывают влияние множество факторов: сам программатор, кабели, пайка, ОС, драйверы. Даже обычная прошивка принтера не всегда проходит нормально, что уж говорить о понижении через программатор.

      Большинство людей понижают всё-таки удачно по этой инструкции.

  10. Александр:

    Спасибо огромное за гайд, очень помогло, но автор почему не пишите о том, что 2 первых вывода JTAG (VCC) нужно припаять к Debug, это очень важно, если не подать 3.3V процессор не определится в коммандере.

    • OverChip:

      По этой инструкции плата с подключенным JTAG устанавливается обратно в принтер, соответственно и питание CPU берётся от БП принтера. Наши клиенты не подпаивали 1, 2 выводы шлейфа и всё нормально прошивалось :)

  11. bagher:

    I guide you
    But it did not resolve the problem
    Again, thank you for your help

    • OverChip:

      I got it. Unfortunately, we have not seen this error before. It’s necessary to learn how you connect JTAG to the printer and trying different solutions.

  12. bagher:

    error: write memory error @ address 0x40700400. word access:memory access timeout
    Пожалуйста, помогите мне в этом случае
    спасибо

  13. Илья:

    Здравствуйте. Подскажите каким програматаром для jtag лучше востанавливать, с COM, LPT ИЛИ USB интерфейсом.

  14. Сергей:

    Здравствуйте!!! Товарищи, выручайте…, после ввода команды: «loadbin d:\boot.bin, 0x40700000» выбивает, якобы ошибка загрузки в память, тобишь не заливается boot.ini, что может быть и просьба отпишитесь по-подробнее, заранее благодарен… P.S. можно в скайп или icq отписаться(sstsupa или 401530064)

    • OverChip:

      Здравствуйте. Напишите полную ошибку на английском. Подключение правильное? Изначально процессор определился? Не было других ошибок?

  15. Виталий:

    Здравствуйте.
    Подскажите, плз. В самом конце после всех операций и команды «g» перетаскиваю файл прошивки на usbprns2.exe. Не прошивается. Выводится «Downloading…Write Fail…Can’t print».
    Спасибо

    • OverChip:

      Здравствуйте. А какую прошивку загружаете? Имя файла напишите пожалуйста.

      • Виталий:

        Пробовал все, что нашел:
        ML2165_V1.01.01.12.hd
        orig_ML2160_V1.01.01.11.hd
        orig_ML2160_V1.01.01.12.hd

        • OverChip:

          Если до этого у вас получалось всё также, как на скриншотах (без ошибок в смысле), то похоже, что JTAG тут ни при чём. Прошивка почему-то не хочет загружаться по USB. Можем посоветовать стандартный набор действий в подобных случаях: переустановить драйверы, заменить USB-кабель, а если есть возможность — попробовать прошить на другом ПК.

          • Виталий:

            Спасибо за помощь. Прошил наконец-то)
            Смотрел в терминале, все было нормально. Принтер ждал прошивку…
            А залить удалось с другого ноута со свежеустановленными дровами.

            • OverChip:

              Отлично, наши поздравления :) Да, иногда бывает, что аппарат никак не хочет прошиваться на одном ПК, а на другом процесс начинается сразу же.

          • Виталий:

            Спасибо за Ваш ответ.
            С JTAG проблем нет. Все, как на скринах, без ошибок. Ощущение, что принтер не переходит в режим отладки для загрузки прошивки после команды «g». Если перегрузить принтер, то в обычном режиме прошивка проходит, но версия остается старая. Буду пробовать…Отпишусь.

            • OverChip:

              Странно…ну хорошо, если получится — отпишитесь пожалуйста :) Возможно, стоит подключить debug и посмотреть через гипертерминал, что там вообще происходит.

  16. mzk29:

    Здравствуйте, а возможно ли прошить SCX-3400 при помощи JTAG

    • OverChip:

      Здравствуйте. Нет, нельзя. В SCX-3400 прошивка хранится не в процессоре, а в отдельном чипе SPI Flash, на программаторе можно прошить.

      Или, если там не новая версия, а например неправильная прошивка с защитой от обновлений, то через debug-кабель прошивается без проблем обычно.

  17. kaa:

    Добрый вечер! Пытаюсь наладить контакт с JTAG , а он не реагирует. В Commander
    про SN ничего. Что может быть?

    • OverChip:

      Здравствуйте. Шлейф родной использовали из комплекта? Подключение к плате проверили?

      Мы написали вам на почту, просьба ответить и отправить лог.

  18. Николай:

    Полагаю, что можно использовать вместо покупного программатора самодельный на 174HC144 через LPT интерфейс и использовать софт H-JTAG… Или нет?

    • OverChip:

      Можно понизить через H-JTAG и самодельный адаптер WIGGLER (через LPT-интерфейс будет).

      Правда, нужно знать, как подключать и какие команды вводить для понижения. У нас такой информации нет. Можем отправить только схему адаптера WIGGLER.

  19. ОБКОМ - обслуживание компьютеров г. Саянск:

    Благодарю и я пользователя Гоги! Мало того, что материал архиполезный, ну просто наиполезнейший! Так еще и ребята из Overchip суперские. Возникли проблемы при прошивке, так три часа со мной возились, не отказали, не отмахнулись и главное бескорыстно! Спасибо братцы, спасибо большое человеческое. Челу, который конкретно со мной возился, искал варианты, помогал отдельное спасибо, представиться не захотел… СПАСИБО дружище! В Саянске вам всегда рады. Удачи, процветания, новых находок.

    • Виталий:

      Опишите, если не сложно возникшие проблемы, многим полезно будет. Спасибо

      • OverChip:

        Проблема была в том, что использовать решили не родной 20-пиновый шлейф из комплекта, а шлейф от привода гибких дисков.

        Вот либо из-за проводов в самом шлейфе, либо из-за неправильного подключения процессор принтера не определялся: «WARNING: CPU core not found». После использования шлейфа из комплекта (подготавливается по схеме из пункта 1) всё сразу определилось и больше проблем не было.

        Мы добавили в «Частые проблемы при прошивке через JTAG и их решения» этот случай, может в будущем поможет кому-нибудь :)

        • Андрей:

          Здравствуйте. На счет понижения 2160 понятно. А вот на счет других моделей???
          Ведь нужно знать с какого адреса лить прошивку. Как можно узнать с кокого адреса заливать!? 1860, 1660, 1910 итд

          • OverChip:

            Здравствуйте. К сожалению, у нас подобной информации нет, на форумах тоже не находили. Ведь JTAG наиболее популярен именно для понижения новых версий ML-2160, старые модели не так часто встречаются настолько убитыми, что нельзя восстановить прошивку например в принудительном режиме. Перечисленные вами модели есть в программке «Printer JTAG by Mo-Skin», но её стоимость отдельно — 3000 руб., зато с адресами заморачиваться не нужно, они уже должны быть прописаны в программке. Другой информации у нас нет :(