В литературном жанре фантастики существует художественный приём, когда постулируется наличие множества одновременно существующих миров. Каждый из этих миров похож на другой, но отличается несколькими ключевыми особенностями. Все эти миры существуют по большей части независимо, но допускают возможность путешествий между собой.
На первый взгляд, применимость концепции мультивселенной весьма ограничена и распространяется разве что на контрфактический метод в исторических исследованиях.

Однако я считаю, что существование параллельных миров реальней, чем кажется.
Так, в одном из наших параллельных миров шлем виртуальной реальности Oculus Rift DK1, выдающий Full HD для каждого глаза, в общем‑то, устарел к концу 2010‑х и сейчас представляет собой скорее антиквариат.
В то же самое время, новейшая версия знаменитого пакета симуляции LTspice, вышедшая 24.08.2024, имеет пользовательский интерфейс, характерный для конца 1990‑х.

Интерфейс MDI в середине третьего десятилетия XXI века
Интерфейс MDI в середине третьего десятилетия XXI века

Приведу другой пример, показывающий, что граница между параллельными мирами может пролегать даже внутри отдельно взятой головы.
В шестой серии третьего сезона сериала «Кремниевая долина», обыгрывается конфликт персонажа Томаса Миддлдитча с его новой подругой, который возник на почве того, как правильно делать отступы в коде: пробелами или табуляцией.
Один и тот же человек может одновременно смеяться над этой ситуацией, занимать чью‑либо сторону, и при этом знать о существовании такого класса утилит, как бьютифаеры, которые как раз не изменяя сути кода, меняют его форматирование в соответствии с шаблоном оформления — расставляют отступы и переносы.

JTAG – Just Tool for Application debuG

Личный пример, когда я столкнулся с существованием параллельных миров, связан с JTAG.

Статьи, доклады на различных конференциях и прочие материалы о JTAG почти всегда стартуют с одного и того же вступления:
«Еще в 1980 году группа разработчиков Joint Test Action Group (JTAG) разработала спецификацию для тестирования межсоединений на плате: "boundary-scan testing"».
Именно вот с этого «Ещё в 1980 году...».

Затем почти всегда идёт пояснение:
«boundary‑scan — это периферийное или граничное сканирование».
Именно так: «периферийное или граничное»

После этого рассказывается, как же непросто производителям печатных плат:
«Представьте себе, что Вы разрабатываете плату скажем с 5 микросхемами и у каждой микросхемы 100-1000 контактов. Микросхемы соединены между собой тысячами соединений на плате. На заводе плата будет выпускаться партиями десятками тысяч экземпляров. Понятно, что часть плат после монтажа компонентов будет браком. Где-то не пропаяются контакты, где-то трещина в PCB или не получилось переходное отверстие между слоями платы».
И раскрывается суть JTAG отключить у цифровой микросхемы буферы ввода‑вывода от внутренних схем, реализующих основной функционал. Подключить их к специальному внутреннему модулю, который позволит директивно устанавливать на выводах лог.0, лог.1, HiZ, а также считывать текущее значение. И протестировать (прозвонить) все межсоединения.

Затем скороговоркой рассказывается «что‑то на умном» про TAP‑контроллер, конечный автомат, регистры инструкций и данных. Про то, что регистр данных может как содержать идентификационный код микросхемы, так и отвечать за состояния выводов. Про то, что в таком случае он будет называться «boundary‑scan register — регистр периферийного или граничного сканирования». Про типы ячеек и про что‑то ещё.
Всё это проносится как кроны деревьев перед глазами человека, катающегося на карусели.

И, наконец, идёт реклама технических решений от конкретной компании.

Всё это настолько шаблонно и настолько повторяется, что слыша/читая «Ещё в 1980 году...», уже автоматически ожидается появление чего‑нибудь «периферийного или граничного».
Поэтому в цикле статей про JTAG я постарался уделить максимум внимания именно техническим аспектам.

Ввиду вышесказанного было несколько неожиданно прочитать комментарий автора @lorc следующего содержания:

Я в основном работаю с JTAG в режиме отладки MCU <...> Со стороны вот такого вот пользователя JTAG, я бы хотел дать совет: укажите где-то в начале статьи что JTAG не только для отладки кода. Что изначально его придумали как раз для boundary scan. Лично для меня это когда-то давно стало открытием.

