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: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: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: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: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: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: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¶
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: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:PERFTEST¶
Echoes its parameter, for round-trip timing of the link.
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.