Skip to content

Tổng quan về MCU

Bộ vi điều khiển (microcontroller unit, MCU) là chip tích hợp core xử lý, bộ nhớ chương trình (flash), RAM (SRAM) và ngoại vi trên cùng một die, chạy firmware bare-metal hoặc hệ điều hành thời gian thực (real-time operating system, RTOS) thay vì một hệ điều hành đa dụng. Site này tập trung vào embedded Linux, nhưng một board chạy Linux thường có thêm ít nhất một MCU đảm nhận những việc Linux không phù hợp để làm. Trang này lần lượt phân biệt MCU với bộ vi xử lý chạy Linux, trình bày các vai trò của MCU trong một hệ thống có Linux, sau đó liệt kê các trang trong mục MCU.

Phân biệt MCU và MPU

Bộ vi xử lý (microprocessor unit, MPU), hay application processor, là loại chip dùng cho các board chạy Linux trong tab Embedded (Zynq, i.MX, Rockchip, Raspberry Pi). Điểm khác biệt cốt lõi là MPU có khối quản lý bộ nhớ (memory management unit, MMU) để hỗ trợ bộ nhớ ảo, còn MCU thì không. Các khác biệt khác đều xuất phát từ việc MCU được thiết kế để tự chạy được với rất ít linh kiện bên ngoài.

Tiêu chí MCU MPU / SoC chạy Linux
Core điển hình Arm Cortex-M, RISC-V 32-bit, các core 8-bit và 16-bit Arm Cortex-A, RISC-V 64-bit có MMU, x86
Quản lý bộ nhớ Không có MMU, thường có memory protection unit (MPU) để chia vùng bảo vệ Có MMU, hỗ trợ bộ nhớ ảo và cô lập giữa các process
Bộ nhớ Flash và SRAM nằm trên chip, dung lượng từ vài KB tới vài MB DRAM ngoài (DDR) và bộ nhớ lưu trữ ngoài (eMMC, NAND, SD)
Phần mềm Bare-metal hoặc RTOS, đóng gói thành một ảnh firmware Bootloader, kernel và rootfs
Khởi động Thực thi code từ flash nội ngay sau reset Qua nhiều tầng bootloader trước khi vào kernel
Thời gian thực Thời gian đáp ứng ngắt xác định (deterministic) Phụ thuộc cấu hình kernel (ví dụ PREEMPT_RT)
Năng lượng Có chế độ ngủ sâu với dòng tiêu thụ rất thấp Tiêu thụ cao hơn, quản lý nguồn phức tạp hơn
Thiết kế board Ít linh kiện ngoài, thường không cần DDR hoặc PMIC Cần DDR, PMIC và layout tốc độ cao

Ranh giới giữa hai nhóm không còn rõ ràng. Nhóm crossover MCU như NXP i.MX RT1170 chạy Cortex-M7 ở 1 GHz nhưng vẫn là MCU, không có MMU. Ngược lại, nhiều SoC chạy Linux tích hợp thêm lõi Cortex-M để chạy firmware thời gian thực bên cạnh các lõi Cortex-A. Linux có cấu hình chạy trên core không có MMU (NOMMU), nhưng khi đó không có fork() và không cô lập được bộ nhớ giữa các process.

Vai trò của MCU trong hệ thống chạy Linux

Trên một board có Linux, MCU thường được giao các việc cần chạy trước khi Linux khởi động, cần đáp ứng thời gian thực, hoặc cần tiếp tục chạy khi SoC chính đã tắt. Các vai trò thường gặp:

  • Điều khiển nguồn và trình tự bật nguồn (power sequencing). MCU chạy từ nguồn standby, bật các rail nguồn theo thứ tự, giữ và nhả reset của SoC, xử lý nút nguồn và làm watchdog bên ngoài SoC.
  • Quản lý board. MCU giám sát nhiệt độ, quạt và điện áp. Trên server, việc này do BMC đảm nhận; trên board nhỏ, một MCU thường làm thay.
  • Xử lý I/O thời gian thực. Điều khiển động cơ, đọc encoder, lấy mẫu ADC theo chu kỳ cố định và giao tiếp fieldbus như CAN.
  • Sensor hub và chế độ tiêu thụ thấp. MCU thu thập dữ liệu cảm biến trong lúc SoC ngủ và đánh thức SoC khi có sự kiện.
  • Radio co-processor. Stack vô tuyến BLE, Thread hoặc Wi-Fi chạy trên một chip MCU riêng. Linux giao tiếp với chip này qua HCI (Host Controller Interface, giao diện chuẩn giữa host và controller Bluetooth) hoặc Spinel (giao thức của OpenThread RCP), thường đi qua UART hoặc SPI.
  • Lõi phụ trong SoC lai. i.MX 8M có lõi Cortex-M4 hoặc M7, AM62x có lõi Cortex-M4F, STM32MP15 có lõi Cortex-M4. Linux nạp firmware cho lõi này và trao đổi dữ liệu với nó qua framework remoteproc và RPMsg.

Với MCU nằm ngoài SoC, kênh giao tiếp với Linux thường là UART, I2C, SPI hoặc USB, kèm một giao thức do nhóm phát triển tự định nghĩa. Với lõi MCU nằm trong SoC, hai bên dùng bộ nhớ chia sẻ và mailbox phần cứng. Driver cho cả hai trường hợp thuộc tab Linux Kernel. Chi tiết tích hợp xem MCU trong hệ thống Linux.

Các trang trong mục MCU

Trang Nội dung Trạng thái
Các dòng MCU phổ biến Các kiến trúc core và các dòng MCU chính của từng hãng Đang viết
Chọn MCU cho board Tiêu chí chọn: ngoại vi, bộ nhớ, năng lượng, nguồn cung, hệ sinh thái Chưa viết
SDK và framework CMSIS, HAL của hãng, Zephyr, ESP-IDF, Pico SDK Chưa viết
RTOS FreeRTOS, Zephyr, ThreadX Chưa viết
Nạp và debug firmware SWD, JTAG, OpenOCD, debug probe Chưa viết
Bootloader và cập nhật firmware Bootloader trong ROM, MCUboot, DFU Chưa viết
MCU trong hệ thống Linux MCU ngoài SoC, lõi MCU trong SoC (remoteproc, RPMsg), cập nhật firmware MCU Đang viết

Liên quan

Tài liệu tham khảo