STM32 – USB HID Bootloader – Phần 1

Trong quá trình phát triển ứng dụng thì yêu cầu update firmware cho sản phẩm là thực sự cần thiết. Không có ứng dụng nào có thể “hoàn thiện” ngay được cả. Việc cập nhật firmware có thể được dùng để khắc phục lỗi khi lỗi được phát hiện; dùng để nâng cấp, thêm tính năng cho sản phẩm… Nói chung mình thấy đây là một yêu cầu cần thiết. Mình thấy hiện nay những dòng vi điều khiển STM32 của hãng ST có USB thông dụng như STM32F103, STM32F042, STM32F072… thì có con đã được trang bị sẵn USB Bootloader khi xuất xưởng như dòng F0 còn dòng F1 thì cũng được trang bị Bootloader nhưng không phải USB Bootloader. Với dòng F0 như đề cập ở trên tuy được trang bị USB Bootloader nhưng không phải theo chuẩn HID, yêu cầu cần cài đặt Driver thì mới có thể dùng được và cần yêu cầu chuyển đổi file HEX qua định dạng DFU… Nói chung là sẽ gây khó khăn với một số không ít người dùng.

Vì vậy để tiện dụng nhất mình nghĩ nên tự viết Bootloader, sử dụng USB HID để có thể cắm là chạy và không cần cài đặt Driver.

Nói qua về Bootloader thì đơn giản đây là một chương trình chạy trên chip. Nó có nhiệm vụ giao tiếp với máy tính để lấy về firmware mới cần cập nhật, sau đó ghi firmware mới này vào flash của STM32 và thực thi firmware mới.

Project sẽ chia làm 3 phần:
* Phần 1: Chương trình Bootloader, đây là chương trình sẽ được chạy mỗi khi chip được cấp nguồn. Có nhiệm vụ kiểm tra xem người dùng có muốn vào chế độ cập nhật Firmware hay muốn chạy chương trình ứng dụng. Nếu người dùng muốn chạy chương trình ứng dụng thì nó sẽ chạy chương trình ứng dụng ngược lại nếu người dùng muốn cập nhật Firmware thì nó sẽ vào chế độ USB HID và chờ để nhận Firmware mới từ máy tính qua USB. Chương trình này cần được nạp vào chip 1 lần (có thể sử dụng mạch nạp như ST Link, Jlink…).
* Phần 2: Chương trình trên máy tính, đây là chương trình giao tiếp giữa máy tính với Bootloader. Gửi lệnh xóa, ghi…, gửi Firmware mới xuống mạch STM32.
* Phần 3: Chương trình ứng dụng mẫu. Do Bootloader đã chiếm một phần bộ nhớ Flash của STM32 nên cần điều chỉnh lại một số thông số như vector ngắt, bộ nhớ Flash… thì chương trình mới thực thi được bình thường. Chương trình này sẽ được cập nhật vào STM32 (STM32 đã nạp Bootloader) thông qua phần mềm ở phần 2, vì vậy có thể update chương trình cho STM32 mà không cần mạch nạp, có thể cập nhật cho những sản phẩm đã bán cho khách hàng.

Mình sẽ viết chi tiết về từng phần ở các bài viết tiếp theo, sợ viết một bài dài quá và mọi người ngại đọc 🙂