OTA – Update từ xa cho STM32 (hoặc méo từ xa cũng được)

Về cơ bản thì ….

Hiểu đơn giản, để OTA ta sẽ cần viết ít nhất 2 project riêng biệt cho 1 con vi điều khiển, project 1 là viết code để khi khởi động lên nó check xem có firmware mới ko, nếu có thì write vào flash và chạy code mới, ko thì bỏ qua, chạy luôn code, cái này gọi là bootloader. Project 2 là code ứng dụng, cái mà ta muốn chạy trên con vi điều khiển, cái này cứ code như thường, dev chán chê ổn định đi rồi sửa địa chỉ bắt đầu của chương trình là oke.

Hiểu đơn giản, thì con STM32 có địa chỉ bắt đầu của bộ nhớ Flash (cái bộ nhớ mà mình hay nạp code vào, xong nó chạy ấy) là 0x0800000. Khi reset stm32, hoặc khi bật nguồn, mặc định con stm32 sẽ nhảy vào địa chỉ này để chạy đầu tiên (hình như cũng éo đổi được sang địa chỉ khác). Bảng vector ngắt của stm32 cũng được đặt ở chỗ này, tiếp đó sẽ là code chương trình.

Thông thường thì code được build và sau đó được nạp từ địa chỉ 0x08000000 này. Tuy nhiên để OTA thì ta sẽ đặt cái FW OTA chạy ở địa chỉ này, nhiệm vụ nó làm như ở đoạn bên trên, sau đó nó đặt main stack pointer về địa chỉ bắt đầu của cái FW ứng dụng, code sẽ nhảy vào đó, hết việc.

Như hình bên trên, công việc sau cùng của bootloader chỉ đơn giản là set giá trị MSP thành địa chỉ của app (cái code ứng dụng mà ta viết), và +4 cho thanh ghi PC

Bình luận về bài viết này