Skip to content

System: identity and diagnostics

JP150PCB 1.3PCB 1.4generatedJan PřibyslavskýThis page does not apply to the product or PCB revision chosen in the header.

What the module is and how it started: the firmware version and the installed package, the factory record of the board, the MCU, uptime, the cause of the last reset, the health of the real-time kernel, how the bootloader started the firmware, the protection state of the microcontroller, and the command that restarts the module into update mode.

Commands

Command Function Parameter Answer Since Boards
SYS:VERSION? † Full firmware build descriptor – SYS:VERSION:<descriptor> 26.6.2 1.3, 1.4
SYS:FW:PACKAGE? † Installed package variant, label, security counter and key type – SYS:FW:PACKAGE:<variant>,<label>,<counter>,<key> 26.10.1 1.3, 1.4
SYS:MCU:TYPE? † Microcontroller type – SYS:MCU:TYPE:<STM32F412XX|UNKNOWN> 26.6.2 1.3, 1.4
SYS:MCU:REV? † Microcontroller silicon revision – SYS:MCU:REV:<revision> 26.6.2 1.3, 1.4
SYS:BOARD:ID? † Board identity, revision and serial number – SYS:BOARD:ID:<revision>,<serial> 26.7.0 1.3, 1.4
SYS:BOARD:ID Write the board identity (factory command) "<revision>","<serial>" SYS:BOARD:ID:<OK|ERROR|LOCKED> 26.7.0 1.3, 1.4
SYS:BOARD:REV? † Board revision – SYS:BOARD:REV:<major.minor> 26.7.0 1.3, 1.4
SYS:BOARD:SERIAL? † Board serial number – SYS:BOARD:SERIAL:<serial> 26.7.0 1.3, 1.4
SYS:BOARD:RECORD? † The factory record, product, revision, serial number and production date – SYS:BOARD:RECORD:OTP,<product>,<revision>,<serial>,<date>,<block> 26.10.1 1.3, 1.4
SYS:BOARD:TYPE? † Board identified from the factory record, or why it is not supported – SYS:BOARD:TYPE:<type> 26.10.1 1.3, 1.4
SYS:UPTIME? † Time since start – SYS:UPTIME:<dddd:hh:mm:ss> 26.6.2 1.3, 1.4
SYS:RUNTIME:TOTAL? † Accumulated runtime (placeholder) – SYS:RUNTIME:TOTAL:<dddd:hh:mm:ss> 26.6.2 1.3, 1.4
SYS:RESET:CAUSE? † Cause of the reset before this start – SYS:RESET:CAUSE:<cause> 26.10.1 1.3, 1.4
SYS:RTOS? † Free heap now and at its lowest, tasks that could not be created – SYS:RTOS:<heap_free>,<heap_lowest>,<tasks_not_created> 26.10.1 1.3, 1.4
SYS:BOOTLOADER:INFO? † How the bootloader started this firmware, rollback floor, last update attempt – SYS:BOOTLOADER:INFO:<started>,<config>,<version>,<attempt>,<floor>,<update_result>,<update_cause>,<update_prev>,<update_new>,<update_attempt> 26.10.1 1.3, 1.4
SYS:BOOTLOADER † Restart into update mode – SYS:BOOTLOADER:OK 26.6.2 1.3, 1.4
SYS:PROTECTION? † Read-out protection level, bootloader write protection, brown-out level – SYS:PROTECTION:<rdp>,<wrp_bl>,<bor>,<sprmod> 26.10.1 1.3, 1.4
SYS:PERFTEST Echo test <text> SYS:PERFTEST:<text> 26.6.2 1.3, 1.4

Since is the release the command appeared in; 26.6.2 is the oldest release documented here, so a command marked 26.6.2 may be older. †: also served in the safe state (see SYS:BOARD:TYPE?).

SYS:VERSION?

A release build answers <version> (release) built <yyyy-mm-dd hh:mm> [<commit>], a development build <version>+dev.<n>.g<commit> (branch <name>[, dirty]) built <date>. The short version alone is the fourth field of *IDN?.

SYS:FW:PACKAGE?

Read from the header of the running image. variant is RELEASE, SPECIAL or DEVELOPMENT (UNKNOWN for a value this firmware does not know); label names a special build, otherwise empty; counter is the security counter the bootloader compares with its rollback floor; key is PROD or DEV. SYS:FW:PACKAGE:NONE when the image carries no valid header, for example a debugger load without the post-build step. MuraLink shows the answer next to the version and checks it before an update.

