
Hiện nay, hệ thống nhúng đã trở nên cực kì quan trọng trong các thiết bị điện thoại, ô tô… Đóng vai trò cốt lõi đảm bảo hiệu suất và sự tiện ích của các sản phẩm công nghệ. Vậy hệ thống nhúng là gì? Một hệ thống nhúng gồm những thành phần nào? Hãy cùng chipstack.vn tìm hiểu trong bài viết dưới đây.
Khái niệm về hệ thống nhúng
Hệ thống nhúng là hệ thống kết hợp giữa phần cứng và phần mềm máy tính để thực hiện một chức năng cụ thể.
Lò vi sóng là một ví dụ điển hình. Trong đó phần cứng bao gồm các cảm biến, bảng mạch điều khiển… trong khi phần mềm nhúng được tích hợp để xử lý các tín hiệu từ người dùng (điều khiển công suất hay thời gian nấu..). Tất cả thành phần này phối hợp với nhau nhằm thực hiện một chức năng chuyên biệt: làm nóng thức ăn một cách hiệu quả và an toàn.
Sự khác biệt giữa hệ thống nhúng và hệ thống máy tính
Hệ thống nhúng được thiết kế để thực hiện một chức năng cụ thể nào đó. hệ thống máy tính được thiết kế để thực hiện đa nhiệm: nghe nhạc, xem phim, chơi game, lướt web.
Tuy có sự khác biệt, nhưng hệ thống máy tính và hệ thống nhúng có mối liên hệ với nhau. Một máy tính có thể giao tiếp với nhiều hệ thống nhúng khác nhau. Máy tính của bạn có thể kết nối đến chuột và bàn phím, máy tính và bàn phím đều là hệ thống nhúng. Các thiết bị này không trực tiếp xử lý hay lưu trữ dữ liệu hệ thống chính, nhưng đóng vai trò hỗ trợ, mở rộng khả năng của máy tính. Chúng được gọi là thiết bị ngoại vi (peripherals).
Các thành phần của một hệ thống nhúng
Để dễ hình dung một hệ thống nhúng gồm những thành phần nào, hãy thử liên tưởng nó đến cơ thể con người – một hệ thống phức tạp nhưng lại phối hợp nhịp nhàng để thực hiện các chức năng chuyên biệt như: chạy bộ…
Và để thực hiện chức năng đó, thì hệ thống này cũng cần phải có các “giác quan” để thu thập dữ liệu từ môi trường như mắt phát hiện vật cản, tai nhận biết âm thanh, da cảm nhận nhiệt độ. Sau đó các dữ liệu được gửi lên “não bộ” để xử lý và đưa ra quyết định cho “cơ bắp” nên né tránh vật cản hay nên tăng tốc chạy nhanh hơn hay. Tương tự một hệ thống nhúng cũng bao gồm các thành phần như vậy, mỗi thành phần đóng vai trò riêng biệt nhưng gắn kết chặt chẽ để hoàn thành nhiệm vụ, và thường được tích hợp thành một vi điều khiển.

