AK Embedded Base Kit - STM32L151 - Firmware upgrade

Cập nhật phần mềm là tính năng rất quan trọng khi phát triển sản phẩm ra thị trường, sẽ có nhiều vấn đề phát sinh trong quá trình triển khai thực thế mà chúng ta không lường trước được khi phát triển sản phầm, hoặc nâng cấp các tính năng mới cho các sản phẩm khách hàng đang sử dụng,... Trong bài viết này mình sẽ trình bày các cách để viết tính năng cập nhật phần mềm, ưu nhược điểm, cũng như các module bên trong AK Embedded Base KIT đã hỗ trợ cho tính năng này.
 
Các bạn lưu ý, các dòng MCU (Microcontroller) đời mới đã tích hợp các module cập nhật bên trong Chip, mình đỡ phải phải code tính năng này, nếu MCU có hỗ trợ và phù hợp với nhu cầu sử dụng, các bạn nên ưu tiên sử dụng nhé !
 

AK Embedded Base Kit - STM32L151 - Firmware upgrade

 
Trước khi trình bày mình note lại các khái niệm để các bạn dễ nắm bắt như sau:
  • Host: có thể là điện thoại, máy tính, hoặc các đối tượng lưu được Firmware tạm thời để cập nhật cho Target.
  • Target: Chính là đối tượng cần được cập nhật phần mềm.
  • Bus (kênh vật lý): là phương tiện để Host có thể gửi Image fimware xuống Target, UART, SPI, RF,...
  • Boot: thường là chương trình đầu tiên khi MCU khởi động, Boot kiểm tra các hoạt động của hệ thống và Jump (nhảy) lên ứng dụng Application.
  • Application: Là chương trình chính chạy các tính năng của ứng dụng.
  • Redirect section: là phương pháp cho phép bạn lưu biến hoặc hàm (function) và các vùng nhớ mà bạn muốn, ví dụ bạn có thể Redirect để function lưu trên RAM thay vì trong section .text của Flash, kĩ thuật này sẽ trình bày ở bài viết khác.
 

1. Phương pháp cập nhật Firmware cho Application

1.1 Cập nhật phần mềm từ Host thông qua bộ nhớ đệm của Target (thường là Flash ngoài).

Phương pháp này thường được sử dụng đối với Target được trang bị Flash ngoài, Các bước thực hiện như sau:
  • 1. Host chia nhỏ firmware và gửi xuống Target (code trên Application), Target sẽ lưu xuống Flash ngoài.
  • 2. Sau khi quá trình gửi Firmware hoàn tất (Checksum các thứ OK hết), Application sẽ yêu cầu Boot cập nhật mới cho mình, firmware mới lấy từ Flash ngoài.
  • 3. Boot sẽ copy fimware mới từ Flash ngoài vào phân vùng Flash nội của Application. Sau khi hoàn thành, kiểm tra checksum OK, Boot sẽ Jump lên Application để chạy bản firmware mới.
Ví dụ phương pháp này trên AK Embedded Base Kit:
Command trên AK - Base Linux:
fw a

Lưu ý: Đổi đường dẫn của firmware phù hợp với máy tính của bạn.

Phương pháp cập nhật Firmware cho Application - AK Embedded Base Kit

 
Phương pháp này là phương pháp an toàn nhất để cập nhật firmware, trong tất cả các quá trình cập nhật nếu có lỗi phát sinh, như mất nguồn thì hệ thống vẫn sẽ chạy bình khi bật nguồn trở lại, đối với các ứng dụng IoT ở xa, hoặc Target chạy các task vụ quan trọng thì mình ưu tiên dùng phương án này.
 
