🌱 STM32 - 10. Hướng Dẫn Sử Dụng Unique ID Trong STM32

🌱 STM32 - 10. Hướng Dẫn Sử Dụng Unique ID Trong STM32

    Câu hỏi đặt ra là các vi điều khiển của mình trong cùng một mạng, hoặc trong các nhà máy họ nạp hàng trăm hàng ngàn con chip với cùng một firmware, thì có cách nào để phân biệt giữa những con chip này với nhau hay không? Chẳng hạn giờ mình muốn các chip nạp cùng firmware, nhưng trong cùng một mạng truyền thông, mình lại cần chúng có một cái ID phân biệt.

STM32F401 NUCLEO Board

Hình 1: Board STM32F401 NUCLEO với các chân GPIO

Giới thiệu về Unique ID

    Câu trả lời mình tìm hiểu được là mỗi vi điều khiển (STM32) có một ID duy nhất. Khi sản xuất, nhà sản xuất đã định danh cho mỗi chip với ID riêng và người dùng có thể dùng chúng với các mục đích khác nhau.

Ứng dụng của Unique ID

  • Dùng để phân biệt các vi điều khiển trong các ứng dụng yêu cầu các VĐK nạp cùng 1 code nhưng vẫn có thể phân biệt chúng với nhau (phục vụ mục đích truyền thông,...).
  • Cải thiện tính bảo mật của chương trình,... chẳng hạn phải biết ID của chip thì mới có thể giao tiếp với nó, hoặc nạp code cho nó, ... nói chung liên quan đến mục đích bảo mật.

👉 Vị trí lưu trữ Unique ID

    ID này của VĐK được lưu trong 96-bit, thường đặt tại một vùng nhớ riêng thuộc Flash của vi điều khiển. 96-bit này sẽ khác nhau ở mỗi dòng VĐK. Dưới đây là một số Unique ID của các dòng STM32:

Unique ID List

Hình 1: Danh sách địa chỉ Unique ID của một số dòng STM32

STM32F0: Address 0x1FFFF7AC - Length 96 bits
STM32F1: Address 0x1FFFF7E8 - Length 96 bits
STM32F2: Address 0x1FFF7A10 - Length 96 bits
STM32F3: Address 0x1FFFF7AC - Length 96 bits
STM32F4: Address 0x1FFF7A10 - Length 96 bits
STM32F7: Address 0x1FF0F420 - Length 96 bits
STM32L0: Address 0x1FF80050 - Length 96 bits
STM32L1: Address 0x1FF800D0 - Length 96 bits
STM32L4: Address 0x1FFF7590 - Length 96 bits
    

👉 Ví dụ kiểm tra Unique ID trên STM32F4

Mình có test với con STM32F4 của mình với đoạn code sau:

STM32 Unique ID Code

Hình 2: Đoạn mã kiểm tra Unique ID trên STM32F4

#include "stm32f4xx.h"
#include "stdio.h"

int main(void)
{
    uint32_t UID[3]; // Array to store 96-bit Unique ID
    UID[0] = *(uint32_t *)(0x1FFF7A10);     // First 32 bits
    UID[1] = *(uint32_t *)(0x1FFF7A14);     // Middle 32 bits
    UID[2] = *(uint32_t *)(0x1FFF7A18);     // Last 32 bits

    printf("Unique ID: %08X-%08X-%08X\n", UID[0], UID[1], UID[2]);

    while (1)
    {
        // Infinite loop
    }
}
    

    Và kết quả là ra được ID tương ứng của STM32F401. Ví dụ, nếu bạn chạy trên board STM32F401, kết quả có thể là một chuỗi như: Unique ID: 12345678-90ABCDEF-56789ABC (giá trị thực tế sẽ khác nhau tùy chip).

>>>>>> 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 😊

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
//