Skip to content

XM10 Extension Module SDK v2.1.1

Release date: 2026-04-04 | Target HW: Rev1.1 / Rev2.0 | KIT H10 FW: v2.3.0+


Highlights

  • New bootloader (AGR_Bootloader) introduced for the first time — upload firmware over USB with PhAI Studio
  • Dual HW revision SDK shipped in a single release — Rev1.1 and Rev2.0 SDKs bundled together
  • 44 examples — a complete learning path from beginner to advanced control (Impedance, CPG, ILC, MRAC, DOB, and more)
  • Enhanced PhAI Studio integration — automatic Total Data Packet streaming + User Custom channels
  • xm_api_freertos added — background task API
  • Full debugging support — Live Expressions and breakpoints work correctly

Downloads

SDK (included in the repository)

Item Path Description
SDK Rev1.1 XM10_SDK/Rev1.1/Extension_Module/ Project for PCB Rev1.1
SDK Rev2.0 XM10_SDK/Rev2.0/Extension_Module/ Project for PCB Rev2.0 (adds ETH, PSRAM, RTC)

Release attachments

File Description Notes
AGR_Bootloader.bin XM10 bootloader binary (v1.1.0) Program to 0x08000000
SUIT_CM_APP_X_X_X.bin KIT H10 CM firmware See H10 FW update guide
SUIT_SAM10_APP_X_X_X.bin KIT H10 MD (SAM10) firmware Same guide
SUIT_ESP32_FW_X_X_X.bin KIT H10 ESP32 firmware Same guide
ContentsFiles.zip SD card contents files (FSM / MotionMap / RobotSetting) Updated separately

Tools

Tool Link
PhAI Studio (FW upload, sensor monitoring) studio.onephai.com
STM32CubeProgrammer (first-time bootloader installation) st.com

Full changelog from v2.0.1

New features

New bootloader (new)

  • Upload firmware over USB with PhAI Studio (USB FTP)
  • Automatic backup and rollback — restores the previous version after 3 consecutive boot failures
  • CRC-32 firmware integrity verification
  • Single bootloader binary for both Rev1.1 and Rev2.0 (it tells the board revision apart automatically)
  • Detailed guide: docs/bootloader/README.en.md

Dual HW revision SDK

  • XM10_SDK/Rev1.1/ — for PCB Rev1.1 only (CAN-FD only)
  • XM10_SDK/Rev2.0/ — for PCB Rev2.0 only (CAN-FD + Ethernet + PSRAM + RTC)
  • Each SDK is a self-contained STM32CubeIDE project — ready to build immediately after import

xm_api_freertos — background task API (new)

  • XM_BgTask_Create() — runs heavy computation in a separate task without disturbing the 1 kHz control loop
  • This task runs at a lower priority than the control loop, so the loop is unaffected
  • Do not call control APIs such as XM_SetAssistTorque from a background task — share data via volatile variables instead

Automated build finishing

  • When you build in STM32CubeIDE, the final build step runs automatically and produces the upload file (Python required)
  • Final output: XM10_X_X_X_X.bin (packaged binary for PhAI Studio upload)

Major example expansion (20 → 44 examples)

  • Physical AI torque control series (Ex.20–33): Impedance, Gravity Compensation, CPG, Gait Phase Adaptive, Virtual Constraint, Stance Stiffness, ILC, MRAC, Admittance, Bilateral, FF/FB Hybrid, Friction DOB, GRF Gait Intent, Kinesthetic Teaching
  • MSC logging series (Ex.10–10c): Basic → Custom Struct → Advanced (Rolling, Markers)
  • Gait analysis logging (Ex.34): Automatic H10 gait data collection + Python decoder
  • Ex.35 MultiLayer Transparent Control — multi-layer transparent control (new)
  • Ex.36 OnDevice Kinesthetic Learning — on-device motion learning (new)

Enhanced PhAI Studio integration

  • Total Data Packet (Module ID 0x20, 365 B): streamed automatically by the system at 1 kHz
  • User Custom channels (Module ID 0xF0–0xFE): XM_SetUsbCustomMeta() + XM_SendUsbDataWithId()
  • Auto-Stream: streaming starts automatically on USB connection (no separate start command needed)

Improvements

