본문 바로가기

[STM32F746G-DISCO] IAP 사용하기

by rudals.kim 2024. 3. 16. 댓글 개
반응형
아래 테스트는 STM32CubeIDE 1.6.1/STM32Cube_FW_F7_V1.16.1를 사용하여 테스트 되었습니다.


STM32Cube_FW_F7_V1.16.1의 예제를 살펴보던 중 STM32756G_EVAL의 프로젝트 중 IAP 관련 내용을 보게 되었고 STM32F746G-DISCO보드에서도 가능한 내용이라 판단되어 테스트해 보았습니다.
(참고로 STM32756G나 STM32F746G나 crypt/hash를 제외하고는 스펙이 동일합니다.)

DFU(Device Firmware Update)나 IAP(In-Application Programming)나 사용하는 목적은 동일합니다.


제품 생산 후 버그를 수정한 패치나 최신 버전의 소프트웨어로 제품을 업데이트하는 것이 목적인데 단지 DFU의 경우에는 USB의 device 모드를 사용하여 업데이트를 하고 IAP의 경우에는 USART의 YMODEM Protocol 통신을 사용하여 업데이트하는 것이 다른 듯 보입니다.

아래 그림과 같이 일반적인 부트로더를 사용한 펌웨어 업데이트와 마찬가지로 FLASH의 시작 영역에 Bootloader를 올리고 특정 영역에 애플리케이션을 올려놓은 후 특정 조건을 만족 시 부트로더 영역을 부팅함으로써 바이너리 업데이트를 할 수 있게 하고 조건을 만족하지 않을 경우에는 애플리케이션으로 부팅하여 동작되는 구조임을 알 수 있습니다.
(자세한 내용은 ST에서 제공되는 AN4657 문서를 참고하시면 됩니다)


예제에서는 특정 조건으로 키 버튼을 체크하여 IAP 또는 User Application을 실행시킵니다.

IAP의 경우 USART의 YMODEM Protocol을 사용하여 바이너리를 다운로드 받아 Flash에 write 합니다.

아래 그림은 IAP 동작 흐름도입니다. 위에서 설명한 절차대로 동작됩니다.


IAP를 테스트하기 위해 새 프로젝트를 생성합니다.

프로젝트는 STM32Cube_FW_F7_V1.16.1/Projects/STM32756G_EVAL/Applications/IAP를 참고하여 STM32F746G-DISCO용으로 Bootloader와 Application 2개의 프로젝트를 작성하였습니다. 예제를 참고하면 별 어려움 없이 프로젝트를 작성할 수 있어서 여기서는 제 생각에 중요하다고 생각되어지는 아래 2개 파일의 다른 부분만을 살펴보도록 하겠습니다.

첫 번째는 STM32F756NGHx_FLASH.ld 파일로 LinkScriptor 파일인데 위 그림 1의 flash 구조와 맞추는 작업을 해 줘야 합니다. 아래 그림 왼쪽(Bootloader)과 오른쪽(Application)을 비교해 놓았습니다. FLASH의 origin 주소가 다릅니다.


두 번째는 system_stm32f7xx.c인데 vector table의 offset을 위 구조에 맞춰 변경해 줍니다.


프로젝트를 작성 후 실행해 보면 아래와 같은 화면이 나옵니다.


1번 'Download image to the internal Flash'를 선택하면 아래와 같이 STM32F746G-DISCO보드가 수신대기 중임을 알려 주는 'C' 문자가 계속 나옵니다.


이때 File->Transfer->YMODEM->Send를 선택하여 다운로드할 애플리케이션을 선택해 주면 파일 전송이 시작됩니다.


테스트해 보면서 이상한 점은 Tera Term의 YMODEM으로 파일 전송을 하면 비정상적으로 통신이 종료되는 듯 보입니다. 아래 화면이 잠깐 나왔다가 창이 자동으로 닫히며 바이너리 업데이트가 안됩니다.


그래서 YMODEM을 지원하는 PUTTY 프로그램인 ExtraPuTTY로 다시 테스트를 해 보았습니다.

ExtraPuTTY는 아래 사이트에서 다운로드 받을 수 있습니다.

 

 

Home - Extraputty

Choose the right stack to scale your business Many business owners get carried away by the initial profits of their business and forget the importance of financial accounting. They fail to understand that accounting is designed to help the leadership of a

extraputty.com


ExtraPuTTY의 YMODEM을 사용하여 전송하니 정상적으로 바이너리가 전송되어졌습니다.

전송 완료 후 3번인 'Execute the loaded application'을 선택하여 Application을 부팅해 보았습니다.

'Start program execution......' 로그가 나오며 정상적으로 업데이트된 Application이 동작되어졌습니다.

아래는 업데이트 실행 과정을 캡처한 화면입니다. 전송/부팅이 모두 정상적으로 동작됩니다.


업데이트 완료 후 Application영역이 정상적으로 실행되는 동작 영상입니다.


ST-LINK를 사용하여 Application 번지인 0x08008000h 번지를 확인해 보았습니다.

아래 그림처럼 전송된 파일과 비교해 보시면 동일한 내용으로 제대로 업데이트된 것을 확인해 볼 수 있습니다.

반응형

댓글