Bước số 3 có thể thay bằng cách đưa chương trình cập nhật firmware từ Flash ngoài cho Application lên RAM, mà không cần nhảy lại Boot, phương án này sử dụng sợ nhất ca mất nguồn thiết bị giữa chừng, có thể làm hư thiết bị. đối với thiết bị mà Boot thiếu tính năng, hoặc Code Boot & Application đều phải chạy từ Flash ngoài thì bắt buộc phải sử dụng phương án Redirect section, để xử lý an toàn cho trường hợp này code cần xử lý thêm nhiều bước, bạn nào quan tâm ib mình thông tin sau.
 

1.2 Cập nhật phần mềm từ Host KHÔNG thông qua bộ nhớ đệm của Target.

Phương pháp này ứng dụng cho ứng dụng chạy các task vụ không quan trọng (ví dụ cảm biến cho mục đích giám sát), ví dụ điển hình của phương pháp này là update firmware cho AK Embedded Base KIT qua bus USB sử dụng AK Flash.
 
Có 2 phương pháp làm với trường hợp này:
1.2.1 Cập nhật thông qua Boot.
  • 1. Khi có yêu cầu cập nhật firmware từ Host, Target sẽ nhảy từ Application xuống Boot.
  • 2. Boot sẽ nhận các gói firmware từ Host và ghi trực tiếp vào vùng nhớ Flash của Application.
  • 3. Sau khi cập nhật thành công, kiểm tra checksum các thứ OK, Boot sẽ Jump lên Application.
Ví dụ phương pháp này trên AK Embedded Base Kit:

Phương pháp cập nhật Firmware cho Application - AK Embedded Base Kit

Cách sử dụng các bạn tham khảo cách sử dụng tại: AK Embedded Base Kit - STM32L151 - Getting started

 

1.2.2 Cập nhật thông qua các hàm đã được Redirect section lên RAM.
Chương trình hoặc các hàm được Redirect chạy hoàn toàn trên RAM mình đặt tên là RAM_FW cho dễ trình bày. Lưu ý, các hàm trên RAM_FW và các hàm con sẽ nằm hoàn toàn trên RAM nhé !
  • 1. Khi có yêu cầu cập nhật firmware từ Host, Target sẽ nhảy từ Application lên RAM_FW.
  • 2. RAM_FW sẽ nhận các gói firmware từ Host và ghi trực tiếp vào vùng nhớ Flash của Application.
  • 3. Sau khi cập nhật thành công, kiểm tra checksum các thứ OK, RAM_FW sẽ Jump start Application.
Phương án này không hay lắm chỉ để mang tính chất tham khảo.
 

2. Phương pháp cập nhật Firmware cho Boot.

Phương án cho Boot thì cũng tương tự như cho Application, Application sẽ cập nhật cho Boot. Tuy nhiên, cập nhật cho Boot có nhiều rủi ro hơn, Boot đang cập nhật mà mất điện thì coi như xong, cho nên khi code Boot các bạn cần đầu tư khâu thiết kế cẩn thận hơn.
 
Ví dụ phương pháp này trên AK Embedded Base Kit:
Command trên AK - Base Linux:
fw b

Lưu ý: Đổi đường dẫn của firmware phù hợp với máy tính của bạn.

Phương pháp cập nhật Firmware cho Boot - AK Embedded Base Kit

 

3. Các Bus, kênh vật lý có thể cập nhật firmware cho Target.

Khi thiết kế tính năng update firmware các bạn lưu ý thiết kế các luồng (Sequence Diagram) chuẩn, để có thể cập nhật fimware từ tất cả các kênh có khả năng cập nhật phần mềm được cho Target. Ví dụ: Nếu thiết bị có USB, hoặc UART với Host thì Host có thể cập nhật được cho Target, nếu thiết bị sử dụng RF thì có thể cập nhật thông qua RF.
 
Đại loại là chuẩn hóa luồng để dễ dàng cập nhật từ các kênh có thể có của Target.
 

Nếu trong quá trình thao tác có phát sinh các lỗi hoặc các thắc mắc, các bạn thông tin về EPCB theo các kênh sau nhé !