Мне показалось, что это отдельное исключение из статистики общечитательского опыта.
Но потом я внезапно узнаю, что один из авторов Хабра с гордостью, по сути, продублировал функционал JTAG при помощи UART, встроенного в микроконтроллер.

Разумеется, в отличие от упомянутого проекта, оригинальный JTAG работает не только на микроконтроллерах, но и на процессорах, ПЛИС, статической памяти (например, CY7C1525KV18) и многом другом.
А ещё с оригинальным JTAG работает масса прикладного программного обеспечения для тестирования электроники от компаний Corelis, Göpel, JTAG Technologies и XJTAG. Данное программное обеспечение предоставляет в том числе возможность автоматической генерации тестов по списку соединений (нетлисту), полученному из EDA, где разрабатывалось то или иное электронное устройство.

В беседе с другим программистом микроконтроллеров (с достаточно большим стажем работы и весомым портфолио) я решил упомянуть данную историю в качестве отраслевого анекдота. Однако тот шутку не понял, и сказал:

Не, а причём здесь JTAG и тестирование? Тем более тестирование межсоединений на печатных платах!

Внезапно стало понятно, что существует целый параллельный мир, в котором JTAG — не аббревиатура (в которой T — это Test), а имя собственное.
И в котором JTAG был создан «для программирования микроконтроллеров».

Правила игры в наши параллельные миры

С одной стороны, ближайший коллега по сообществу может оказаться представителем абсолютно другого измерения, причём совершенно внезапно.
С другой стороны, я и сам могу оказаться подобным представителем для кого‑либо. Например, я был абсолютно уверен, что счётчик Гейгера не способен регистрировать рентгеновское излучение. А он может, особенно, если сделан на основе слюдяного датчика.

Ввиду этого, мне кажется, весьма любопытной была бы следующая игра‑исследование:

  1. Несколько членов какого‑либо хаба договариваются друг с другом о взаимном опросе на профессиональную тематику. Участниками могут быть как топовые авторы с кармой 200+, так и нонеймы с отрицательной кармой и нулём статей.

  2. Каждый участник формулирует по 2‑3 вопроса с развёрнутыми и обоснованными ответами. Вопросы должны по возможности высвечивать компетентность в конкретной сфере внутри тематики хаба, а ответы на них должны быть очевидны тому, кто их сформулировал.
    При этом сами вопросы могут быть как ультрасложные, так и элементарные. Как с подвохом, так и абсолютно прозрачные для специалистов в данной сфере.
    Очень желательно, чтобы для решения данных вопросов не требовалось обращение ни к каким дополнительным материалам. То есть чтобы Настоящий Специалист, по мнению автора конкретного вопроса, по умолчанию знал на него ответ.
    Если же без знания каких‑либо справочных данных вопрос неразрешим, то эти данные желательно включить в сам вопрос.

  3. Авторы вопросов, помимо ответов, снабжают вопросы тегами (1‑3 шт.), обозначающими узкоспециализированную тематику.

  4. Все вопросы скидываются ведущему, который сводит их в единый файл. Он не редактирует и не обсуждает суть вопросов, но может по договорённости откорректировать ошибки правописания.
    Разумеется, если в вопросе есть что‑либо непристойное либо незаконное, ведущий должен отклонить данный вопрос/ответ.

  5. В заранее оговоренный день ведущий рассылает файл с вопросами участникам.

  6. Участники должны за сутки дать ответы на вопросы, не используя дополнительные материалы: ни книги, ни Интернет, ни ChatGPT, ни друзей (коллег, знакомых, родственников).
    Джентльменам верят на слово, так что никакой контроль не предусмотрен.
    А временно́й интервал в сутки служит для того, чтобы участник не наткнулся на ответ случайно, скажем, листая ленту Хабра.

  7. Если участник не знает ответа на какой‑либо вопрос, то он так и пишет: «Без малейшего понятия, что такое этот ваш баундари‑скан регистр»
    Если он слышал о теме вопроса краем уха, то вполне допустим ответ: «Это что‑то про JTAG»
    При этом, если участник понимает, что он не специалист в данном вопросе, ему сто́ит это указать: «...но вообще не вникал. Просто видел пару раз на конференциях доклады на тему»

  8. Ответы передаются ведущему и он публикует статью, где предоставляются вопросы с авторскими ответами и ответами участников. Всё в обезличенном виде — никаких бонусов за правильные ответы, никаких санкций и позора за ошибочные ответы.

  9. Затем происходит публичное обсуждение качества и корректности ответов, вопросов и их тегов.

