XM10 Extension Module SDK v2.2.0¶
Release date: 2026-05-18 | Target HW: Rev 1.1 / Rev 2.0 | KIT H10 FW: v2.3.0+
Overview¶
This release standardizes user function naming and makes multi-task APIs available on both board revisions.
- User functions renamed:
User_Setup/User_Loop→Control_Setup/Control_Loop(the old names are no longer supported — please update your function names) - Folder renamed:
XM_Apps/User_Algorithm/→XM_Apps/Control_Task/ - Auxiliary task API + data-sharing protection API added to Rev 1.1 — you can now write multi-task code in exactly the same way on either Rev 1.1 or Rev 2.0
- Two new learning examples added (Ex.38, Ex.39)
- One new task-structure guide added (
docs/api-reference/09-task-creation.md)
Your existing code continues to work as-is. The new names are more descriptive, so use them for any new code you write.
Download¶
SDK ZIP — Download directly from the GitHub Releases page¶
| File | Target board |
|---|---|
| Rev1.1.zip | XM10 Rev 1.1 (early development board) |
| Rev2.0.zip | XM10 Rev 2.0 (latest board with Ethernet / PSRAM / RTC) |
Extract the archive — the resulting folder is both the STM32CubeIDE import root and the Claude Code working directory.
Release attachments¶
| File | Description |
|---|---|
AGR_Bootloader.bin |
XM10 bootloader (v1.1.0). Flash once to 0x08000000 — already installed on shipped boards. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_CM_APP_X_X_X.bin |
KIT H10 CM firmware. Must be updated via USB-C memory directly. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_SAM10_APP_X_X_X.bin |
KIT H10 MD (SAM10) firmware. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_ESP32_FW_X_X_X.bin |
KIT H10 ESP32 firmware. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_ContentsFiles.zip |
KIT H10 content files. Replace the entire folder on the SD card. |
For detailed update procedures, see docs/kit-h10-firmware/.
Tools¶
| Tool | Link |
|---|---|
| PhAI Studio (real-time data monitoring and data collection) | studio.onephai.com |
| STM32CubeProgrammer (initial bootloader installation) | st.com |
| STM32CubeIDE (firmware development IDE) | st.com |
What's New¶
1. Renamed user functions¶
The two functions you write have been renamed from User_Setup / User_Loop to Control_Setup / Control_Loop. The new names make their intent explicit — this is where you put your control code.
// Before
void User_Setup(void) { /* initialization */ }
void User_Loop(void) { /* runs every 1 ms */ }
// This release (recommended)
void Control_Setup(void) { /* initialization */ }
void Control_Loop(void) { /* runs every 1 ms */ }
Your existing code keeps working. The SDK internally accepts both the old and new names. Use the new names for any new code you write.
The folder has been renamed from XM_Apps/User_Algorithm/ to XM_Apps/Control_Task/ for the same reason.
2. Auxiliary task API added to Rev 1.1¶
The following APIs, previously available only on Rev 2.0, are now included in Rev 1.1 as well. You can write multi-task code in exactly the same way regardless of which board you use.
// Run a heavy computation once (e.g., training, FFT)
XmTaskHandle_t XM_Task_CreateOneShot(...);
// Run a periodic auxiliary task (e.g., compute average every 10 ms)
XmTaskHandle_t XM_Task_CreatePeriodic(...);
// Check completion / clean up
bool XM_Task_IsComplete(XmTaskHandle_t h);
void XM_Task_Delete(XmTaskHandle_t h);
// Mutex for safely sharing data between two tasks
XmMutexHandle_t XM_Mutex_Create(void);
bool XM_Mutex_Lock(XmMutexHandle_t m, uint32_t timeout_ms);
void XM_Mutex_Unlock(XmMutexHandle_t m);
The existing XM_BgTask_Create still works (marked deprecated only). Use the new API for new code.
3. Two new learning examples¶
| Example | What you learn |
|---|---|
Examples/38_Periodic_Background_Task/ |
Safe data sharing between Control_Loop (1 kHz, fast control) and an auxiliary task (100 Hz, average computation) |
Examples/39_Task_Lifecycle/ |
Offloading a 200 ms heavy computation to a separate task on button press, then cleaning it up properly |
Recommended for anyone creating an auxiliary task for the first time. Each README covers circuit setup and common mistakes.
4. Task-structure guide¶
docs/api-reference/09-task-creation.md — a single-diagram reference showing which tasks run inside the board, their priorities, and where a user-created auxiliary task fits in. Helps you add code safely without breaking the 1 kHz cycle.
Rev 1.1 ↔ Rev 2.0 parity¶
Previously, a few features existed only on Rev 2.0. Starting with this release, the user code area API is identical on both boards.
| Feature | Rev 1.1 | Rev 2.0 |
|---|---|---|
User function names (Control_Setup/Loop) |
✅ | ✅ |
Auxiliary task API (XM_Task_*) |
✅ (from v2.2.0) | ✅ |
Data-protection API (XM_Mutex_*) |
✅ (from v2.2.0) | ✅ |
| Ex.38 / Ex.39 learning examples | ✅ (from v2.2.0) | ✅ |
| Task-structure guide | ✅ (from v2.2.0) | ✅ |
| ETH / PSRAM / RTC | ❌ (hardware not present) | ✅ |
The student learning course can now be completed identically on either Rev 1.1 or Rev 2.0.
Compatibility notes¶
Migrating from v2.1.1 to v2.2.0¶
The only required change is renaming your entry-point functions (the old names are no longer supported).
- Rename
User_Setup/User_Loop→Control_Setup/Control_Loop XM_BgTask_Createcan stay as-is — it still works- If you leave your user code folder in the old location, the SDK will find it automatically. However, freshly extracted ZIP archives contain only
Control_Task/— copy your code into that folder
Starting a new project¶
- Write
Control_Setup()/Control_Loop()insideXM_Apps/Control_Task/control_task.c - If you need an auxiliary task, follow the patterns in
Ex.38/Ex.39
Changed files¶
The firmware library inside the SDK (libXM_Lib.a) was also rebuilt to include the changes above. There is nothing you need to do on your end.
Getting help¶
- Stuck somewhere: docs/troubleshooting.md
- Example-specific troubleshooting: tell Claude Code something like "Ex.38 isn't working" and it will guide you
- File an issue: GitHub Issues
The theme of v2.2.0 is naming cleanup + parity. We recommend upgrading to the new SDK before starting your next semester or project.