SYS:FW:PACKAGE?  ->  SYS:FW:PACKAGE:RELEASE,,1,PROD
SYS:FW:PACKAGE?  ->  SYS:FW:PACKAGE:SPECIAL,ACME-01,1,PROD

SYS:MCU:TYPE?, SYS:MCU:REV?

Commands: SYS:MCU:TYPE?, SYS:MCU:REV?

Decoded from the device identification registers of the STM32.

MCU revisions

Value Meaning
Z Revision Z
B Revision B
1_OR_C Revision 1 or C
UNKNOWN A revision identifier the firmware does not know
SYS:MCU:TYPE?  ->  SYS:MCU:TYPE:STM32F412XX
SYS:MCU:REV?   ->  SYS:MCU:REV:B

SYS:BOARD:ID

Commands: SYS:BOARD:ID?, SYS:BOARD:ID

The query reports the factory record in the one-time-programmable memory (OTP) when there is one, otherwise the identity written with the setter into the flash record, otherwise N/A fields. On a board with a factory record the setter answers LOCKED and writes nothing: the record cannot be rewritten. Without one it writes both strings (1 to 16 printable characters each, no spaces) to the flash record synchronously: OK confirms the write, ERROR a failed one; invalid parameters are an SCPI error. Every unit that leaves the factory carries a factory record, so the setter is a service command.

SYS:BOARD:ID?                     ->  SYS:BOARD:ID:1.4,JP150-0001-0021
SYS:BOARD:ID "1.3","JP150_0024"   ->  SYS:BOARD:ID:LOCKED

SYS:BOARD:REV?, SYS:BOARD:SERIAL?

Commands: SYS:BOARD:REV?, SYS:BOARD:SERIAL?

The two halves of SYS:BOARD:ID?. The factory record wins over the flash record; N/A when neither exists. A factory serial number reads <product>-<batch>-<unit> with at least four digits per number.

SYS:BOARD:REV?     ->  SYS:BOARD:REV:1.4
SYS:BOARD:SERIAL?  ->  SYS:BOARD:SERIAL:JP150-0001-0021

SYS:BOARD:RECORD?

The identity written once per board at the factory into the OTP memory of the microcontroller; the firmware reads it once at start. block is the OTP block that holds the record (0 to 11): a correction made at the factory appears with a higher block. NONE on a board without a valid record. Read-only: nothing in the firmware writes OTP.

SYS:BOARD:RECORD?  ->  SYS:BOARD:RECORD:OTP,JP150,1.4,JP150-0001-0021,2026-10-02,0
SYS:BOARD:RECORD?  ->  SYS:BOARD:RECORD:NONE

SYS:BOARD:TYPE?

The firmware identifies the board only from the factory record: PCB 1.3 and 1.4 differ in the bus the DSP is on, its clock source and several pins, and nothing else tells them apart. A board it does not support starts in the safe state: the DSP and both power stages stay in reset, the status LED shows the pattern described under Indicators, and only the commands marked with a dagger on these pages are served. Every other command answers the line ERR:BOARD:UNSUPPORTED without a prefix, at once, so a host learns that the command exists but is not available. The safe state exists so that such a board can still be identified and updated to a firmware that supports it.

Board types

Value Meaning
JP150-1.3 JP150, PCB 1.3
JP150-1.4 JP150, PCB 1.4
UNSUPPORTED,NO_RECORD No valid factory record; the board is not provisioned (safe state)
UNSUPPORTED,PRODUCT The record names another product (safe state)
UNSUPPORTED,REVISION The record names a JP150 revision this firmware does not support (safe state)
SYS:BOARD:TYPE?  ->  SYS:BOARD:TYPE:JP150-1.4
SYS:BOARD:TYPE?  ->  SYS:BOARD:TYPE:UNSUPPORTED,NO_RECORD

SYS:UPTIME?, SYS:RUNTIME:TOTAL?

Commands: SYS:UPTIME?, SYS:RUNTIME:TOTAL?

Not yet a real counter: the answer is the uptime plus a fixed offset of 42 days. A persisted total runtime is planned; until then do not display the value as a fact.

SYS:UPTIME?  ->  SYS:UPTIME:0001:12:34:56

SYS:RESET:CAUSE?

Decoded once at start and kept, so every read of one session gives the same answer. When the bootloader started the firmware, the cause comes from the reset flags the bootloader captured. IWDG after a watchdog reset is the one to watch for in a support case.

