Pulsar
Восьмиканальный логический анализатор прямо в браузере, через WebUSB.
Pulsar это UI и firmware для логического анализатора прямо в браузере. Работает на стыке веб-технологий и битовой магии, используя WebUSB. Достаточно подключить Cypress EZ-USB FX2LP, выбрать его в списке USB устройств (да, это позволяет WebUSB, но только в Chrome) и можно собирать и анализировать любые сигналы.
Изначально я пользовался для этого PulseView, как советовал производитель китайского чипа, который был у меня. Но хоть это и работало (и очень неплохо), хотелось иметь устройство прямо в браузере с приятным интерфейсом и простотой добавления новых декодеров.
Прошивка едет вместе с приложением. Такие платы приезжают пустыми — в них только загрузчик, — и до первого захвата в них нужно положить fx2lafw. Pulsar это замечает и предлагает сам: восемь килобайт уходят управляющими передачами в RAM. Не во флеш. Выдернул кабель — устройство снова пустое, и ничего необратимого с ним не случилось.
Дальше восемь каналов и девять пресетов, от 100 кГц до 24 МГц. На верхнем сэмплы идут ровно со скоростью USB 2.0: bulk-эндпоинт, передачи по 16 КБ, восемь штук в очереди — и всё это надо успевать забирать, пока браузер рисует.
Поэтому в главном потоке не живёт ничего из этого. Сэмплы уходят в воркер, в кольцевой буфер из чанков — до 512 миллионов сэмплов, — и декодеры работают там же. Декодер не получает захват целиком: он читает через окно, которое стримит ему куски фиксированного размера, так что его память остаётся в пределах 64 КБ хоть на тысяче сэмплов, хоть на полумиллиарде. Канвасу тоже не отдают сырьё — он просит у воркера уже свёрнутые колонки, по паре байт на пиксель.
Декодеров двадцать семь: I²C, SPI, UART, CAN, LIN, JTAG, SWD, I2S, Modbus RTU, WS2812, 1-Wire, DHT11/22, MIDI, PS/2, Manchester, Wiegand, HD44780, квадратура, Step/Dir и дальше по списку. Новый — это один файл и одна строка в барреле.
И одно правило, которое дороже остальных: скормить декодеру захват кусками обязано дать ровно те же аннотации, что и одним куском. Байт в байт. У каждого декодера есть тест, который это проверяет, и ловит он всегда одно и то же — декодер, припарковавший курсор посреди кадра, а на следующем куске принявший собственные же фронты за новый старт.
Захваты остаются в браузере. Законченная сессия ложится в IndexedDB тем же самым .sr, который отдаёт экспорт, вместе с декодерами, раскладкой каналов и тем зумом, на котором вы её оставили. Открыли из истории — вернулись ровно туда, где были. Разбор идёт на вашей машине; сервера у проекта нет.
PulseView при этом никуда не девается. Pulsar читает и пишет обычный sigrok .sr, включая сжатые архивы, которые пишет сам PulseView, так что захват можно начать здесь, а доразбирать там.
Чего он не умеет. WebUSB есть только в Chromium — в Firefox и Safari его нет и не планируется, так что открыть .sr там можно, а подключиться нет. Каналов восемь, потолок 24 МГц — столько даёт FX2LP. Быструю шину этим не посмотреть, и чинится это другим анализатором, а не другим интерфейсом к этому.
Чистые ES-модули, ни одной рантайм-зависимости, Vite и node --test. Ставить нечего — открывается по ссылке.