Total Data Packet

  • Separate CAN-FD channel 1 and channel 2 communication-status diagnostics are now included
  • timestamp_ms renamed to xm_loop_count (the control-loop execution counter — you can tell when the loop gets blocked)

Build system

  • Debugging works: libXM_Lib.a now carries debug symbols, so Live Expressions and breakpoints work correctly (Rev1.1: 66 MB, Rev2.0: 88 MB)
  • No effect on the Flash binary size (debug symbols are in the .elf only)
  • Linker setting restored: fixed the runtime memory corruption that had been solved in v2.0.1 but came back in v2.1.0 (applied to both the CubeIDE project and CMakeLists.txt)
  • CMakeLists.txt cleanup: removed unused paths, fixed folder-name capitalization (Xsens → XSENS)
  • Start-up code updated for projects generated with newer CubeMX (6.13 and later)

Example tuning

  • Ex.11 Passive Mode / Ex.12 Active Assist Mode: homing acceleration 4 → 2 deg/s², IVectorKpKd (6, 1) → (6, 6), PVectorReset added

KIT H10 FW changes (based on v2.3.0)

Key fixes in the H10 CM firmware:

  • BLE app mode synchronization: when the mode is changed from the BLE app, the H10's CM follows immediately
  • XM10 ↔ CM CAN-FD synchronization improved
  • Gait analysis counter added: the gait-analysis post-processing count can now be read from outside
  • Left IMU data fix: corrected an error where the left IMU data was mapped wrongly

For H10 FW update instructions, see: docs/kit-h10-firmware/README.en.md

Removed

  • Root copy of user_app.c removed (managed exclusively under XM_Apps/User_Algorithm/)

Compatibility matrix

Component Minimum version Recommended version Notes
XM10 FW (this SDK) v2.1.1 v2.1.1 Separate libXM_Lib.a for Rev1.1 / Rev2.0
XM10 bootloader v1.1.0 v1.1.0 Single binary (shared by Rev1.1 / Rev2.0)
KIT H10 CM v2.3.0 v2.3.0+ Includes the BLE sync fix
KIT H10 ESP32 v2.3.0 v2.3.0+
KIT H10 SAM10/MD v2.3.0 v2.3.0+
ContentsFiles 2025.02 Latest Update on SD card
STM32CubeIDE v1.13.2 v1.14.1+ GCC 13.3 required
Python 3.8+ 3.12+ Needed for the final build step
PhAI Studio — Latest studio.onephai.com

Quick start guide

1. Install the bootloader (one-time)

Details: docs/bootloader/README.en.md

  1. Use STM32CubeProgrammer to perform a Full Chip Erase.
  2. Program AGR_Bootloader.bin to address 0x08000000.

2. Open the SDK project

  1. Download the ZIP for your board revision (Rev1.1.zip / Rev2.0.zip) from Releases and extract it.
  2. In STM32CubeIDE, go to Import → Existing Projects into Workspace.
  3. Select the extracted folder (the one containing the .project file).
  4. Build (Ctrl+B) — the final build step runs automatically.

3. Upload firmware

  • During development: use STM32CubeIDE Debug (F11) via SWD, start address 0x08040000
  • For distribution: PhAI Studio → FW Upload → select XM10_X_X_X_X.bin

4. Update KIT H10 firmware

Details: docs/kit-h10-firmware/README.en.md

Copy the bundled H10 FW binaries to a USB drive, connect it to the H10, and follow the update procedure.


Known issues

  • The Rev1.1 SDK uses 98.65% of one of its memory regions. Exercise caution when allocating large buffers.
  • After a build, check that the version in version.h matches the release version (the version is taken from the git tag of the current folder).
  • Python must be on the system PATH for the final build step. If it is not recognized even after restarting STM32CubeIDE, check your system environment variables.
  • libXM_Lib.a is 66–88 MB because of its debug symbols, but this has no effect on the final Flash binary size.

Note for v2.1.0 (Pre-Release) users

Two issues found in v2.1.0 were fixed in v2.1.1:

  1. Missing linker setting → memory could get corrupted while the firmware was running
  2. Build without debug symbols → Live Expressions and breakpoints did not work

Use v2.1.1. Do not use v2.1.0.


This release is for the XM10 Extension Module, Angel Robotics' Physical AI platform.