Hình 2 mô tả các thành phần trong một vi điều khiển Arm – Cortex M3.
Hệ thống nhúng gồm 2 phần chính: phần cứng và phần mềm.
I. Phần cứng
Phần cứng tập trung chủ yếu vào MCU (microcontroller) hay vi điều khiển, đây là trái tim của hệ thống nhúng. MCU tích hợp nhiều thành phần:
1. Bộ xử lý (Processor) = “Não người”
Bộ xử lý (vi xử lý như ARM – Cortex Mx, AVR, PIC) giống như “não bộ” của con người, thực hiện các tác vụ tính toán và đưa ra quyết định. Tốc độ xử lý của mỗi vi xử lý khác nhau.
Đây là trung tâm điều khiển của một vi điều khiển, và để thực hiện các chức năng như giao tiếp thì bộ xử lý cần phải kết nối đến các thiết bị ngoại vi. Giống như con người: não bộ để suy nghĩ và đưa ra quyết định, sau đó sử dụng miệng để giao tiếp hoặc tay để hành động.
2. Thiết bị ngoại vi (peripherals) = “Các giác quan”
Các thiết bị ngoại vi như đã giải thích ở trên có thể là các I/O Ports hay GPIO; các chuẩn giao tiếp I2C, SPI, UART; timer… chúng chỉ thực hiện một chức năng chuyên biệt.
Lấy ví dụ:
- Hai người đang trò chuyện với nhau, để cuộc trò chuyện diễn ra thành công, thì hai người cần sử dụng một ngôn ngữ chung có thể là tiếng Việt, một người cảm thấy lạnh nên nói cho người kia biết hôm nay lạnh để mặc áo khoác.
- Tương tự như vậy, khi vi điều khiển giao tiếp với cảm biến nhiệt độ, cần phải có chung một phương thức giao tiếp (I2C, SPI, UART…), cảm biến nhiệt độ đóng vai trò là “xúc giác” để gửi dữ liệu qua cho vi điều khiển xử lý và đưa ra quyết định.
3. Bộ nhớ (Memory) = “Bộ nhớ con người”
ROM (bộ nhớ dài hạn): Giống như ký ức lâu dài của con người, nơi lưu trữ các dữ liệu không thay đổi chẳng hạn như firmware hoặc BIOS.
RAM (bộ nhớ ngắn hạn): Giống như trí nhớ tạm thời, giúp bạn xử lý thông tin trong thời gian ngắn (như nhớ số điện thoại vừa đọc), phục vụ cho các tác vụ tính toán hoặc xử lý tạm thời.
Flash Memory: Lưu trữ phần mềm có thể cập nhật, thường dùng để lưu các đoạn code và dữ liệu của người dùng. Giống như ghi nhật ký, cho phép cập nhật hoặc thêm thông tin mới.
4. Hệ thống xung Clock = “Nhịp đập của tim”
Xung clock trong hệ thống nhúng giống như nhịp đập của trái tim, đồng bộ hoá tất cả các hoạt động trong hệ thống.
Ví dụ: khi bạn chạy thì tim đập nhanh hơn để cung cấp máu cho cơ bắp. Tương tự như vậy hệ thống xung clock trong vi điều khiển cũng có thể thay đổi tần số để đáp ứng nhu cầu tốc độ xử lý cao hơn.
5. Ngắt (Interrupt)
Ngắt là một tín hiệu được gửi từ phần cứng (như cảm biến, nút nhấn), yêu cầu bộ xử lý tạm dừng công việc hiện tại để ưu tiên cho việc thực hiện công việc quan trọng hơn. Sau khi xử lý xong, bộ xử lý quay lại công việc đang còn dang dở.
Ví dụ thực tế: Hãy tưởng tượng bạn đang nấu ăn (tác vụ chính), và có tiếng chuông cửa (tín hiệu ngắt). Bạn tạm dừng việc nấu ăn để ra mở cửa (Xử lý ngắt). Sau khi mở cửa xong, bạn quay lại nấu ăn như bình thường.
Trong hệ thống nhúng, ngắt hoạt động theo nguyên lý sau:
- Chuông cửa: nhận tín hiệu từ nút nhấn.
- Mở cửa: xử lý ngắt (ISR).
- Quay lại nấu ăn: tiếp tục thực hiện nhiệm vụ chính.
II. Phần mềm

