BMS 장비를 현장에 설치했다.

근데 버그가 발견됐다. 펌웨어 업데이트해야 한다.


문제

장비가 설치된 곳:

  • 태양광 발전소 컨테이너 안
  • 전기차 배터리 팩 내부
  • 공장 천장 근처

ST-Link 연결하려면?

  1. 장비 분해
  2. 노트북 들고 현장 방문
  3. 디버그 포트 연결
  4. 업데이트
  5. 다시 조립

귀찮다.


해결책: 부트로더

CAN 버스로 펌웨어 업데이트하면 된다.

장비 분해 없이, 통신선만 연결하면 업데이트 가능.

[PC] -- CAN -- [장비1]
            -- [장비2]
            -- [장비3]

여러 대 순차 업데이트도 가능.


ST 내장 부트로더는?

STM32에 System Memory 영역에 부트로더가 내장되어 있다.

BOOT0 핀 HIGH로 올리면 진입.

근데 문제:

  • BOOT0 핀에 접근해야 함 → 장비 열어야 함
  • CAN 지원 안 되는 칩 많음 → UART/I2C만 지원
  • 프로토콜 고정 → 커스터마이징 불가

결국 직접 만들어야 한다.


커스텀 부트로더의 장점

  1. 원격 업데이트 - CAN/RS485로 멀리서도 가능
  2. 인증 - 아무나 못 올리게 암호화
  3. 다중 노드 - 한 번에 여러 장비 업데이트
  4. 롤백 - 실패하면 이전 버전으로 복구
  5. 부트 조건 자유 - 버튼, 타이머, 특정 메시지 등

이 시리즈에서 만들 것

┌─────────────────────────────┐
│        Application          │  ← 실제 펌웨어
│        (246KB)              │
├─────────────────────────────┤
│        Buffer               │  ← 수신 버퍼
│        (254KB)              │
├─────────────────────────────┤
│        Bootloader           │  ← 이걸 만든다
│        (16KB)               │
└─────────────────────────────┘
  • CAN으로 펌웨어 수신
  • Flash에 쓰기
  • 검증 후 앱 점프
  • Python 업로더

다음 글에서 STM32 메모리 맵.

#2 - STM32 메모리 맵