ppk2-mcp
ppk2-mcp
Безголовый драйвер, интерфейс командной строки и MCP-сервер для Nordic Power Profiler Kit II, построенный на уровне устройства официального приложения nRF Connect Power Profiler от Nordic.
Почему он оборачивает официальное приложение, а не переписывает его
Точность PPK2 не в его наборе команд, который представляет собой горстку опкодов. Она в покалибровочной настройке каждого экземпляра, которую прибор сообщает при подключении, и в преобразовании, которое превращает 14-битное показание АЦП, диапазон измерения и эту калибровку в ток — включая фильтр, подавляющий всплеск, возникающий при переключении диапазона. Именно эти части меняются, когда Nordic выпускает новую прошивку прибора, и именно их переписывание с нуля тихо портит: числа всё ещё выглядят как токи.
Поэтому vendor/pc-nrfconnect-ppk — это подмодуль самого приложения, а
src/device/serialDevice.ts внутри него импортируется и используется как есть.
Ничто в этом репозитории не преобразует показания АЦП. Отслеживание нового
релиза прошивки — это обновление подмодуля.
Что добавляет этот репозиторий, так это то, что приложение не может дать скрипту: приложение — это программа на Electron с графиком, а для измерения нужно число, привязанное к состоянию.
Related MCP server: PPK2 MCP Server
Что он измеряет, чего не даёт среднее значение
Прибор дискретизирует ток и восемь цифровых каналов вместе на частоте 100 кВыб/с. Подключите цифровой канал к выводу, который прошивка переключает для обозначения состояния — радио выключено, периферия тактируется, задача выполняется — и захват может сказать, сколько стоило это состояние, а не то, что плата усредняла, пока оно происходило.
В этом весь замысел. Захваты хранятся как RUNS: максимальные интервалы, в течение которых цифровое слово не менялось, каждый со своим количеством выборок, средним, экстремумами и зарядом. Файл запусков на три порядка меньше выборок, лежащих в его основе, не теряет ничего, что нужно для любого вопроса о состоянии, и достаточно мал, чтобы его можно было закоммитить рядом с результатом, который он подтверждает.
Две вещи намеренно не сглаживаются:
Выборка, которую собственный счётчик полезной нагрузки прибора считает потерянной, учитывается как потерянная и не закрывает запуск. Выпадение — это не смена состояния и не ток. Захват, потерявший больше, чем позволяет вызывающий, ОТКЛОНЯЕТСЯ, а не усредняется, потому что потери не распределяются равномерно по состояниям.
Состояние — это МАСКИРОВАННОЕ цифровое слово, поэтому каналы, к которым ничего не подключено, не могут разбить запуск на два.
probeсообщает о каждом канале, чтобы маску можно было выбрать на основе того, что реально подключено.
Установка
Node 20 или новее, и PPK2 на USB.
git clone --recurse-submodules https://github.com/schuschu/ppk2-mcp
cd ppk2-mcp
npm installЕсли node не в PATH, export PPK2_NODE_BIN=/path/to/node/bin, и
лаунчер ./ppk2 найдёт его.
В Linux пользователю нужны права на чтение и запись на последовательном порту
прибора, что обычно означает членство в группе dialout.
Командная строка
./ppk2 list
./ppk2 info
./ppk2 probe --seconds 5
./ppk2 capture --out /tmp/run --seconds 60 --mask 0x0f \
--names txrx,addr,txen,rxen --label "what this run is"probe сообщает, какие цифровые каналы подключены. capture записывает
<out>.runs.csv и <out>.meta.json и печатает по одной строке на каждое
цифровое состояние. Он завершается с ненулевым кодом, когда прибор теряет
больше, чем --max-dropped-ppm потока.
MCP-сервер
./node_modules/.bin/tsx src/mcp.tsили как запись stdio-сервера:
{
"command": "npm",
"args": ["--prefix", "/path/to/ppk2-mcp", "run", "--silent", "mcp"]
}Инструменты: ppk2_list, ppk2_info, ppk2_probe, ppk2_capture,
ppk2_analyze.
Каждый инструмент отвечает агрегатами и путями к файлам. Ни один из них не
возвращает выборки: при 100 кВыб/с минута захвата — это шесть миллионов
выборок, что не является ни ответом, который вызывающий может удержать, ни
тем, что читатель может проверить. ppk2_analyze читает файл запусков обратно
и, получив цифровое состояние и набор границ длительности, разделяет запуски
этого состояния по тому, как долго они длились — так два состояния, которые
один вывод не может различить, различаются по длине интервала.
Прибор открывается на каждый вызов и закрывается после него, потому что один процесс за раз может удерживать порт, и сервер, который держал бы его, заблокировал бы и приложение, и командную строку.
Режимы
Здесь никогда не включается выход источника. Прибор используется в том режиме, в котором он уже находится, а стенд, для которого это написано, — это амперметр, включённый последовательно с платой, питающейся от собственного источника — на Nordic DK это разъём измерения тока с удалённой перемычкой.
Лицензия
Вендоренное приложение и этот обёртка находятся под лицензией Nordic; см.
vendor/pc-nrfconnect-ppk/LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Governed data discovery, exact queries, decisions, simulations, and runtime utilities over MCP.
MCP server for Statsig API - interact with Statsig's feature flags, experiments, and analytics
Create and manage trading strategies, bots, webhooks and signals from any MCP client.
Market Data App MCP — wraps the Market Data App API (marketdata.app)
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server for Nordic Semiconductor's Power Profiler Kit II (PPK2), enabling current measurement and device control via 12 tools from Claude.1MIT
- FlicenseAqualityDmaintenanceEnables MCP clients to control a Nordic PPK2 for power profiling: configure source/measurement modes, set voltage, power DUT, measure current/power/energy, and capture logic channels.6-
- FlicenseNot gradedqualityCmaintenanceLocal MCP server for building an agent-facing integration around DreamSourceLab DSView. Enables native logic capture, protocol decode, and analysis with artifact management for I2C, SPI, and UART.-
- AlicenseNot gradedqualityBmaintenanceEnables pulling test data, inspecting telemetry channels, running analysis, and writing results back from any MCP client.MIT