Мне, как автору хабов Электроника для начинающих и Производство и разработка электроники, в качестве целевой аудитории видятся в первую очередь участники именно этих хабов. И именно в таком опросе я бы с радостью принял участие.

Но возможно, что и представители других инженерно‑технических сфер будут заинтересованы в проведении подобной игры. Если такая игра состоится, я также с интересом прочитал бы итоговую статью‑отчёт о ней.

Если вы находите предложенный формат интересным и готовы поучаствовать, напишите о своей готовности в комментариях или мне в личные сообщения, чтобы с вами можно было связаться.
Если же вы готовы настолько, что у вас уже сформировались вопросы для игры, присылайте их мне на почту flammmable@yandex.ru (если в вопросе есть, например, иллюстрации). Если вопрос сугубо текстовый, то можно присылать в личные сообщения Хабра.

Комментарии (18)


  1. freebsdmry
    04.09.2024 10:37
    +2

    Думаю это будет очень полезно. Ибо живешь-живешь, и не думаешь что JTAG это что-то кроме прошивки. Особенно когда коснулся FPGA после микроконтроллеров.

    А сколько еще других вещей скрыто...


    1. Flammmable Автор
      04.09.2024 10:37

      А сколько еще других вещей скрыто...

      Именно :)

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

      Ну. И так как я, вроде как, предложил подобный формат, то в качестве пробного мероприятия, я бы мог побыть ведущим на первый раз.


  1. AlexM2001
    04.09.2024 10:37
    +1

    Что-то вспомнилось:

    "Договорившись о терминологии Человечество решит 50% своих проблем")


    1. amartology
      04.09.2024 10:37
      +4

      Всегда люблю в этот момент напоминать, что у МОП-транзистора четыре вывода, один из которых в принципе не имеет названия на русском языке. Куда уж нам про JTAG рассуждать)


      1. Firelander
        04.09.2024 10:37
        +2

        Подложка-то не имеет названия на русском?


        1. amartology
          04.09.2024 10:37
          +1

          Так этот вывод - не подложка. Он может быть совершенно от нее независимым. Это справедливо для всех pMOS и, например, для всех nMOS в третьем кармане. Про разные опции в SOI я даже начинать не буду.
          В общем, body и подложка это не одно и то же ни разу.


  1. lorc
    04.09.2024 10:37
    +4

    Действительно, JTAG в среде (не)профессиональных embedded разработчиков JTAG рассматривается как инструмент для прошивки. Более опытные - знают про возможность отладки. Про boundary scan - знают немногие. Веселья добавляет существование SWD, который boundary scan не поддерживает (кажется). Соответственно частенько можно встретить выражение "JTAG/SWD" в смысле "ну какой-то аппаратный интерфейс для отладки". И, кстати, софт для работы с JTAG, который используют программисты (OpenOCD, Segger JLINK, Lauterbach Trace32, TI XDS, etc...) чаще всего вообще не умеет boundary scan в принципе. Поэтому программистам даже неоткуда узнать про такую штуку.


    1. Mike-M
      04.09.2024 10:37
      +1

      существование SWD, который boundary scan не поддерживает (кажется).

      Так и есть, SWD не поддерживает boundary scan. Собственно, это следует из названия — Serial Wire Debug (не путать с Test).


  1. VelocidadAbsurda
    04.09.2024 10:37
    +3

    Такая ситуация с JTAG на микроконтроллерах абсолютно не удивляет, навскидку:

    • общая тенденция перехода с JTAG на SWD

    • Полное отсутствие поддержки тестирования от производителей МК: набортные отладчики демоплат умеют отлаживать, но не умеют тестировать, нужен некий отдельный сторонний интерфейс, софт к нему итд, да те же BSDL-файлы далеко не все публикуют.

    • Само тестирование межсоединений - некая отдельная операция, требующая своего подхода, нередко видится более простым встроить в код некий функциональный тест вида «внешний EEPROM пишется/читается», «внешний АЦП гонит данные» итд, который и соединения протестирует, и сами внешние компоненты.


    1. AKudinov
      04.09.2024 10:37
      +4

      Более того, JTAG именно в предназначении Test может использоваться для программирования устройства. Если к процессору подключена внешняя флэшь, то программатор, дёргая ногами процессора через JTAG, может на линиях флэши разворачивать временнУю диаграмму программирования.


      1. VelocidadAbsurda
        04.09.2024 10:37
        +2

        Доводилось делать и такое, причём, на чипе без документации/распиновки/BSDL: чип не желал отлаживаться, но давал сканировать, по огромным длинам DR угадал инструкции сканирования, отпаял flash с известной распиновкой, дальше, гоняя в цикле сканирование и заземляя иголкой поочерёдно пины flash, нашёл биты DR, соответствующие им, заскриптовал шинные циклы чтения/записи и дальше уже команды по datasheet flash.

        Однако, при наличии режима отладки и документации, в целом проще запустить на процессоре некий софтовый «загрузчик» и общаться уже с ним. Да и в целом, параллельные flash ушли в прошлое.


        1. lorc
          04.09.2024 10:37
          +1

          Да и в целом, параллельные flash ушли в прошлое.

          Ну с SPI/QSPI/Hyper-Flash можно в принципе провернуть тот же фокус. Хотя, дольше будет, да. Да и не чаще всего не имеет особого смысла.


      1. Mike-M
        04.09.2024 10:37
        +1

        Вот бы статейку на эту тему с практическим(и) примером(ами) почитать...


  1. checkpoint
    04.09.2024 10:37

    Вместо того, чтобы развешивать пафос по параграфам и толочь воду в стакане, автор мог бы написать коротенькую заметку про то, как работает "Boundary Scan" фича у JTAG и какими опенсорсными тулами ею можно воспользоваться. Про коммерческие тулы рассказывать не стоит, так как они жутко дорогие и доступны в основном под винду.


    1. Flammmable Автор
      04.09.2024 10:37
      +4

      Вместо того, чтобы развешивать пафос по параграфам и толочь воду в стакане, автор мог бы написать коротенькую заметку про то, как работает "Boundary Scan" фича у JTAG

      Автор даже не знает, что и сказать на это ))))

      1. Автор целый цикл написал (и продолжает его, в общем) на тему JTAG и Boundary Scan.

      2. Автор сослался на этот цикл в данной статье ("Поэтому в цикле статей про JTAG я постарался уделить максимум внимания именно техническим аспектам")

      3. "Boundary scan" никакая не фича JTAG, а его основная функция, его прямое предназначение.


      1. checkpoint
        04.09.2024 10:37

        Тогда зачем нужна была эта статья ? Выразить своё негодование тупому быдло которое считает, что JTAG это для программирования flash памяти ?

        Ваш цикл статей почему-то прошел мимо меня, уж извините. Но я сейчас пробежался по статьям и вижу что в нём нет ни слова про опенсорсные решения, ни слова про OpenOCD и как его настроить. Вы используете проприетарную, платную виндовую тулзу, что совершенно бесполезна для подавляющего числа разработчиков.


        1. Flammmable Автор
          04.09.2024 10:37
          +2

          Тогда зачем нужна была эта статья?

          "Тогда" - это когда?

          Выразить своё негодование тупому быдло которое считает, что JTAG это для программирования flash памяти?

          Упомянутого в статье автора @lorc я ни в коем случае не считаю "тупым быдлом". Уверен, что и он, прочтя статью, не увидел в ней присутствия подобных смыслов, направленных в его адрес.

          Ваш цикл статей почему-то прошел мимо меня...

          ...как и ссылка на него внутри статьи.
          А всё потому, что вас бомбит и вы принялись читать текст "по диагонали" :)
          А бомбит вас, выскажу смелое предположение, потому, что вы сами себя считаете мм... не вполне компетентным специалистом.

          Но с внутренними переживаниями - это не ко мне.


  1. juramehanik
    04.09.2024 10:37

    Железячники токсичные.