DFU là gì ? Khi nào sẽ sử dụng nó ? Và làm thế nào để tạo ra nó ?

Giới thiệu

Nếu các bạn có thời gian xem thư viện Std (SPL) của STM32 thì sẽ thấy trong sample sẽ có mấy file .dfu, đây là các file phục vụ cho mục đích nạp vào MCU mà không cần dùng ST-link. Nghĩa là sao nhỉ ? ST họ sẽ tạo ra các USB bootloader có sẵn hỗ trợ việc cập nhật firmware cho thiết bị thông qua cổng USB, DFU ở đây có nghĩa là Device Firmware Upgrade

Ví dụ như với kit F4 discovery chẳng hạn, ta có thể dùng cổng USB của kit để nạp thẳng chương trình vào chip luôn

Vậy có những dòng chip nào của STM32 hỗ trợ DFU ? Bạn có thể xem ở danh sách dưới đây.

Ưu điểm của USB DFU Bootloader là gì ?

  • Không cần dùng các công cụ để nạp chương trình như JTAG, ST-link hoặc cáp chuyển đổi USB-UART
  • Có thể nạp chương trình cho một chip STM32 trắng (chip mới mua) thông qua cổng USB
  • Có thể cập nhật firmware cho STM32 trong quá trình phát triển hoặc trước khi sản xuất hàng loạt.

Chuẩn bị

Giờ mình vào vấn đề chính, làm thế nào để thực hiện nạp firmware qua cổng USB

Cài đặt

Bạn cài đặt chương trình như mọi chương trình bình thường khác. Sau khi cài đặt xong DfuSE nằm ở thư mục có đường dẫn C:\Program Files (x86)\STMicroelectronics\Software\DfuSe v3.0.5\Bin

Tạo file .dfu

Nếu với project thông thường thì file sinh ra sau khi bạn build project sẽ là file .hex hoặc .bin, mình lấy sẵn file .hex blink LED trên F4 để chuyển sang .dfu với công cụ DfuFileMgr.exe theo các bước

Bước 1: mở DfuFileMgr.exe

Bước 2: Chọn OK, chọn S19 or hex và trỏ tới file .hex, sau đó chọn generate

Nạp file .dfu

Bước 1: Rút jump ở mặt dưới của kit F4 cắm nối chân Boot0 và VDD, cắm cáp như hình

Bước 2: cắm cáp vào máy tính kiểm tra Device Manager

Bước 3: Mở file DfuSeDemo.exe trong thư mục DfuSe ở trên

Nếu các bước trên đúng thì sẽ hiện DFU mode như 1, sau đó chọn 2 trỏ tới file dfu đã tạo, cuối cùng là chọn 3 Upgrade.

Bước 4: Rút jump cắm Boot0 và VDD ra, sau đó ấn nút reset, bạn sẽ thấy LED blink như hình

Trước khi dừng lại mình xem qua cái DFU của Iphone chút nhỉ 😀

3 bước trên là cách đưa iphone về chế độ DFU, chiếu về STM32 thì nó giống như cách chúng ta cắm jump chân Boot0 vào VDD. Khi thiết bị đã về DFU rồi thì chỉ cần cắm USB và nạp firmware vào thôi, khác là ở đây Iphone dùng Apple Itunes còn STM32 dùng DfuSeDemo, STM32 cho bạn sẵn protocol bạn có thể viết lại software và tool của riêng mình, còn Apple chỉ cho bạn file image và tool để bạn nạp vào thôi, chứ không tùy chỉnh được gì cả.

Tạm kết

Vậy là mình đã thử xong nạp cho STM32F4 không cần dùng St-link, tự dưng thấy nhẹ nhõm hẳn, nếu lỡ như st-link trên kit có hỏng thì vẫn có cái để nạp, nếu bạn muốn dùng cái này để tùy biến riêng cho mình thì có thể tham khảo thư mục DfuSe v3.0.5\Sources, tài liệu AN3156 Application note, UM0412