Cập nhật chương trình từ xa trên vi điều khiển STM32 – Firmware Over The Air (FOTA) – P1

Có bao giờ bạn thắc mắc làm thế nào mà có thể tự động cập nhật chương trình cho một thiết bị nhúng, thiết bị IoT mà không cần tốn công cắm dây để nạp chương trình như thông thường chưa? Bài viết này trong chuỗi hướng dẫn cập nhật chương trình từ xa trên vi điều khiển STM32 sẽ giới thiệu tổng quan về tính năng Firmware Over The Air (hay còn gọi là FOTA), đồng thời sẽ hướng dẫn cách tổ chức lưu trữ chương trình trên vi điều khiển STM32F103RCT6 lõi ARM Cortex M3 để có thể áp dụng FOTA. Nếu bạn sử dụng một vi điều khiển lõi ARM khác thì cũng có thể tham khảo được chuỗi bài viết này để áp dụng FOTA. 

[HỌC ONLINE: LẬP TRÌNH VI ĐIỀU KHIỂN STM32, VI XỬ LÝ ARM CORTEX – M]

  1. Giới thiệu về FOTA

Firmware Over The Air (FOTA) là một tính năng đặc biệt cho phép nhà sản xuất có thể cập nhật các chương trình từ xa cho các thiết bị nhúng, IoTs thông qua mạng (có thể là wifi, ethernet hoặc cũng có thể là trong các network LoRa, Bluetooth, Sub 1Ghz…). Họ có thể nâng cấp, sửa chữa chương trình các thiết bị mà không cần phải nối dây trực tiếp từ thiết bị với máy tính để nạp chương trình. Nhờ đó có thể tiết kiệm được nhiều thời gian, công sức và tiền bạc. Có thể nói, FOTA là một tính năng rất cần thiết phải có với các nhà sản xuất thiết bị nhúng, thiết bị IoT hiện nay.

Những ứng dụng của Firmware Over the Air

Khi đã tung một sản phẩm thiết bị ra thị trường, quá trình thực hiện nâng cấp phần mềm cho các thiết bị được mô tả một cách khái quát cụ thể sẽ có 4 bước sau đây:

  • Bước 1: Sau khi cung cấp, lắp đặt thiết bị cho khách hàng thì công ty sản xuất phải thu thập những ý kiến đóng về thiếu sót, lỗi thường gặp khi triển khai ra thực tế. Sau đó đội ngũ kỹ sư lập trình sẽ sửa chữa và tạo một Firmware mới cho thiết bị để khắc phục những lỗi trên.
  • Bước 2: Phát triển và tạo ra tệp tin chương trình mới. Đưa tệp tin này lên Server và đặt tên cho nó bằng một Version mới. Ví dụ như trên server đã có một Firmware với Version là 1.0 thì Firmware mới chúng ta phải đặt một Version mới hơn 2.0 để thiết bị phân biệt.
  • Bước 3: Người dùng có thể tự tay điều khiển thiết bị đi vào quá trình FOTA (hoặc thiết bị có khả năng tự đi vào quá trình này tùy thuộc vào người lập trình). Sau khi đã kiểm tra version của Firmware mới và thiết bị sẽ cho tải tệp tin chứ Firmware về.
  • Bước 4: Khi quá trình tải Firmware đã hoàn tất thì thiết bị sẽ tự động kiểm tra và nạp chương trình vào bộ nhớ. Sau đó khởi chạy chương trình mới. Kết thúc quá trình cập nhật!

Quy trình thực hiện nâng cấp chương trình của một thiết bị

  1. Những điều kiện để sử dụng FOTA

Để ứng dụng FOTA thì thiết bị cần phải có:

  • Vi điều khiển: Vi điều khiển cần phải có bộ nhớ chương trình đủ lớn vì nó cần phải lưu tối thiểu 3-4 chương trình (Mình sẽ trình bày cụ thể ở mục 3).
  • Module có thể kết nối Internet: Module này có thể là module Wifi, Ethernet hoặc 3G,4G,…. Module này sẽ được kết nối trực tiếp với vi điều khiển.
  • File cập nhật chương trình: Các file này sẽ được nhà sản xuất tạo ra khi họ có chương trình mới và sẽ được lưu trên Server.
  • Server: Đây là nơi lưu trữ các chương trình, các thiết bị có thể truy cập tới Server này để download chương trình về.

