본문 바로가기

[STM32F746G-DISCO] USB DFU 사용하기 (Device Mode)

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


STM32F746G-DISCO 보드에서 USB Device모드를 사용하여 Device Firmware Update Class를 테스트해 보았습니다. (STM32Cube_FW_F7_V1.16.1에서 제공되는 DFU_Standalone 예제를 참고하였습니다.)

 

DFU는 어플리케이션 업데이트를 매번 ST-Link를 사용하지 않고도 간단히 PC와 USB 연결로 바이너리를 업데이트를 할 수 있게 해주는 역할을 합니다.

예제를 살펴보니 DFU를 사용하여 아래와 같이 동작이 되고 있습니다.
1. DFU_Standalone 예제(Bootloader)를 Flash Sector 0 영역에 설치합니다.
2. User 버튼을 누른 상태에서 PC와 보드를 USB로 연결하여 DFU 모드로 전환합니다.
3. PC의 DfuSeDemo.exe를 실행하여 최신 버전으로 수정된 애플리케이션을 업데이트합니다.
(여기서는 예제에서 제공되는 STM32746G_DISCOVERY_SysTick_0x08008000.dfu를 사용하였습니다.)
4. 보드를 재부팅하여 일반 부팅 모드로 전환 후 소프트웨어 업데이트가 정상적으로 동작되는지 확인합니다.

아래 표는 STM32F746NG에 내장되어 있는 Flash Memory 블록을 나타내는데 예제 기준으로 아래와 같이 Sector 0는 bootloader가 Sector 1에 어플리케이션이 설치됩니다.

새 프로젝트를 작성하여 DFU를 테스트 해 봅니다.
핀 초기화 후 RCC/USB_DEVICE/USB_OTG_FS만 설정하였습니다.

USB_DEVICE의 설정은 아래와 같이 하였습니다. (아래 붉은색 사각형 부분의 변경이 필요합니다.)

USBD_DFU_MEDIA_Interface의 설정은 아래 ST에서 제공되는 trainning 문서를 참고하시기 바랍니다.

예제로 제공되는 usbd_dfu_flash.c와 main.c를 참고하여 새 프로젝트의 usbd_dfu_if.c와 main.c를 작성합니다.
실제 DFU를 사용하기 위해서는 PC용 프로그램이 필요한데 아래 사이트에서 다운로드하면 됩니다.

 

STSW-STM32080 - STMicroelectronics

STSW-STM32080 - DfuSe USB device firmware upgrade (UM0412) (replaced by STM32CubeProgrammer), STSW-STM32080, STMicroelectronics

www.st.com

 

다운로드 받은 파일을 압축을 해제하면 아래와 같은데 사용할 프로그램은 DfuFileMgr.exe와 DfuSeDemo.exe입니다.

PC의 USB 케이블을 보드의 CN13(USB_FS)에 꽂은 후 보드의 USER 버튼을 누른 상태에서 리셋 버튼을 누릅니다.
그러면 윈도우에서 아래 그림과 같이 DFU로 인식이 됩니다.
만약 드라이버 설치가 필요하다면 위 그림의 Driver 폴더를 사용하여 설치하시면 됩니다.

DFU에서 사용될 바이너리로 포맷 변경을 위해 DfuFileMgr.exe를 실행합니다.
'I want to GENERATE a DFU file from S19, Hex or BIN files'에 체크 후 OK 버튼을 클릭합니다.

가운데의 'S19 or Hex' 버튼을 눌러 변경될 펌웨어를 선택 후 'Generate' 버튼을 눌러 dfu 파일로 변환합니다.

펌웨어를 dfu 파일로 변환 후 DfuSeDemo.exe를 실행합니다.


테스트는 ST에서 제공된 테스트용 dfu파일을 사용하였습니다. (...\DFU_Standalone\Binary\STM32746G_DISCOVERY_SysTick_0x08008000.dfu)

usb 케이블을 꽂으면 좌측 상단에 사용 가능한 DFU 디바이스가 표시되고 가운데 아래의 Choose버튼을 선택하여 STM32746G_DISCOVERY_SysTick_0x08008000.dfu 파일을 선택 후 'Verify after download'를 체크합니다.

파일 불러오기가 완료되었으면 'Upgrade' 버튼을 눌러 새로운 바이너리로 업데이트를 합니다.
불러온 파일이 업데이트하기 위한 파일이 맞는지를 묻는 메시지 창이 나오는데 '예'를 눌러 진행합니다.

바이너리가 업데이트가 되고 다운로드된 바이너리와 검증을 하여 이상 없음을 표시합니다.

"Leave DFU mode" 버튼을 눌러 DFU모드를 해제합니다.

STM32F746G-DISCO 보드가 DFU가 아닌 일반 부팅 모드로 재부팅이 되고, 정상적으로 애플리케이션이 업데이트되어 보드 뒷면의 LED가 깜박거립니다.

 

반응형

댓글