download_bootloader - withrobot/myCortex-STM32F4 GitHub Wiki

myCortex-STM32F4 보드에 사용된 STM32F4 MCU에는 내장 ROM 영역에 부트로더가 내장되어 있습니다. 이 부트로더는 UART, I2C, SPI, CAN 등을 통해 사용자 펌웨어 이미지를 Flash 메모리 영역에 다운로딩 할 수 있도록 해 줍니다. 여러가지 인터페이스를 사용할 수 있지만 UART를 제외한 나머지는 별도의 장치나 회로, 다우로딩 프로그램이 필요한 관계를 간단하게 사용할 수는 없습니다. 본 예제에서는 UART를 통한 시리얼 부트로더 사용법을 설명해드립니다. 모든 예제는 시리얼 부트로더를 통해서 다운로딩 할 수 있으므로 JTAG 장치가 없더라도 개발이 가능합니다.

하드웨어

STM32F4 내장 시리얼 부트로더를 사용하려면 BOOT0, BOOT1 핀에 적절한 값을 인가한 상태에서 리셋해야 합니다. myCortex-STM32F4 보드에서는 부트 스위치(SW1)와 리셋 스위치(SW2)를 탑재하여 시리얼 부트로더를 간단하게 사용할 수 있도록 하였습니다.

시리얼 부트로더를 기동하기 위해서는 SW1을 누른 상태에서 SW2를 눌렀다가 때면 됩니다. 이후에는 SW1을 때면 됩니다. 이렇게 하면 MCU는 부트로더 상태로 동작하며 UART를 통해 펌웨어 이미지가 다운로드 되기를 기다립니다.

PC와 myCortex-STM32F4 보드를 UART로 연결하기 위해서는 myUSB2UART와 같은 장치가 필요합니다. myUSB2UART는 PC의 USB 포트를 사용하여 TTL 레벨의 UART 인터페이스를 제공하는 장치입니다. myUSB2UART의 4핀 커넥터를 myCortex-STM32F4의 4핀 UART 커넥터(J4)에 연결하면 됩니다.

UART 연결

참고로 myUSB2UART를 사용하면 UART 연결과 전원 공급을 한번에 할 수 있어 손쉽게 테스트 하실 수 있습니다.

소프트웨어

PC에는 펌웨어 이미지를 다운로드하는 프로그램이 있어야 합니다. UART 부트로더 프로토콜이 공개되어 있어 원하는 형태대로 제작할 수도 있으며, ST에서 제공하는 데모 프로그램을 그대로 사용해도 됩니다. 본 문서에서는 ST에서 제공하는 ST Flash Loader Demonstration 프로그램을 사용하는 방법을 설명하겠습니다.

ST 웹페이지에서 ST Flash Loader Demonstration 프로그램을 다운로드 받거나 다운로드페이지에서 받으실 수도 있습니다.

다운로딩

Flash Loader Demonstrator 프로그램을 시작하면 아래와 같은 화면을 보실 수 있습니다.

1

이 화면에서 myUSB2UART의 가상 직렬 포트 번호를 선택합니다. 가상 직렬 포트의 번호는 장치관리자에서 확인할 수 있습니다. 포트 항목에 Silicon Labs CP210x USB to UART Bridge의 COM 포트 번호를 선택하면 됩니다.

장치관리자

하드웨어항목에서 설명한 바와 같이 SW1과 SW2를 이용해 부트로더 모드로 리셋한 상태에서 Loader 프로그램의 Next 버튼을 클릭합니다.

myCortex-STM32F4 보드가 부트로더 모드가 아니라면 다음 화면으로 바로 넘어가지 않고 잠시후 에러 메시지가 출력됩니다. 이런 경우에는 처음부터 다시 하면 됩니다.

loader2

또다시 Next를 클릭합니다.

loader3

위 화면과 같이 Select target이라 나올 때 STM32F4_512K를 선택합니다. 그러면 아래와 같이 화면이 전환됩니다.

loader4

또다시 Next를 클릭하면 아래와 같은 화면이 나타납니다.

loader5

다운로드 할 펌웨어 바이너리 이미지를 선택하고 다운로드가 실행되는 화면입니다. Download to device 항목에서 바이너리 이미지 파일을 선택합니다. 바이너리 이미지 파일은 프로젝트를 EWARM에서 빌드하면 각 예제의 Debug/Exe 폴더에 EWARM.hex 파일로 만들어집니다. 이 파일을 선택합니다. 나머지 옵션들은 위 화면과 같이 선택한 후 Next를 클릭하면 플래쉬 메모리 프로그래밍이 진행되고, 완료된 후에는 자동으로 리셋되어 실행됩니다.

loader6