Phần mềm là các công cụ cho phép lập trình viên viết chương trình và kiểm tra xem nó chạy như thế nào trong phần cứng. Phần mềm bao gồm:
1. Text editor (IDE)
Là nơi để viết chương trình giống như dùng Word để soạn thảo văn bản, nhưng đây là nơi để soạn chương trình và logic hoạt động cho vi điều khiển.
Tool: STM32CubeIde, Arduino IDE, Keil µVision…
2. Compiler
Sau khi viết mã xong, bạn cần một công cụ để dịch đoạn mã (C/C++) sang ngôn ngữ Assembly, một ngôn ngữ gần hơn với phần cứng. Compiler thực hiện công việc này.
Để biên dịch từ C/C++ sang Assembly là cả một quá trình.
Một số compiler: GCC (GNU Compiler Collection), Clang, Microsoft Visual C++…
3. Assembler
Assembler chuyển mã Assembly thành mã nhị phân để MCU có thể hiểu và thực thi được.
Nguyên lý hoạt động: Tách mỗi biến, giá trị, hàm và gán chúng với mỗi địa chỉ sau đó chuyển chúng thành machine code mà MCU có thể hiểu và thực thi, cuối cùng tạo tệp đầu ra hoặc tệp đối tượng (object file) để chương trình có thể chạy trên hệ thống.
Một số tool assembler: GNU Assembler, NASM (Netwide Assembler), MASM (Microsoft Macro Assembler)…
4. Linker
Tiếp theo, nếu chương trình của bạn được chia thành nhiều phần (modules), thì Linker sẽ ghép lại thành một chương trình duy nhất.
Một số tool linker phổ biến hiện nay: GNU Linker, LLVM Linker, Gold Linker…
5. Emulator
Trước khi nạp chương trình vào MCU, bạn có thể chạy giả lập xem đoạn code chạy như thế nào trong máy tính, tránh được lỗi mà không cần phải nạp code vào MCU.
Các tool phổ biến: QEMU, STMicroelectronics STM32CubeMX và STM32CubeIDE,…
6. Debugger
Nếu đoạn code gặp lỗi, Debugger sẽ giúp bạn dò tìm và sửa lỗi trước khi triển khai.
Nguyên lý hoạt động:
Debugger sẽ tải và khởi động chương trình, cung cấp cho người dùng:
- Break point: cho phép dừng chương trình tại vị trí cụ thể.
- Step: nhảy từng dòng lệnh một.
- Continue: nhảy đến break point mà người dùng đã đánh dấu trước đó.
Theo dõi giá trị của biến, giá trị của được cập nhật của từng thanh ghi.
Một số tool debug: logic analyzer, GDB, LLDB…
7. Flashing tool (Loader)
Cuối cùng, khi chương trình đã sẵn sàng, bạn sẽ sử dụng công cụ nạp để đưa chương trình từ máy tính vào MCU.
Một số tool: STM32CubeProgrammer, AVRDUDE, OpenOCD, J-Link by Segger…
Ứng dụng của hệ thống nhúng

Hệ thống nhúng hiện nay được ứng dụng rộng rãi trong nhiều lĩnh vực, đặc biệt là lĩnh vực điện tử, có thể kể đến:
- Thiết bị tiêu dùng thông minh: Smartphone, smartwatch…
- Ô tô và giao thông: Hệ thống điều khiển động cơ, hệ thống phanh ABS, tự lái, cảm biến radar, camera…
- Y tế: Máy theo dõi sức khoẻ, máy thở, máy đo huyết áp, máy chẩn đoán…
- Tự động hoá công nghiệp: Robot công nghiệp…
- Vệ tinh và hàng không: Hệ thống điều khiển máy bay, vệ tinh, cảm biến khí quyển, radar…
- Internet of things (IOT): máy đo nhiệt độ, độ ẩm…
- Giải trí và media: máy chơi game (PS4, PS5…), thiết bị âm thanh…
Qua bài viết trên, chipstack.vn hi vọng các bạn có cái nhìn tổng quan về hệ thống nhúng. Nếu chủ đề này khơi dậy sự hứng thú của bạn, đừng ngần ngại khám phá thêm bài viết tiếp theo, nơi chúng ta sẽ đi sâu vào kiến trúc Arm-Cortex M3 và vai trò của nó trong các hệ thống nhúng.