Skip to content

Hardware Specifications

This page is your single reference for all external interfaces on the XM10 board — what connectors it has, how many, and where to plug things in. It is the first page to check when getting started.

Board photos and per-revision GPIO header images are maintained under assets/img/.


At a Glance

Category Count / Type Notes
Board LEDs 3 LED 1 (left) · LED 2 (center) · LED 3 (right)
Channel LEDs 7 × RGB EMG / FES / IMU / HMMG / GRF_L / GRF_R / USB (module status indicators)
Buttons 3 BTN 1 (left) · BTN 2 (center) · BTN 3 (right)
External GPIO DIO 8 + ADC 4 (+ dynamic ADC 8) See per-revision pinmap
CAN-FD ports 2 KIT H10 connection + sensor hub expansion
USB-C 1 Serial communication (CDC) — PC connection. Rev 2.0 can also save to a USB memory stick (one at a time with a PC). (not yet confirmed on the board)
External UART 1 (Rev 2.0 only) Serial link to external devices — general-purpose Serial API. Rev 1.1 does not have this port
SWD debug 4-pin ST-Link firmware upload and debugging
Main connector 1 KIT H10 body connection (24 V power + CAN-FD)

For the exact physical location of each interface, refer to the board photo below.


Board Overview

XM10 board — interface locations

This photo shows the physical positions of the 3 LEDs, 3 buttons, main connector, SWD header, USB-C port, CAN-FD ports, external GPIO header, and external UART port at a glance. For the external GPIO header pinmap by revision, see the Rev 1.1 and Rev 2.0 pages.


External Interfaces

Main Connector (KIT H10 connection)

Delivers both power and communication to the XM10 through a single cable. Uses a Molex 1053081206 6-pin connector.

Pin Function
1 NC
2 24 V (power)
3 GND
4 GND
5 CAN HIGH
6 CAN LOW

Connection procedure: Getting Started — 01 Hardware Setup

CAN-FD Ports

Two ports total. One communicates with KIT H10 through the main connector; the other is for expanding sensor hubs (EMG / GRF / FSR, etc.).

Port Purpose
CAN-FD #1 KIT H10 exoskeleton ↔ XM10 (routed through the main connector)
CAN-FD #2 Sensor hub module expansion

The EMG Hub is a module under internal development. To use it, please contact us at https://huphailab.com/contact.

USB-C Port

Used for data exchange with a PC via USB serial communication (CDC) for real-time data streaming and debug messages. On Rev 2.0 you can also plug a USB memory stick into the same port and save data to it. There is only one port, so you use either a PC or a USB memory stick at a time.

Mode Purpose Functions used
Serial (CDC) Text debug via a PC terminal / user structs via the xm10 tool. PhAI Studio shows Total Data (0x20) XM_SendUsbDebugMessage, XM_SendUsbDataWithId
USB memory logging 🟢 Rev 2.0 only Saves one struct at a fixed rate to a USB memory stick, and you decode the saved folder on a PC (USB Memory Logging). While the stick is plugged in, the board does not connect to a PC over USB. (not yet confirmed on the board) XM_SetUsbLogSource, XM_StartUsbDataLog, XM_StopUsbDataLog

External UART Port 🟢 Rev 2.0 only

A serial (UART) link to external equipment. The peer can be another XM10, an Arduino, a PC, another MCU — anything.

Item Value
Peripheral / pins USART2, TX = PD5 (EXT_UART_TX) / RX = PD6 (EXT_UART_RX)
Logic level 3.3 V — never wire 5 V directly (use a level shifter)
Default settings 921600 8N1, no flow control (only the baud rate is changeable; 8N1 is fixed)
Max bytes per send 128

When wiring, cross TX and RX and always connect GND. These are the two most common mistakes.

Software: as of v2.7.0 the port is used through five functions — XM_AttachExternalUart(), XM_SetExternalUartBaudrate(), XM_SendExternalUartData(), XM_SendExternalUartDataBlocking(), XM_EnsureExternalUartRxArmed(). See the API reference and Ex.43 External UART Ping-Pong.