Ở trong bài hướng dẫn này mình sẽ sử dụng:

  • Vi điều khiển: STM32F103RCT6 với bộ nhớ chương trình lên đến 256kB

  • Module có thể kết nối Internet: Module SIM800C

  • File chương trình:

File chương trình sẽ được lưu dưới dạng hexadecimal (đuôi file .hex). (Cấu trúc của fille này mình sẽ giải thích ở phần sau)

  • Server: Thiết bị của mình sẽ truy cập Server FTP để có thể download file chương trình.
  1. Phân chia bộ nhớ chương trinh trong vi điều khiển

Để sử dụng tính năng FOTA, bộ nhớ chương trình trong STM32F103RCT6 sẽ chia làm 4 chương trình chính là: Bootloader Firmware, FOTA FirmwareFactory Firmware và Current Firmware. Mỗi chương trình sẽ được lưu vị trí khác nhau trong bộ nhớ Flash.

Trong đó:

  • Factory Firmware là chương trình chính phiên bản đầu tiên mà nhà sản xuất cung cấp được xây dựng để phục vụ cho các ứng dụng của thiết bị.
  • Current Firmware là chương trình chính của thiết bị sau khi đã đưa thiết bị vào sử dụng, chương trình sẽ được sử dụng sau quá trình FOTA.
  • FOTA Firmware là chương trình thực hiện việc cập nhật chương trình (thay đổi Current Firmware) cho cho thiết bị.
  • Bootloader Firmware là chương trình được chạy đầu tiên sau khi MCU bắt đầu làm việc hoặc reset. Nhiệm vụ của nó là lựa chọn 1 trong 3 chương trình ở trên để thiết bị hoạt động.

Lưu ý: Chương trình Bootloader Firmware, Factory FirmwareFOTA Firmware phải được nạp thủ công trước cho thiết bị.

Dưới đây là một cách phân chia bộ nhớ cho các chương trình trên thiết bị của mình sử dụng MCU STM32F103RCT6 có tính năng FOTA (Có thể thay đổi vị trí lưu tùy thuộc vào project của các bạn)

Tên chương trình

Địa chỉ bắt đầu – kết thúc

Kích thước

Bootloader Firmware

0x08000000 –  0x08001FFF

8 kByte

Factory Firmware

0x08002000 – 0x0800E7FF

50 kByte

FOTA Firmware

0x0800E800 – 0x080137FF

20 kByte

Current Firmware

0x08013800 – 0x0801FFFF

50 kByte

Tham khảo bài viết “Các thao tác đọc, ghi và xóa bộ nhớ Flash trên MCU STM32F103C8T6” để hiểu và sử dụng bộ nhớ FLASH của vi điều khiển STM32F103 tại https://tapit.vn/cac-thao-tac-doc-ghi-va-xoa-bo-nho-flash-tren-mcu-stm32f103c8t6/.

  1. Cách đổi địa chỉ thủ công khi nạp chương trình bằng KeilC IDE

Cách thay đổi địa chỉ bắt đầu chương trình khi nạp thủ công vào bộ nhớ chương trình của vi điều khiển STM32F103 bằng KeilC IDE như hình dưới:

Tại ô Start ở IROM1 sẽ là địa chỉ bắt đầu mà bạn muốn lưu chương trình trong bộ nhớ chương trình STM32.

Size là kích thước lớn nhất của chương trình của bạn.

Sau khi chỉnh sửa xong, bạn nhấn OK để lưu vào bấm vào Download thì chương trình của bạn đã được nạp vào vi điều khiển tại địa chỉ tương ứng.

=================================================

Như vậy, mình đã giới thiệu tổng quan về FOTA và các chương trình cần thiết để thực hiện tính năng FOTA. Trong phần tiếp theo, mình sẽ trình bày cách hoạt động của các chương trình đó, Đồng thời sẽ hướng dẫn tạo và giải thích cấu tạo của một file chương trình. Cùng theo dõi và đón xem nhé!

Chúc các bạn thành công!

Xem tiếp phần 2: Chương trình Bootloader và các chương trình ứng dụng khi sử dụng tính năng FOTA

Theo dõi thêm:
– Cơ bản về cấu trúc và tính năng Vi xử lý ARM Cortex – Mx. 
– Phân biệt các khái niệm Processor Core, Processor và Microcontroller trong Hệ thống nhúng
– Tổng hợp các bài hướng dẫn Lập trình vi điều khiển STM32F1
– Tổng hợp hướng dẫn Lập trình vi điều khiển STM32F4

Nhóm TAPIT ARM R&D