XM10 Extension Module SDK v2.2.0¶
릴리즈 날짜: 2026-05-18 | 대상 HW: Rev 1.1 / Rev 2.0 | KIT H10 FW: v2.3.0+
한눈에 보기¶
이번 버전은 사용자 함수 이름을 정리하고, 여러 작업을 동시에 돌리는 방법 을 양 리비전에서 똑같이 쓸 수 있도록 평준화한 업데이트입니다.
- 사용자 함수 이름:
User_Setup/User_Loop→Control_Setup/Control_Loop(예전 이름은 더 이상 지원되지 않으니 함수명을 바꿔 주세요) - 폴더 이름:
XM_Apps/User_Algorithm/→XM_Apps/Control_Task/ - Rev 1.1 에도 보조 작업(task) API + 데이터 공유 보호 API 추가 — 이제 Rev 1.1 / Rev 2.0 어느 보드든 똑같은 방식으로 멀티 작업을 짤 수 있습니다
- 학습 예제 2 개 추가 (Ex.38, Ex.39)
- 작업 구조 가이드 문서 1 편 추가 (
docs/api-reference/09-task-creation.md)
기존 자산을 그대로 사용해도 됩니다. 새 이름이 더 직관적이라 새로 짤 때 권장.
다운로드¶
SDK ZIP — GitHub Release 페이지에서 직접 다운로드¶
| 파일 | 대상 보드 |
|---|---|
| Rev1.1.zip | XM10 Rev 1.1 (초기 개발용 보드) |
| Rev2.0.zip | XM10 Rev 2.0 (Ethernet / PSRAM / RTC 포함 최신 보드) |
압축을 풀면 한 폴더가 나옵니다. 그 폴더가 곧 STM32CubeIDE Import root + Claude Code 진입 폴더입니다.
Release 첨부 파일¶
| 파일 | 설명 |
|---|---|
AGR_Bootloader.bin |
XM10 부트로더 (v1.1.0). 0x08000000 에 한 번만 설치하면 됩니다. (이미 설치되어 있음) |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_CM_APP_X_X_X.bin |
KIT H10 CM 펌웨어. USB-C 메모리로 직접 업데이트 필요. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_SAM10_APP_X_X_X.bin |
KIT H10 MD(SAM10) 펌웨어. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_ESP32_FW_X_X_X.bin |
KIT H10 ESP32 펌웨어. |
SUIT_FW_ContentsFiles_20260518.zip/SUIT_ContentsFiles.zip |
KIT H10 컨텐츠파일 SDcard에 직접 폴더 전체 교체 필요. |
자세한 업데이트 절차는 docs/kit-h10-firmware/ 참고.
도구¶
| 도구 | 링크 |
|---|---|
| PhAI Studio (실시간 데이터 모니터링, 데이터 수집) | studio.onephai.com |
| STM32CubeProgrammer (부트로더 최초 설치) | st.com |
| STM32CubeIDE (펌웨어 개발 IDE) | st.com |
새로 추가된 것¶
1. 사용자 함수 이름 정리¶
이전까지 사용자가 작성하는 두 함수의 이름이 User_Setup / User_Loop 였는데, 이번 버전부터 Control_Setup / Control_Loop 으로 통일했습니다. "제어 코드를 여기에 쓴다" 라는 의도가 더 명확하기 때문입니다.
// 이전
void User_Setup(void) { /* 초기화 */ }
void User_Loop(void) { /* 1 ms 주기 반복 */ }
// 이번 버전 (권장)
void Control_Setup(void) { /* 초기화 */ }
void Control_Loop(void) { /* 1 ms 주기 반복 */ }
기존 코드는 그대로 둬도 됩니다. SDK 내부에서 옛 이름과 새 이름을 둘 다 받아들이도록 처리해 두었습니다. 새로 시작하는 코드는 새 이름으로 쓰시면 됩니다.
폴더 이름도 같은 맥락에서 XM_Apps/User_Algorithm/ → XM_Apps/Control_Task/ 로 바뀌었습니다.
2. Rev 1.1 에도 보조 작업(task) API 추가¶
Rev 2.0 에만 있던 다음 API 가 이제 Rev 1.1 에도 같이 들어갑니다. 어떤 보드를 쓰든 동일한 방식으로 멀티 작업 코드를 짤 수 있습니다.
// 1회만 실행되는 무거운 계산 (예: 학습, FFT)
XmTaskHandle_t XM_Task_CreateOneShot(...);
// 주기적으로 도는 보조 작업 (예: 10ms 마다 평균 계산)
XmTaskHandle_t XM_Task_CreatePeriodic(...);
// 작업 끝났는지 확인 / 정리
bool XM_Task_IsComplete(XmTaskHandle_t h);
void XM_Task_Delete(XmTaskHandle_t h);
// 두 작업이 같은 데이터를 안전하게 주고받기 위한 잠금
XmMutexHandle_t XM_Mutex_Create(void);
bool XM_Mutex_Lock(XmMutexHandle_t m, uint32_t timeout_ms);
void XM_Mutex_Unlock(XmMutexHandle_t m);
기존 XM_BgTask_Create 도 그대로 동작합니다 (deprecated 표시만 추가). 새 코드는 새 API 권장.
3. 학습 예제 2 개 추가¶
| 예제 | 학습 포인트 |
|---|---|
Examples/38_Periodic_Background_Task/ |
Control_Loop(1 kHz, 빠른 제어) 과 보조 task(100 Hz, 평균 계산) 가 같은 데이터를 안전하게 주고받는 패턴 |
Examples/39_Task_Lifecycle/ |
버튼 누르면 200 ms 짜리 무거운 계산을 별도 task 로 돌리고 끝나면 깔끔하게 정리하는 패턴 |
처음 보조 task 를 만들어 보는 사용자에게 추천합니다. README 에 회로 셋업과 흔한 실수까지 정리되어 있습니다.
4. 작업 구조 가이드 문서¶
docs/api-reference/09-task-creation.md — 보드 안에서 어떤 task 들이 어떤 우선순위로 돌고 있는지, 사용자가 만든 보조 task 가 어디에 들어가는지 한 그림으로 정리한 문서입니다. 1 kHz 주기를 깨지 않으면서 안전하게 코드 추가하는 데 도움이 됩니다.
Rev 1.1 ↔ Rev 2.0 평준화¶
이전까지는 Rev 2.0 에만 있던 기능이 몇 개 있었지만, 이번 버전부터 사용자 코드 영역의 API 는 두 보드가 동일합니다.
| 항목 | Rev 1.1 | Rev 2.0 |
|---|---|---|
사용자 함수 이름 (Control_Setup/Loop) |
✅ | ✅ |
보조 task API (XM_Task_*) |
✅ (v2.2.0 부터) | ✅ |
데이터 보호 API (XM_Mutex_*) |
✅ (v2.2.0 부터) | ✅ |
| Ex.38 / Ex.39 학습 예제 | ✅ (v2.2.0 부터) | ✅ |
| 작업 구조 가이드 | ✅ (v2.2.0 부터) | ✅ |
| ETH / PSRAM / RTC | ❌ (HW 부재) | ✅ |
사용자 학습 코스는 Rev 1.1 / Rev 2.0 어느 쪽이든 동일하게 진행할 수 있습니다.
호환성 안내¶
기존 v2.1.1 코드를 v2.2.0 SDK 로 올릴 때¶
함수 이름만 새 규칙으로 바꾸면 됩니다 (예전 이름은 더 이상 지원되지 않습니다).
- 옛 함수 이름 (
User_Setup/User_Loop) →Control_Setup/Control_Loop로 변경 필요 - 옛 API (
XM_BgTask_Create) 그대로 두어도 동작 - 사용자 코드 폴더는 옛 위치에 그대로 두면 자동으로 새 위치 (
Control_Task/) 로 찾아갑니다 (단, ZIP 새로 풀면Control_Task/만 들어 있습니다 — 그 안에 본인 코드를 옮기세요)
새로 시작하는 코드¶
XM_Apps/Control_Task/control_task.c안에Control_Setup()/Control_Loop()작성- 보조 task 가 필요하면
Ex.38/Ex.39패턴 참고
변경 파일¶
SDK 안의 펌웨어 라이브러리(libXM_Lib.a)도 위 변경을 반영해 새로 빌드되었습니다. 사용자가 따로 할 일은 없습니다.
도움 받기¶
- 막히는 부분: docs/troubleshooting.md
- 예제별 트러블슈팅: Claude Code 에 "Ex.38 안 돼" 같이 말하면 안내 받을 수 있습니다
- 이슈 제출: GitHub Issues
이번 v2.2.0 은 이름 정리 + 평준화 가 핵심입니다. 다음 학기 / 다음 프로젝트 시작 전에 한 번 새 SDK 로 올려두시는 걸 권장합니다.