A dedicated driver for attaching a specific IMU (XSENS MTi) to this port also exists, but it cannot coexist with the general-purpose Serial API — a build switch selects one or the other (general-purpose Serial is the default). See section 5 of the API reference above.

🛑 Rev 1.1 does not have this port. Its only serial ports are UART7/UART8 for the foot sensors (GRF), and PD6 on Rev 1.1 is USB_PWR_ON — an output that switches USB power. Applying the Rev 2.0 wiring to a Rev 1.1 board puts that output against the peer's TX output. Check your board revision first.

SWD Debug Port

A 4-pin header for connecting an ST-Link V2/V3 debugger. Use this when flashing firmware for the first time and for debugging sessions.

Pin layout: Getting Started — 01 Hardware Setup


Board Inputs and Outputs

Buttons

Button Location API MCU Pin (Rev 1.1) MCU Pin (Rev 2.0)
BTN 1 Left XM_GetButtonEvent(XM_BTN_1) PC10 PC11
BTN 2 Center XM_GetButtonEvent(XM_BTN_2) PC11 PC12
BTN 3 Right XM_GetButtonEvent(XM_BTN_3) PC12 PC13

Supported events: press (XM_BTN_PRESSED), release (XM_BTN_RELEASED), click (XM_BTN_CLICK), and long press — held for 1 second or more (XM_BTN_LONG_PRESS).

⚠️ Going from Rev 1.1 to Rev 2.0, all three onboard buttons shifted by one MCU pin (PC10 was reassigned to external SRAM (PSRAM) on Rev 2.0). The API names (XM_BTN_1/2/3) retain their left/center/right meaning on both revisions, so as long as you use the SDK ZIP that matches your board's revision, you do not need to worry about this. Loading the wrong revision's ZIP will offset every button mapping by one position.

LEDs

LED Location API
LED 1 Left XM_SetLedState(XM_LED_1, XM_ON), etc.
LED 2 Center XM_SetLedState(XM_LED_2, ...)
LED 3 Right XM_SetLedState(XM_LED_3, ...)

Supported effects: on/off (XM_LED_SOLID / OFF), blink (BLINK), heartbeat (HEARTBEAT), and single-shot (ONESHOT).

Channel LEDs (7 × RGB)

RGB LEDs that indicate the connection status of each sensor module by color. The system controls them automatically, but you can also set colors directly with XM_SetChannelLedRGB() when needed.

Channel LED Indicated module
XM_CH_LED_EMG EMG module
XM_CH_LED_FES FES module
XM_CH_LED_IMU IMU module
XM_CH_LED_HMMG HMMG module
XM_CH_LED_GRF_L / _GRF_R Left / right GRF shoes
XM_CH_LED_USB USB connection status

Full LED and button API reference: LED & Button Control


External GPIO Pinmap

The external GPIO header is the section you will consult most frequently. Connector position and labeling differ by board revision, so make sure to open the page for your board.

Board revision Pinmap page
Rev 1.1 external-gpio-rev1.1.md
Rev 2.0 external-gpio-rev2.0.md

For how to use the pins themselves (calling input/output functions), see the External IO API.


Board Revision Comparison

First, confirm which revision your board is. The board label reads either Rev 1.1 or Rev 2.0. The easiest visual distinction is the presence of an RJ45 Ethernet port — only Rev 2.0 has one.

Feature Rev 1.1 Rev 2.0
RJ45 Ethernet port Not present Present (the quickest visual identifier)
Channel LEDs (7 × RGB) Not present (3 onboard LEDs only) Present (PCA9957, XM_SetChannelLedRGB API)
External SRAM (PSRAM) Not present Present (uses MCU pin PC10)
External UART port Not present (PD6 is the USB_PWR_ON output) Present — USART2, PD5/PD6, general-purpose Serial API
Onboard button MCU pins PC10 / PC11 / PC12 PC11 / PC12 / PC13 (shifted by one pin)
External GPIO connector location / label Rev 1.1 pinmap Rev 2.0 pinmap
Distribution ZIP Rev1.1.zip Rev2.0.zip

Building with a ZIP from a different revision than your board — the build itself will succeed, but the onboard button and LED MCU pin mappings will be off by one position and the board will not behave correctly. Always check the board label first.