USB DFU Bootloader trong STM32
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
- Phần mềm DfuSE USB+file hex,dfu hoặc link dự phòng từ ST
- Kit STM32 bất kỳ, mình dùng kit F4
- Cáp 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