Title Image

Blog Logo

🌱 Bootloader 8. Thử thách với một ứng dụng FOTA!!!

🌱 Bootloader 8. Thử thách với một ứng dụng FOTA!!!

    Cách học tập tốt nhất là thực hành và tận hưởng nó đúng chứ? Mình đăng khá nhiều bài lý thuyết là mong muốn các bạn có thể đọc và áp dụng nó. Việc thực hành, tất nhiên là của các bạn, thành quả đạt được cũng vậy. Series Bootloader cũng đã có 7 bài rồi, lý thuyết cơ bản mình cũng đã sharing hết rồi, vậy thì hãy bắt tay vào thực hành đi thôi !!!

    👉 Ở đây mình đưa ra một ví dụ về ứng dụng FOTA của Bootloader, tức là Firmware Over-The-Air, nạp Firmware từ xa, ở đây có thể thông qua các chuẩn không dây như Wifi, Bluetooth, Zigbee, ... (chứ không phải nạp qua không khí 😊).

    Để tránh bị ngợp, bạn nào chưa đọc thì có thể đọc qua 7 bài lý thuyết về Bootloader trước đó của mình:

    👉 Đề bài

    Thiết kế ứng dụng FOTA theo sơ đồ bên dưới đây:

Bootloader

    💚 Phần Hardware bao gồm

  • Một Vi điều khiển STM32 (Của mình là STM32F401)
  • Một/hoặc hai module thu phát tín hiệu không dây (Bluetooth/Wifi/RF/IR/Zigbee/...), nói chung là dùng sóng gì cũng được, ở đây mình dùng module Bluetooth HC-05 vì có sẵn.
  • PC kết nối với module còn lại qua CP2102 (Chuyển đổi USB to UART), hoặc Smartphone.

    💚 Phần Firmware sẽ bao gồm

  • Một phần chương trình Firmware cho Bootloader sẽ được nạp tại địa chỉ 0x0800.0000.
  • Một chương trình App 1, nội dung là nháy user led với tần số 1Hz, sẽ được nạp sẵn tại địa chỉ 0x0804.0000. 
  • Một chương trình App 2, nội dung là nháy user led với tần số 10Hz, sẽ build ra file Hex và đặt tại PC/Smartphone để chuẩn bị cho quá trình Update chương trình.   

    💚 Phần Application/Software bao gồm

  • Một chương trình viết trên PC/Smartphone để xử lý file Hex và gửi nó đi qua các chuẩn truyền thông không dây nói trên.

    💚 Với luồng chương trình

  • Ban đầu chương trình Vi điều khiển sẽ là nháy LED với tần số 1Hz (App 1). Sau đó chúng ta mong muốn thực hiện update chương trình mới (App 2) qua chuẩn truyền thông không dây (Bluetooth). 
  • App PC sẽ sử lý file hex để chỉ truyền Data trong file hex qua module HC-05. 
  • Dữ liệu này sẽ được truyền qua Bluetooth đến module HC-05 được kết nối với Vi điều khiển STM32. 
  • Dữ liệu từ HC-05 nhận này sẽ truyền qua USART (Ở đây nên cài đặt ngắt USART để tránh mất dữ liệu).
  • Khi nhận được dữ liệu từ ngắt USART, Vi điều khiển STM32 sẽ ghi dữ liệu này lần lượt từ địa chỉ FLASH đã đặt trước là 0x0808.0000. 
  • Note: Trong chương trình App 2 này chúng ta cũng có thể sử dụng chức năng ngắt USART để có thể thực hiện Update Firmware cho những lần sau.  

    👉 Đề xuất các bước thực hiện

  1. Đầu tiên, các bạn cần chắc chắn rằng 2 chương trình Blink LED của mình có thể hoạt động tốt.
  2. Tiếp tục là các hàm ghi/xóa bộ nhớ FLASH.
  3. Đảm bảo USART và chương trình ngắt của nó hoạt động, có thể kiểm tra bằng PC và phần mềm Hercules, cùng với đó là con CP2102 (USB to UART).
  4. Test module Bluetooth HC-05, và đảm bảo nó truyền dữ liệu chính xác (Mình có một Ví dụ ở đây).
  5. Viết App xử lý file Hex để truyền đi.
  6. Viết chương trình Bootloader và Hàm Bootloader.
    ➤ Note: Lời khuyên của mình là nên viết chương trình nạp Bootloader không dây trước, sau đó mới thử nghiệm với chương trình FOTA nói trên. Bằng cách không sử dụng module HC-05 nữa mà chỉ dùng PC kết nối với STM32 thông qua CP2102 để thực hiện nạp trực tiếp qua ngắt USART. Sau khi chương trình chạy ổn định đảm bảm các Firmware hoạt động chính xác rồi thì mới thêm HC-05 or ESP vào.

>>>= Follow ngay =<<<

Để nhận được những bài học miễn phí mới nhất nhé 😊

Chúc các bạn học tập tốt 😊

                                        

Đăng nhận xét

4 Nhận xét

  1. bài anh quá hay, hãy ra thêm Bootloader 9 đi ạ

    Trả lờiXóa
    Trả lời
    1. Nguyễn Chí Nguyênlúc 18:09 23 tháng 9, 2023

      anh admin, em có suy nghĩ như này
      -cách 1: sử dụng stm32 kết hợp module sim hoặc bluetooth để firmware over the air thì chỉ cần dùng giao thức ftp thôi là được,
      -cách 2: sử dụng stm32 và esp8266 thì phải sử dụng giao thức ftp xong lưu tạm trong bộ nhớ của esp8266 rồi uart nạp qua stm32
      thì cách 1 tối ưu hơn phải không anh

      Xóa
    2. Mỗi cách có ưu nhược điểm riêng thôi em ạ, Nếu dùng esp thì mình có thể verify bin ở bên ESP luôn, hoặc truyền qua STM, nếu dùng SIM or BLE thì thực tế mình cũng cần truyền qua UART về STM. Chưa kể các ưu nhược điểm của các loại sóng cũng khác nhau nữa

      Xóa