J-Link ARM V8 программатор/отладчик: пример практического применения
Сегодня хочу поделиться с общественностью пожалуй самым популярным применением сего программатора — прошивкой принтера Samsung ML-2160. В определенных кругах известно как «унижение принтера ml-2160». Тема старая, но все равно много кто и сейчас «напарывается на грабли» при прошивке сего устройства. Кому интересно — прошу под кат. Осторожно — много фото!
Хочу начать с того, что в свободное от работы время я для развлечения и тренировки мозга и рук чиню всякую микропроцессорную электронику. Однажды пришел ко мне знакомый с просьбой «почини принтер». Был это популярный тогда Samsung ML-2160. И выглядел как недавний подопытный:
Хитрый самсунг хотел денег за родные картриджи, ну а людей exUSSR ставит в ступор цена оригинального картриджа — мы ведь лазерный принтер купили чтобы было дешево 😉 Первые версии принтера можно было откатить на старую прошивку без особых проблем, но в следующих прошивках такую возможность убрали.
и внутри:
На этом месте все обычно подключают программатор, качают последнюю версию софта с офсайта, ставят, запускают, наблюдают радостное окно программы, которая нашла программатор:
Но счастье их длится не долго: Говорят, некоторые после этого получают кирпич из программатора. Всех остальных просто задалбывает это окно. А всего лишь нужно было поставить софт v4.92 (setup_jlink_v492.zip). Сразу оговорюсь, что весь необходимый софт оставлю в конце обзора. Теперь включаем принтер. Кладем лист бумаги зажимаем и держим кнопку PrintScr на принтере примерно 10 секунд. Он радостно заморгает лампочкой и напечатает что-то подобное:Читаем строку Firmware version, видим версию ….02.00 и понимаем что не зря купили программатор. Теперь ставим драйвера. На случай если у вас их нет — SamsungUniversalPrintDriver22. exe. Windows 10 подхватывает сама. Если вы еще не распаковали мой архив — самое время.
Копируем Boot.bin в c:\ (чтобы не бороться с проблемами с кодировками итд, хотите экспериментов — редактируйте download.jlink) Если поставили jlink не в каталог по умолчанию — редактируете путь в файле flashme.bat. Минимальный набор софта есть. Можно приступить к потрошению принтера 🙂 Отвертка Ph3 — наше все! Отключаем принтер от сети и откручиваем один саморез:и видим плату:
отстыковываем шлейфы и откручиваем 3 винта. Нам предстоит распаяться вот так:
распиновка разЪема на программаторе:
Тут следует обратить внимание что на кабеле распиновка зеркальная! 1 и 2 ногу программатора спаиваем вместе и в зависимости от положения джампера на плате подключаем к 3.3В принтера или нет. Если не хотите разбирать программатор, то померяйте напряжение на закороченном 1 и 2 контакте относительно земли: если там 3,3В есть, то паять к принтеру не надо.
Далее несколько фото того как поднимать ногу иголкой, но нога неправильная. Правильная нога на фото выше!
Процедура такова: капаем припоем (а лучше сплавом Розе/Вуда) на 2 крайних ноги.
Затем вставляем иголку, греем припой паяльником и поворачиваем немного против часовой стрелки:
Лишний припой убираем оплеткой
Теперь опускаем первую с края ногу и паяем провода ко всем контактным площадкам. В последнюю очередь паяемся ко второй с краю ноге процессора, предварительно зафиксировав скотчем/изолентой провод. В итоге получается вот такая экибана:
Еще раз повторюсь, что по этой фото я заметил что не туда припаял провод к процессору.
Паяем его правильно, припаиваем консоль (usb-uart) и подключаем шлейфы назад. Вот так должно получиться:ну и все вместе выглядит примерно так:
Все, с пайкой на пока закончили. Подключаем принтер, консоль, программатор у компьютеру. Если консоль паяли, то ставим например Tera Term, выбираем нужный порт и скорость 115200. Все остальное по умолчанию. Не забываем подключиться к порту.
Подключаем в сеть принтер. Нажимаем принтскрин на принтере и не отпускаем, нажимаем и отпускаем «сеть», ждем 3 секунды и отпускаем принтскрин. Принтер обычно перемагривается лампочками и загорается зеленая. Попутно в диспетчере задач видим устройства «нет подключенного принтера» и «поддержка usb принтера»:
запускаем flashme.bat:
тем временем в консоли (Если честно, я не уверен насчет правильности последующей фотки ибо есть подозрение что я ее мог перепутать делая скрин плохого кабеля 🙁 ):
Этими действиями мы закинули загрузчик, и теперь нужно влить новую прошивку. Вливаем MA_2160_05. hd. Для этого перетягиеваем его на usbprns2.exe в проводнике или запускаем из командной строки «usbprns2.exe MA_2160_05.hd» я предпочитаю второй вариант: в консоли:
Ну вот и все — принтер унижен! 🙂 Отключаем все от принтера, снимаем плату, распаиваем и собираем все назад. Не забываем заклеить скотчем чип на картридже или вовсе его выковырять.
Напоследок хочу рассказать о проблемах при перепрошивке.
1. Вы припаяли что-то не так и не туда, тогда программа для прошивки не сможет подключиться к процессору, не отобразит регистры, выдаст кучу ошибок итд. Вы это увидите.
2. Случается так, что кабель принтера совсем Г, тогда вы получите вот такое в консоли: и это, собственно один из не многих случаев, когда нужна консоль. Сами понимаете — оно и тут не очевидно что кабель не очень, а без консоли вообще тоска.
3. Не делайте длинные провода от шлейфа программатора — поймаете помехи.
4. Иногда по какой-то причине принтеры с прошивкой V1. 01.02.00 отказываются прошиваться. Лучше сразу обновите до V1.01.02.01 — запустите ML216x_V1.01.02.01.exe, там по ходу разберетесь.
Кое какие фото не моей платы, а взяты с просторов инета — ибо не получились фото, а принтера уже не было…
Архив со всем необходимым тут
usbhub + usbasp + ch441 + j-link = one PCB / Хабр
Все началось с того, что мне в большом количестве понадобилось собрать/отладить устройства на базе AVR. Я взял USBASP, открыл документацию и с радостью обнаружил, что у него есть встроенная поддержка uart.
Как оказалось, потратив пару-тройку дней на поиск разнообразных драйверов, запустить такой мост под windows – задача маловероятная (с пингвинами все дружится практически “из коробки”). Если это не так – пишите в комментариях, но я не нашел ни одного работоспособного подтверждения в сети. В качестве временного решения собрал костыль: USBHUB + USBASP + USB-UART(ch440). Все работает, но как минимум – не эстетично, как максимум – устройства иногда отваливаются (с USB портами у моего старичка lenovo x230 все ок). Если подключать без USBHUBа, то заняты 2 из 3 usb портов + короткие провода (USBASP и USB-UART обычно имеют USB-разъемы сразу на плате).
Решено: изобретаю велосипед с подключением всего окружения на одной плате одним проводом с разъемом type-C.
Вспомнил про ch441 (у него есть конфигурационный вход, позволяющий работать как USB-SPI/I2C мост, а также как USB-UART, в т.ч. с наличием #DTR, но об этом позже).
Начал разработку платы с USBHUBа. Выбор пал на дешевый FE1.1.
На 4pda нашел тему про сh441 и “доработки”, в т.ч. про дополнительную плату с согласователями уровней (для прошивки SPI флешек с 1.8в). Зачем городить бутерброд, если можно поставить согласователи на саму плату.
Добавил согласователи на UART (один переключатель на плате позволяет выбрать питание usbasp и одновременно уровень сигналов uart 5в/3.3в).
Пока неспешно собирал схему, параллельно столкнулся с проблемой китайских j-link адаптеров со слетающими прошивками. Решил добавить еще и программатор для ARM (В первой версии платы поставил обычный st-link на stm32f103, в последней версии j-link на stm32f205).
Три USB порта хаба заняты, четвертый usb вывел на USB-A (питание платы через предохранитель на 1А).
Терпеть не могу суперпозицию USB, с подключением с третьей попытки, потому поставил USB-typeC.
Как раз обзавелся самодельным микроскопом (eken h9 + гелиос 44-2).
Вывел разъем для прошивки adruno-плат без встроенного usb-uart (как раз нога #DTR через конденсатор), просто потому что смог.
Добавил аналоговый мультиплексор 4052, чтобы переключать UART между usbasp/внешним разъемом/stm32f205(для прошивки).
Бонусом – получилась “вещь в себе” – самопрошивающийся программатор. ch441 в режиме SPI может прошить usbasp, а в режиме UART может прошить stm32f205 (для старого бутлоадера 2.0), либо прям по USB (DFU для версии бутлоадера 3.0)
В итоге плата стала 4-слойной с размерами 70 мм х 35 мм.
Надеюсь, кому-нибудь мой опыт пригодится.
Гербера, инструкции по сборке, список элементов, схему, прошивки выложил на
https://4pda.to/forum/index.php?showtopic=884713&st=6720#entry106407720
Зеркало (у кого нет регистрации на 4пда), схема и архив:
Схема
Архив
Моя первая статья на Хабре, кидайте тряпками.
Описание интерфейса J-Link
Перейти к основному содержанию
-   Вакансии
- Видео
- Блог
- Устойчивость
J-Link и J-Trace имеют разъем JTAG, совместимый с ARM Multi-ICE. Разъем JTAG представляет собой 20-контактный разъем с прорезью изоляции (IDC) с ключом (штекер 2,54 мм), который соединяется с разъемами IDC, установленными на ленточном кабеле.
В следующей таблице перечислены выводы J-Link/J-Trace JTAG:
* В более поздних продуктах J-Link, таких как J-Link ULTRA+, эти контакты зарезервированы для расширения прошивки. Их можно оставить открытыми или подключить к GND в обычной среде отладки. Они не являются существенными для JTAG/SWD в целом.Разъем J-Link и J-Trace JTAG также совместим с отладкой ARM Serial Wire Debug (SWD).
В следующей таблице перечислены выводы J-Link / J-Trace SWD.
* В более поздних продуктах J-Link, таких как J-Link ULTRA+, эти контакты зарезервированы для расширения прошивки. Их можно оставить открытыми или подключить к GND в обычной среде отладки. Они не являются существенными для JTAG/SWD в целом.Подробную информацию о SWO/SWV см. в следующих документах:
Компоненты CoreSight — Техническое справочное руководство
Cortex™-M3 — Техническое справочное руководство
cJTAG.
В следующей таблице перечислены выводы J-Link / J-Trace cJTAG.
Штифт | Сигнал | Тип | Описание |
---|---|---|---|
1 | VTref | Вход | Это целевое опорное напряжение. |
2 | Vsupply | NC | Этот контакт не подключен в J-Link. Он зарезервирован для совместимости с другим оборудованием. Подключитесь к Vdd или оставьте открытым в целевой системе. |
3 | Не используется | NC | Этот контакт не используется J-Link при работе в режиме cJTAG. |
5 | Не используется | NC | Этот контакт не используется J-Link при работе в режиме cJTAG. |
7 | TMSC | Ввод/вывод | Двунаправленный контакт данных. Используется для передачи сериализованных данных TDI, TMS и TDO |
9 | TCKC | Выход | Тактовый сигнал для целевого ЦП. Рекомендуется, чтобы этот вывод был вытянут до определенного состояния целевой платы. Обычно подключается к TCK целевого процессора. |
11 | Не используется | NC | Этот вывод не используется J-Link при работе в режиме cJTAG. |
13 | Не используется | NC | Этот контакт не используется J-Link при работе в режиме cJTAG. |
15 | nСБРОС | Ввод/вывод | Сигнал сброса целевого ЦП. Обычно подключается к выводу RESET целевого ЦП, который обычно называется «nRST», «nRESET» или «RESET». Этот сигнал является активным низким сигналом. |
17 | Не используется | НЗ | Этот контакт не подключен в J-Link. |
19 | Питание 5 В | Выход | Этот контакт может использоваться для питания некоторых плат eval. |
Контакты 4, 6, 8, 10, 12, 14, 16, 18, 20 — это контакты GND, подключенные к GND в J-Link. Они также должны быть подключены к GND в целевой системе.
* В более поздних продуктах J-Link, таких как J-Link ULTRA+, эти контакты зарезервированы для расширения прошивки. Их можно оставить открытыми или подключить к GND в обычной среде отладки. Они не являются существенными для cJTAG в целом.Программатор-отладчик Segger J-Link EDU mini
Программатор-отладчик Segger J-Link EDU miniЯ очень доволен программатором-отладчиком Segger J-Link и выпуском Segger J-Link EDU mini 9.0168 менее чем за 20 долларов США, я попробовал. Этот программатор-отладчик предназначен исключительно для образовательных и некоммерческих целей. |
Оборудование
Программатор подключается непосредственно к USB-порту компьютера и имеет стандартный разъем 2 x 5 0,05″. Контакт 1 очень четко указан на шелкографии. |
Я успешно протестировал Segger J-Link mini на Arduino Due, Adafruit Feather M0, Adafruit Feather nRF52, LaunchPad MSP432, Arduino Primo Core. Немногие платы имеют надежный разъем SWD. В большинстве случаев на платах отображается точка рядом с контактом 1, но некоторые вообще не указывают. Как всегда, проверьте схемы перед подключением кабеля. |
Подключение к платам
Я протестировал Segger J-Link со следующими платами:
Действительно приятно иметь одинаковые инструменты для всех досок! |
Программное обеспечение
Одни и те же инструменты работают нормально, включая базовые J-Link T ools Suite и более сложные приложения Ozone , графический отладчик. |