BMS 장비를 현장에 설치했다.
근데 버그가 발견됐다. 펌웨어 업데이트해야 한다.
문제
장비가 설치된 곳:
- 태양광 발전소 컨테이너 안
- 전기차 배터리 팩 내부
- 공장 천장 근처
ST-Link 연결하려면?
- 장비 분해
- 노트북 들고 현장 방문
- 디버그 포트 연결
- 업데이트
- 다시 조립
귀찮다.
해결책: 부트로더
CAN 버스로 펌웨어 업데이트하면 된다.
장비 분해 없이, 통신선만 연결하면 업데이트 가능.
[PC] -- CAN -- [장비1]
-- [장비2]
-- [장비3]
여러 대 순차 업데이트도 가능.
ST 내장 부트로더는?
STM32에 System Memory 영역에 부트로더가 내장되어 있다.
BOOT0 핀 HIGH로 올리면 진입.
근데 문제:
- BOOT0 핀에 접근해야 함 → 장비 열어야 함
- CAN 지원 안 되는 칩 많음 → UART/I2C만 지원
- 프로토콜 고정 → 커스터마이징 불가
결국 직접 만들어야 한다.
커스텀 부트로더의 장점
- 원격 업데이트 - CAN/RS485로 멀리서도 가능
- 인증 - 아무나 못 올리게 암호화
- 다중 노드 - 한 번에 여러 장비 업데이트
- 롤백 - 실패하면 이전 버전으로 복구
- 부트 조건 자유 - 버튼, 타이머, 특정 메시지 등
이 시리즈에서 만들 것
┌─────────────────────────────┐
│ Application │ ← 실제 펌웨어
│ (246KB) │
├─────────────────────────────┤
│ Buffer │ ← 수신 버퍼
│ (254KB) │
├─────────────────────────────┤
│ Bootloader │ ← 이걸 만든다
│ (16KB) │
└─────────────────────────────┘
- CAN으로 펌웨어 수신
- Flash에 쓰기
- 검증 후 앱 점프
- Python 업로더
다음 글에서 STM32 메모리 맵.