<'땜스 전자연구소' 블로그를 참고하여 내장부트로더 공부를 하였다.>
나는 STM32F429I-DISC1 보드를 통해 내장부트로더를 이용하여 펌웨어를 다운해 보려고 한다.
내장부트로더를 사용하는 목적은 외부 시리얼 통신으로 디버거 없이 펌웨어를 다운로드 하기 위해서이다.
개발하기 위해서 첫째로 부트로더를 활성화 시킬 경우 부트로더 관련 데이터가 있는 메모리를 분석 -> Reference manual을 통해 BOOT MODE 분석 -> STM32 보드를 수정 (하드웨어) -> UART 통신 기반 부트로더 진입 -> visual basic을 이용한 GUI 설계 -> 설계한 GUI를 기반으로 펌웨어 다운로드 순서로 개발할 계획이다.
STM32의 메모리중 HEX파일(펌웨어 데이터가 들어있는 파일)이 쓰이는 곳은 FLASH MEMORY이다.
그 FLASH MEMORY 중에서 HEX 파일이 기록되는 곳은 Bank1이다.
그리고 STM32 내장부트로더 관련 데이터가 들어있는 곳은 system memory다.
메모리에 관한 분석은 했고 BOOD MODE를 분석해보겠다.
내장부트로더에 관한 데이터가 있는 곳은 system memory이므로
그림을 참조하여 BOOT1은 GND에 BOOT0는 VCC에 연결하면 된다.
그 다음으론 회로도를 보고 하드웨어적 수정이 필요할 수도 있는데
회로도를 보면 SB15, 111에는 아무것도 실장되어 있지 않아야 한다고 되어있는데
STM32F429I-DISC1 보드는 0옴 저항이 실장되어 있으므로 저항을 제거해준다.
후에 보드를 USART 통신 기반의 부트로더 진입시킨다.
그것은 USART protocol used in the STM32 bootloader문서를 보면 진입 방법을 알 수 있다.
후에 땜스에서 올려준 HEX파일을 Flash Loader Demonstrator 통해 다운로드 하고 ST-LINK를 통해 내부 FLASH MEMORY를 확인하여 기존 HEX파일이 FLASH MEMORY 데이터와 일치하는지 비교한다.
하지만 Flash Loader Demonstrator는 ST사에서 제공하는 프로그램이고 이 프로그램을 이용하여 펌웨어를 다운로드하면 명령어별 동작처리의 반복이므로 펌웨어 다운로드에 어려움이 있으므로 직접 GUI를 설계하여 펌웨어 다운로드를 할 수 있는 프로그램을 설계하겠다.
다음에는 땜스 전자연구소에서 올려준 visual basic GUI 설계시 필요한 소스코드를 분석해보겠다.
안녕하세요. 좋은글 잘 보았습니다.
다름이 아니라 제가 궁금한게 생겨서 여쭈어 봅니다.
Stm32의 경우 프로그램을 다운할때 아두이노와 다르게 부트로더 핀을 물리적으로 변경 해야한다고 보았습니다.
아두이노처럼 stm32도 간단하게 코드 업로드 할수 있는건가요? 그리고 부트로더와 펌웨어의 차이는 이해했으나 stm32f103c 메인보드로 직접 회로를 만들고 싶은데 구지 부트로더 선택핀을 두고싶지 않는데 프로그램만 계속 업로드하고 리셋이나 전원 끊었다가 다시 연결한 이후에도 계속 작동가능하게끔 하는게 가능 한가요?
Stm32CUBEIDE를 사용 합니다.
아두이노만 하다가 STM32입문 하였는데 아직 초보라 질문이 너무 정신없는거 같아 죄송합니다 ㅠㅠ
감사합니다!