Перейти к основному содержимому

Разбор jtagd из Quartus: почему клоны USB Blaster зависают на 30 секунд

Автор оригинальной статьи Doug Brown вернулся к старым плавающим сбоям клонов USB Blaster под Linux и с помощью ИИ нашёл в закрытом jtagd из Quartus две причины. Одна из них приводит к…

Проблемы проявлялись так: программатор иногда молчал порядка 30 секунд и выдавал «JTAG chain broken», а в Wireshark исходящий USB-трафик выглядел испорченным ещё до того, как данные доходили до FT245 или CPLD. Пару лет назад автор бросил разбираться, а теперь передал обе задачи Claude Opus 5.5, который занялся реверс-инжинирингом jtagd. По словам автора, модель иногда упиралась в ограничения по кибербезопасности, но лучше прежних версий пробовала другой подход и давала переформулировать запрос.

Первый баг — неинициализированная переменная в конструкторе JTAG_SERVER_USB_BLASTER. Конструктор обнуляет набор соседних переменных, а эту, судя по всему, забыли; если в ней оказывается значение больше 0, в исходящий поток попадают данные протокола более нового USB-Blaster II, и старые клоны это ломает. По наблюдениям автора, такое случается, если отключить и снова подключить программатор, не останавливая jtagd: при горячем подключении создаётся новый объект, а участки кучи переиспользуются.

Второй баг связан с порядком команд, которые jtagd отправляет чипу FT245 при первом открытии: Reset, Purge TX, Purge RX, Set Latency Timer. Такая последовательность, по данным автора, заставляет некоторые клоны примерно на 250 мс перестать принимать входящие данные, а jtagd в этот момент уже опрашивает устройство и застревает на 30 секунд в ожидании ответа. Если поставить Set Latency Timer первой, проблема исчезает; разные клоны реагируют по-разному, что автор связывает с возможными различиями в ревизиях чипа.

Обе проблемы присутствуют в jtagd как минимум с Quartus 18.1 и сохраняются в Quartus 25.1. Автор опубликовал патчер для jtagd на GitHub и просит Altera исправить хотя бы первый баг, тогда как насчёт второго не уверен, что это вообще баг.

Почему это важно

Для команд, которые ведут разработку на FPGA и используют недорогие клоны USB Blaster в Linux, такие зависания превращаются в потерю времени на диагностику плавающих сбоев и в ложные подозрения на железо. Патчер даёт временное решение без ожидания обновлений Quartus, а сам кейс показывает, как ИИ ускоряет разбор закрытых утилит вендора. Для бизнеса это напоминание: сбойное ПО программатора может тормозить весь цикл отладки, поэтому стоит фиксировать версии инструментов и проверять воспроизводимость проблем на конкретных конфигурациях.

Источник: Habr. Материал пересказан ИИ-агентом.

Похожие статьи по теме

Почему ИИ не спасает от плохого кода: разбор Habr
Новости IT • 2 мин чтения

Почему ИИ не спасает от плохого кода: разбор Habr

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

Читать статью полностью →
Как я семь раз обманул себя метриками точности ИИ-проверки ЕГЭ
Новости IT • 3 мин чтения

Как я семь раз обманул себя метриками точности ИИ-проверки ЕГЭ

Автор бота для проверки второй части ЕГЭ по обществознанию рассказал, как за полгода сменил четыре модели и нашёл семь случаев, когда его метрики показывали…

Читать статью полностью →
Разработчик четыре года вручную разбирал формат нотного редактора Score Perfect
Новости IT • 2 мин чтения

Разработчик четыре года вручную разбирал формат нотного редактора Score Perfect

Нотный редактор Score Perfect остался без поддержки после смерти единственного разработчика в 2012 году, а все партитуры в его закрытом формате SPP оказались заперты…

Читать статью полностью →