STM32F4 계열 레퍼런스
부팅 시퀀스
동바리
2022. 3. 13. 14:17
부팅 시퀀스 과정은 쉽게 설명하면 다음의 경우에 이뤄집니다.
- 디바이스에 전원을 인가할때
- 리셋 버튼 누를 때
두 가지 모두 부팅이 이루어지기 때문에 하나의 설명으로도 충분합니다.
우선 우리가 디바이스를 구동시키기 위한 소스코드가 어디에 저장되는지 알아야합니다.

코드는 Flash 영역에 저장됩니다. 0x0800 0000 - 0x080F FFFF 영역인데요, 바이너리가 이 영역을 벗어날 정도로 크면 안되겠죠.
그리고 vector table을 알아야 합니다. vector table은 exception과 interrupt service routine 어드레스를 가지고 있습니다.
cortex-m4의 vector table은 아래와 같습니다.

그림에서 0x0000 0000은 비어있는데 이것은 초기 Stack Pointer 값을 가지고 있기 때문입니다. 그리고 0x0000 0004는 reset handler의 주소를 가지고 있습니다. 만일 리셋 버튼을 누르거나 전원을 공급한다면 아래 절차가 수행됩니다.
- PC(program counter)는 0x0000 0000으로 로드됩니다. 즉 현재 프로세스의 흐름은 0x0000 0000입니다.
- 0x0000 0000이 Stack pointer 값을 가진 후, MSP(main stack pointer)로 fetch됩니다. 그러면 fetch된 값이 스택의 entry 주소입니다.
- 그리고 PC는 Reset handler의 주소를 가지게 됩니다.
이 3단계는 하드웨어에 의해서 행해집니다. 그리고 이것은 하드웨어 아키텍처에 따라 조금씩 상이하다는것을 의미합니다.
위 3단계가 끝나면 reset handler는 아래 절차를 수행합니다.
- 시스템을 초기화
- 초기화된 global variable, static variable(.data)를 SRAM에 copy합니다.
- 초기화되지않은 data(.bss)를 SRAM에 copy하고 0으로 초기화합니다.
- 그리고 소스코드상의 main()을 호출합니다.