Reset causes

Value Meaning
POWERON Power-on or power-down reset
BROWNOUT Brown-out reset without a power-on
EXTERNAL The reset pin only, for example a debugger reset
SOFTWARE A software reset: *RST, SYS:NVM:DEFAULTS, the bootloader's return from update mode
IWDG The independent watchdog; a monitored firmware task stopped making progress
WWDG The window watchdog (not used by the firmware)
LOWPOWER Low-power management reset
UNKNOWN No reset flag was set
SYS:RESET:CAUSE?  ->  SYS:RESET:CAUSE:POWERON

SYS:RTOS?

Heap figures in bytes, live. tasks_not_created is counted once at start over every task the firmware creates: a value above 0 means a feature is silently missing, and is worth a support report.

SYS:RTOS?  ->  SYS:RTOS:3576,3576,0

SYS:BOOTLOADER:INFO?

started is YES when the bootloader handed over in this start, NO for a direct start (a debug session); config PROD or DEV (NONE with NO); version the bootloader version word; attempt numbers this start since the last confirmed one, 1 meaning the previous start confirmed itself (after three unconfirmed starts the bootloader enters update mode instead of starting the firmware). floor is the rollback floor, the lowest security counter the bootloader still installs; it only rises. The last five fields describe the latest update attempt: its result and cause as codes (tables below), the firmware version word before and in the package, and the attempt number over the module's life. A version word is yy << 24 | mm << 16 | r: 0x1A0A0001 is 26.10.1. Firmware before 26.10.1 sends only the first four fields; later firmware may append more, so a host reads the fields it knows.

The query is deliberately not SYS:BOOTLOADER?: without its ? that is the command that restarts the module into update mode.

Update results (update_result)

Code Meaning
0 No attempt recorded
1 Installed and verified
2 Refused before the firmware slot was modified; the installed firmware is unchanged
3 Ended with an error after the slot was modified; the module had no valid firmware until the next installation
4 Did not finish: host abort, USB reset, idle timeout, or a reset or power loss during the attempt
5 Begun and not finished; the bootloader settles such an entry at its next start

Update causes (update_cause)

Code Meaning
0 No cause: a successful attempt, or none recorded
1 Unknown package format
2 Package of the other configuration (a development package on a production unit, or the reverse)
3 Package failed verification
4 Package for other hardware
5 Image larger than the firmware slot
6 Security counter below the rollback floor
7 A digest does not match: the package is damaged
8 Erase, program or read-back of the flash failed
9 Block out of sequence, or the transfer ended before the whole package
10 No data from the host for 30 s
11 DFU abort or USB reset by the host
12 Reset or power loss during the attempt, found at the next start
SYS:BOOTLOADER:INFO?  ->  SYS:BOOTLOADER:INFO:YES,PROD,0x00000000,1,1,1,0,0x1A080000,0x1A0A0001,9

SYS:BOOTLOADER

Mutes the power stages, writes pending settings (at most 1 s), leaves an update request for the bootloader, answers, and restarts the module 500 ms later. The serial port disappears and the DFU device of the update mode (USB 16D0:15B7) appears. Without a transfer the module returns to its firmware after 5 minutes. How an update works describes the mode.

SYS:BOOTLOADER  ->  SYS:BOOTLOADER:OK

SYS:PROTECTION?

The protection state of the microcontroller's option bytes, read-only: rdp the read-out protection level 0, 1 or 2; wrp_bl 1 when the bootloader's flash sectors are write-protected; bor the brown-out reset level 0 (off) to 3; sprmod the write-protection mode bit. A production unit answers 2,1,3,0. Diagnostics for support; nothing in the firmware depends on it.

SYS:PROTECTION?  ->  SYS:PROTECTION:2,1,3,0

SYS:PERFTEST

Echoes its parameter, for round-trip timing of the link.

SYS:PERFTEST hello  ->  SYS:PERFTEST:hello

Changes

  • 26.10.1: added SYS:RESET:CAUSE?, SYS:RTOS?, SYS:FW:PACKAGE?, SYS:BOARD:RECORD?, SYS:BOARD:TYPE?, SYS:BOOTLOADER:INFO?, SYS:PROTECTION?.
  • 26.7.0: added SYS:BOARD:ID?, SYS:BOARD:ID, SYS:BOARD:REV?, SYS:BOARD:SERIAL?.
  • 26.6.2 (oldest release documented): 7 commands.