🌱 Bootloader - Tìm hiểu cấu trúc file HEX và Cách áp dụng trong lập trình Vi điều khiển

🌱 Bootloader - Tìm hiểu cấu trúc file HEX và Cách áp dụng trong lập trình Vi điều khiển

    Trong bài viết trước, chúng ta đã thảo luận về hai vấn đề chính mà Bootloader cần quan tâm:

  1. Sắp xếp dữ liệu trong bộ nhớ

  2. File nhị phân và các định dạng

    • Bài viết này tập trung giải thích chi tiết về định dạng file HEX, được sử dụng rộng rãi trong việc nạp chương trình cho vi điều khiển.

1️⃣ Các loại file nhị phân cơ bản

  • Định dạng .BIN

    • Đây là định dạng nhị phân đơn giản nhất.
    • Không chứa thông tin bổ sung hay relocation.
    • Các lệnh được tải trực tiếp đến các địa chỉ cố định trong bộ nhớ.
  • Định dạng .ELF (Executable and Linkable Format)

    • Chứa thông tin về symbol, relocation, và hỗ trợ việc nạp chương trình vào các địa chỉ tùy ý.
    • ELF thường được dùng trong quá trình debug.
  • Định dạng .HEX

    • Định dạng phổ biến, đặc biệt với các dòng vi điều khiển 8-bit.
    • Chúng ta sẽ phân tích sâu hơn cấu trúc của file HEX dưới đây.

    ➤ Đọc thêm: Build Process

ELF File
Các loại file nhị phân cơ bản

2️⃣ Tại sao cần hiểu cấu trúc file HEX?

  • Trong các ứng dụng Bootloader, việc nạp code không thể phụ thuộc vào các công cụ IDE như thường lệ (VD: Keil, STM32CubeProgrammer).
  • Thay vào đó, bạn có thể cần:
    • Nạp code qua giao thức không dây (Wi-Fi, Bluetooth) hoặc có dây (UART, SPI, I2C).
    • Phân tích dữ liệu từ file HEX và ghi trực tiếp vào bộ nhớ FLASH của vi điều khiển.
    • Xử lý các lỗi liên quan đến checksum.

    Hiểu cấu trúc file HEX là bước cơ bản để thực hiện những điều trên.

3️⃣ Cấu trúc file HEX

Một file HEX gồm nhiều dòng dữ liệu, mỗi dòng có định dạng mã ASCII với cấu trúc sau:

Thành phần Kích thước Ý nghĩa
Start Code 1 ký tự Luôn bắt đầu bằng dấu hai chấm (:).
Byte Count 1 byte (2 số) Số byte dữ liệu (Data) trên dòng hiện tại.
Address 2 byte (4 số) Địa chỉ offset của dữ liệu. Địa chỉ thực tế = Base Address + Address.
Record Type 1 byte (2 số) Xác định loại dữ liệu (VD: 00 - Dữ liệu thông thường, 01 - Kết thúc file, 04 - Base Address, ...)
Data N byte Dữ liệu sẽ được nạp vào bộ nhớ FLASH.
Checksum 1 byte (2 số) Giá trị dùng để kiểm tra tính chính xác của dòng dữ liệu.
Cấu trúc file HEX
Cấu trúc file HEX

    Các loại Record Type phổ biến:

Các loại Record Type phổ biến
Các loại Record Type phổ biến

4️⃣ Ví dụ phân tích một dòng HEX

Ví dụ dòng HEX
  1. Start Code: :
  2. Byte Count: 03 (3 byte dữ liệu).
  3. Address: 0030 (Offset 0x0030).
  4. Record Type: 00 (Dữ liệu thông thường).
  5. Data: 02337A.
  6. Checksum: 1E.

Kiểm tra Checksum:

  • Tổng tất cả các byte (ngoại trừ checksum):
    03 + 00 + 30 + 00 + 02 + 33 + 7A = E2
  • Đảo bit của E2: 1D.
  • Cộng thêm 1: 1E.

Kết luận: Checksum đúng.

    ➤ Hướng dẫn xử lý File HEX trong Bootloader và FOTA

    Hãy tiếp tục tìm hiểu và thực hành để thành thạo cấu trúc file HEX cũng như cách sử dụng chúng trong các ứng dụng Bootloader.

Nguyễn Văn Nghĩa

Mình là một người thích học hỏi và chia sẻ các kiến thức về Nhúng IOT.

Đăng nhận xét

Mới hơn Cũ hơn