Skip to main content
Glama

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.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server for Nordic Semiconductor's Power Profiler Kit II (PPK2), enabling current measurement and device control via 12 tools from Claude.
    1
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Enables 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
    -
  • F
    license
    Not graded
    quality
    C
    maintenance
    Local 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.
    -