XM10 Extension Module SDK v2.8.1¶
릴리즈 날짜: 2026-10-07 | 대상 보드: Rev 1.1 · Rev 2.0 | 바뀐 이름: PC 도구 폴더
pc-data-tool
한눈에 보기¶
- PC 도구가 여러 구조체를 한 번에 다룹니다. 실시간 화면이 Module ID 마다 탭으로 나뉘고, CSV 도 모듈마다 따로 저장됩니다.
- CAN-FD 로 받는 데이터의 결함을 고쳤습니다. 수신 버퍼가 가득 찼을 때 내용이 빈 메시지가 끼어들 수 있었습니다(Rev 1.1 · Rev 2.0).
- PC 도구 폴더 이름이
pc-data-tool로 바뀌었습니다. 기능과 사용법은 그대로입니다. - EMG Hub 캘리브를 XM API 로 보냅니다 —
XM_SendEmgHubCalCommand()(Rev 2.0). - 예제 수 — Rev 2.0 45 개 / Rev 1.1 40 개.
- 함께 올리는 부트로더가 v1.1.0 으로 바뀌었습니다. 부팅이 빨라지고, 리셋이 계속 반복되면 멈추고 펌웨어 업로드를 기다립니다(Rev 2.0). 아직 보드로 확인하지 않았습니다.
PC 데이터 도구 — 모듈별 탭¶
xm10.py recv 의 실시간 화면은 지금까지 처음 들어온 사용자 Module ID 하나만 그렸습니다. 이번부터 Module ID 마다 탭이 하나씩 생깁니다.
- 탭 제목은 채널 이름(채널이 하나일 때)이나 Module ID 로 붙습니다.
- 보고 있지 않은 탭도 저장은 계속됩니다. CSV 는 Module ID 마다 하나씩 생깁니다 —
cdc_phai_<시각>_user_0xF0.csv,cdc_phai_<시각>_user_0xF1.csv. - Show 0x20 tab 을 켜면 Total Data 197 채널을 표로 봅니다(초당 5 번 갱신).
- 데이터가 몰려 들어와도 화면이 멈추지 않게 했고, 연결을 끊거나 창을 닫을 때 남은 데이터까지 저장합니다.
.xmlog — 다시 연결해도 섞이지 않습니다¶
- 다시 연결할 때마다 새 구간으로 기록합니다. 같은 초에 다시 시작해도 파일을 덮어쓰지 않습니다.
- CSV 로 뽑을 때는 각 행을 그 행을 받을 때 유효했던 구조체 정의로 풉니다. 정의가 바뀐 모듈은 CSV 가
..._user_0xF0_schema2.csv처럼 나뉩니다. - 창에서 Disconnect 뒤 Connect 만 다시 눌러 받은
.xmlog에는 채널 이름이 없습니다(화면에는 그대로 남습니다). 지금 펌웨어는 USB 가 새로 잡힐 때 한 번만 이름을 보내기 때문입니다.
폴더 이름이 바뀌었습니다 — pc-data-tool¶
SDK 안 PC 도구 폴더가 PythonDecoder/ 에서 pc-data-tool/ 로 바뀌었습니다. 안의 파일과 사용법은 그대로이고 경로만 바뀝니다.
v2.8.0 ZIP 을 쓰고 계시면 그 폴더 이름은 계속 PythonDecoder 입니다 — 같은 도구입니다.
고친 것¶
CAN-FD 로 받는 데이터 (Rev 1.1 · Rev 2.0)¶
CAN-FD 수신 버퍼가 가득 찼을 때 다음에 읽을 위치를 잘못 계산해, 내용이 빈 메시지가 끼어들 수 있었습니다. H10 이나 센서 허브처럼 CAN-FD 로 받는 데이터가 대상입니다. 이번에 읽는 방식을 고쳤습니다.
Ex.41 IMU Hub Dashboard — 채널 이름이 나옵니다 (Rev 2.0)¶
채널 이름 목록이 512 B 를 넘어서 보내지지 않았고, PC 에는 ch0, ch1… 로만 보였습니다. 단위를 이름 안에 넣어 487 B 로 줄였습니다.
Ex.33 Kinesthetic Teaching¶
실제 동작과 다른 출력 문구 한 줄을 지웠습니다.
새 API — EMG Hub 캘리브 (Rev 2.0)¶
if (XM_GetButtonEvent(XM_BTN_1) == XM_BTN_CLICK) XM_SendEmgHubCalCommand(XM_EMG_HUB_CAL_OFFSET); // 근육을 이완한 상태
if (XM_GetButtonEvent(XM_BTN_2) == XM_BTN_CLICK) XM_SendEmgHubCalCommand(XM_EMG_HUB_CAL_MVC); // 최대로 수축한 상태
bool calib_valid = (XM.status.emg_hub.status_flags & XM_EMG_HUB_STATUS_CALIB_VALID) != 0U;
- 허브가 연결되지 않았거나 보내지 못하면
false를 돌려줍니다. - 버튼을 눌렀을 때처럼 가끔 한 번씩만 부르세요. 매 루프마다 부르지 마세요.
- Ex.42 EMG Hub Biofeedback 이 이 함수를 쓰도록 바뀌었습니다.
- EMG Hub 는 내부에서 개발 중인 모듈입니다. 사용하려면 https://huphailab.com/contact 로 문의해 주세요.
예제 개수¶
Rev 2.0 45 개 / Rev 1.1 40 개.
- Ex.37(FES Hub) 삭제 — FES Hub 는 현재 XM10 연결을 지원하지 않습니다.
- Rev 1.1 SDK 에서 Ex.36 제외 — Rev 2.0 에만 있는 저장 기능(
XM_UserNV_*)을 써서 Rev 1.1 에서는 빌드되지 않던 예제입니다. Rev 2.0 SDK 에는 그대로 있습니다.
부트로더 v1.1.0¶
이번 릴리즈에 올리는 부트로더(AGR_Bootloader.bin)는 v1.1.0 입니다. Rev 1.1 · Rev 2.0 보드에 같은 파일을 씁니다. 아직 보드로 확인하지 않았습니다.
- 부팅이 빨라집니다. 부팅할 때 LED 가 차례로 켜진 뒤 1~2 초 동안 모두 꺼져 있던 구간이 없어집니다.
- 리셋이 계속 반복되면 멈추고 기다립니다 (Rev 2.0). 펌웨어가 시작된 뒤 5 초를 넘기지 못하고 다시 시작되는 일이 10 번 연속 생기면, 부트로더가 펌웨어를 실행하지 않고 보드 LED 3 개를 함께 깜빡이며 펌웨어 업로드를 기다립니다. PhAI Studio 로 펌웨어를 다시 올리면 풀립니다.
- 부팅 진단 기록 — 보드가 리셋을 반복할 때 원인을 찾을 수 있도록, 리셋 원인과 부팅 단계를 보드에 남깁니다. Rev 2.0 펌웨어는 펌웨어 쪽 단계도 함께 남깁니다.
이미 부트로더가 설치된 보드는 바꾸지 않아도 됩니다. v2.8.1 펌웨어는 이전 부트로더로도 동작하고, 이때는 위의 '멈추고 기다림'이 없습니다.
부트로더만 바꿀 때는 STM32CubeProgrammer 에서 Full chip erase 를 하지 말고 AGR_Bootloader.bin 을 0x08000000 에 올리세요. 펌웨어는 그대로 남습니다 — 부트로더 안내 3 절.
아직 확인하지 못한 것 — 꼭 읽어 주세요¶
- 보드로 아직 확인하지 못한 것: Ex.41 채널 이름 표시(
xm10도구), Ex.42 캘리브(EMG Hub), 부트로더 v1.1.0(리셋 반복 시 멈춤 포함), 부팅 진단 기록, Rev 1.1 의 CAN-FD 수신 변경. 빌드와 PC 쪽 시험으로 확인했습니다. 써 보시다가 이상한 점이 있으면 알려 주세요. - 지금 펌웨어는 구조체 정의(
0xEE)를 보내지 않습니다. 그래서 PC 는 사용자 채널을 float32 로 가정해 보여 줍니다(v2.8.0 과 같습니다). 위의 '구조체 정의로 풀기' 는 만들어 둔 데이터로만 확인했습니다.
호환성¶
| 항목 | 내용 |
|---|---|
| 기존 펌웨어 코드 | 재빌드만 하면 됩니다. 삭제되거나 이름이 바뀐 공개 API 없음 |
| PC 데이터 도구 | 폴더 이름만 pc-data-tool 로 바뀜. 필요한 Python 패키지는 그대로 (pyserial pyqt5 pyqtgraph numpy) |
| Rev 1.1 | CAN-FD 수신 수정 · Ex.36 제외(예제 40 개) |
| Rev 2.0 | CAN-FD 수신 수정 · EMG Hub 캘리브 API · Ex.41 채널 이름 · 부팅 진단 기록 · 리셋 반복 시 멈춤(부트로더 v1.1.0 과 함께 쓸 때) |
| 부트로더 | v1.1.0 으로 바뀜. 이미 설치된 부트로더는 바꾸지 않아도 됩니다 |
다운로드¶
| 파일 | 대상 |
|---|---|
Rev2.0.zip |
Rev 2.0 보드용 SDK (예제 45 개, pc-data-tool/ 포함) |
Rev1.1.zip |
Rev 1.1 보드용 SDK (예제 40 개, pc-data-tool/ 포함) |
AGR_Bootloader.bin |
XM10 부트로더 v1.1.0 — Rev 1.1 · Rev 2.0 공통 (아직 보드로 확인하지 않음) |
SUIT_H10_Binary_20260820.zip |
KIT H10 펌웨어 — v2.6.0 과 동일본 |
SUIT_ContentsFiles_20260820.zip |
H10 컨텐츠 파일 — v2.6.0 과 동일본 |
H10 관련 2 개 파일은 v2.6.0 것을 그대로 다시 올린 것입니다.
압축을 풀 때 짧은 경로(예: C:\xm10\)에 푸세요. 경로가 깊으면 윈도우의 경로 길이 제한 때문에 빌드가 실패할 수 있는데, 이건 코드 문제가 아니라 경로 길이 문제입니다.