EdigE
← ЛЕНТА

JTAG оживил выключенный клон Apple II: карта не сбрасывалась

Выдернуть USB-C из компьютера обычно означает начать отладку с чистого листа: питание исчезло, логика остановилась, память периферии должна потерять данные. В проекте ARGH это ожидание сломала настоящая карта расширения Apple II. Она продолжала вести себя так, словно предыдущий запуск ещё не закончился, и для возврата в исходное состояние плату приходилось оставлять обесточенной более пяти минут.

Карта, которая пережила выключение

ARGH r4 собран как аппаратный вариант Apple //e: дискретный 65C02 работает вместе с ECP5-12F, которая реализует обвязку шины, а слот принимает физические винтажные карты. Такая машина особенно чувствительна к честному сбросу: карту нельзя заменить моделью в памяти FPGA, а состояние её собственной RAM живёт по законам реального железа.

Подозрение пало на JTAG, который оставался подключённым к ECP5. На его разъём намеренно не подавали 3.3 В, поэтому программатор не должен был служить источником питания. Однако измерение показало на выключенной плате примерно 0.7 В. Этого остатка хватало, чтобы RAM установленной карты не теряла активность ожидаемым образом. После отключения JTAG проблема с затянувшимся «выключением» исчезла.

0.7 В пришли по кабелю отладки

Конкретная дорожка, по которой течёт ток, в проектном логе не локализована. Сигналы TCK, TMS, TDI и TDO могут подпитывать узел через входные защитные цепи, внешние буферы, подтяжки, конфигурационную память либо обвязку самого адаптера. Для ECP5 такой сценарий электрически правдоподобен: JTAG-выводы относятся к банку VCCIO8, а документация семейства отдельно рассматривает поведение I/O при hot-socketing. Но назвать виновником именно ESD-диод без схемы JTAG-обвязки, измерения тока и последовательного отключения линий было бы выдумкой.

Почему точный путь тока пока неизвестен

Этот эпизод легко спутать с другой ошибкой, найденной на той же плате. Для работы карты пришлось отдельно исправлять временные соотношения Apple II-шины: удерживать RES’ низким при включении, сохранять адресные данные после спада PHI0 и добавить подтяжку RDY. Эти дефекты объясняли сбои обмена, но не пяти минут ожидания после снятия питания. Паразитная подпитка изменила сам смысл теста reset: USB-C уже отключён, а часть машины всё ещё питается через кабель отладки.

Сброс оказался отдельной задачей

Для плат с FPGA, внешней RAM и подключаемыми программаторами это повод проверять выключенное состояние вольтметром и осциллографом, а не только индикатором питания. Нужны ограничения тока в сигнальных цепях, корректно выбранные изоляторы или буферы и заранее определённое поведение интерфейса при VCCIO = 0. Иначе JTAG, оставленный «только для прошивки», превращается в крошечный источник питания, достаточно сильный для самого неприятного вида бага: старое состояние переживает перезагрузку.