일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Android
- 전기차
- 서버리스
- 펌웨어
- 라즈베리파이
- YMODEM
- flask
- 안드로이드
- esp8266
- STM32
- lambda
- 급속충전기
- 충전기
- AWS
- 파이썬
- dynamodb
- 전기차충전
- 보안
- 홈어시스턴트
- raspberry
- homeassistant
- 디자인패턴
- 에버온
- 전기차충전기
- everon
- IOT Core
- 플라스크
- OCPP
- 완속충전기
- thread
- Today
- Total
Louie NRT Story
[STM32] stm32f1 IAP(In Application Programming) - 01 본문
[STM32] stm32f1 IAP(In Application Programming) - 01
hyeok0724.kim@gmail.com 2021. 4. 5. 16:57작성일: 21년 4월 5일
Index
1. IAP(In Application Programming)
2. STM example code
3. 메모리 구조
4. Application 버전을 알기 위한 방법
5. 펌웨어 업데이트 시퀀스
1. IAP(In Application Programming)
- STMicroelectronics에서는 원격으로 Firmware를 업데이트 할 수 있도록 방법과 코드에 대해서 제공해주고 있음
※ IAP를 사용하는 이유
1) 부트로더를 별도로 두어 사용자가 Firmware를 ST-LINK 또는 J-LINK 등의 다운로더를 이용하지 않고 Application영역의 Firmware을 업데이트할 수 있도록 해주는 프로그램 임.
2) 제품이 출시 될때 Firmware를 탑재하여 판매가 되는데 최신 업데이트가 문제가 됨.
3) 일반 사용자에게 Firmware 다운로드 도구를 이용하여 업데이트를 하도록 가이드를 줄 수도 있지만 현실적으로 어려운 과제임.
4) IAP를 사용하므로써 원격으로 또는 자동으로 Firmware 업데이트가 될 수 있도록 할 수 있음
2. STM example code
- STMicroelectronics의 공식 Github의 Example 코드를 참고함
- 현재 사용하는 보드와 STM3210C_EVAL 보드가 가장 유사하여 참고하였음
출처: github.com/STMicroelectronics/STM32CubeF1/tree/master/Projects/STM3210C_EVAL/Applications
3. 메모리 구조
- BootLoader와 Application 메모리 영역을 나눌 때에는 Sector 단위로 나눠야 함.
- 메뉴얼의 Page 단위로 나눠야 하기 때문에 Base Address를 잘 알고 있어야함
- STM32F105의 메모리 구조는 다음과 같음
- STM32CubeProgrammer를 이용하여 확인해본 결과
4. Application 버전을 알기 위한 방법
- Bootloader에서는 Application에서 운영되고 있는 Firmware 버젼이 무엇인지 알수가 없음
- 특정 메모리에 Firmware 버젼을 입력함
- Bootloader는 특정 메모리의 Firmware 버젼을 읽고 업데이트 여부를 판단함
출처: www.slideshare.net/chcbaram/06-109389683
5. 펌웨어 업데이트 시퀀스
1) 운영도중 서버로 부터 새로운 Firmware 버젼이 있음을 확인함
2) System Software Reset을 함
3) 재부팅 하면서 Bootloader가 동작됨
4) Bootloader는 특정메모리의 값을 확인하여 Firmware 버젼과 이름을 확인함
5) Firmware 버젼과 이름을 전송함
6) 서버는 업데이트 해야한다고 판단되면 업데이터 동작 하도록 명령을 내림
7) Bootloader는 Application 영역을 삭제함. 삭제하면 모든 값이 0xffff 으로 변경됨
8) 정의된 프로토콜로 서버로부터 Firmware 데이터를 받음
9) 수신한 Firmware 데이터를 Application 영역에 씀
10) 모든 데이터가 수신이 완료되면 재부팅함
11) 다시 Application 영역의 Firmware 버젼과 이름을 확인 후 서버로 전송함
12) 서버는 최신 버젼으로 업데이트 됨을 확인 후 Application 영역으로 Jump 하도록 스킵
※ 만약에 업데이트 과정에서 문제가 있었을 경우 사용자가 "외부버튼"을 이용하여 Bootloader가
강제로 Firmware 업데이트 할 수 있도록 해야함.
- 강의에서 제공해준 PPT 자료
출처: www.slideshare.net/chcbaram/06-109389683
Referece:
github.com/STMicroelectronics/STM32CubeF1
kjt9109.tistory.com/entry/STM32-IAP-Ymodem-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-Bootloader-1
www.slideshare.net/chcbaram/06-109389683
'전기차충전기' 카테고리의 다른 글
[STM32] Flash Protection 해제 (0) | 2021.04.06 |
---|---|
[펌웨어] 디바이스 드라이버 - Todo (0) | 2021.04.05 |
[어플리케이션] Electron 강의 (0) | 2021.04.04 |
[충전기 프로토콜] OCPP 1.6 - Todo (0) | 2021.03.30 |
[펌웨어] 중급 (0) | 2021.03.29 |