🌱 AUTOSAR MCAL - Microcontroller Abstraction Layer: Cầu nối giữa phần cứng và phần mềm

🌱 AUTOSAR MCAL - Microcontroller Abstraction Layer: Cấu nối giữa phần cứng và phần mềm

AUTOSAR Memory Management

    Theo kiến trúc phân lớp của AUTOSAR, MCAL - Microcontroller Abstraction Layer chính là layer thấp nhất và thao tác trực tiếp với Hardware. MCAL làm cho các lớp phần mềm ở các lớp trên (BSW, Application) có thể độc lập với các phần cứng như MCU (Tức là nếu sử dụng/thay thế các MCU khác nhau thì phần mềm lớp trên sẽ không cần phải thay đổi). Bài viết này sẽ giới thiệu tổng quan về cấu trúc và cách triển khai MCAL Layer trong AUTOSAR.

Table of Contents

1. Giới thiệu về MCAL Layer

    MCAL (Microcontroller Abstraction Layer) trong AUTOSAR là một thành phần của Basic Software (BSW) được thiết kế để trừu tượng hóa phần cứng vi điều khiển. Nó cung cấp khả năng tương tác chuẩn giữa phần mềm ứng dụng và phần cứng, cho phép tích hợp dễ dàng các ECU từ các nhà sản xuất khác nhau.

Chức năng chính của MCAL

    MCAL đảm bảo giao tiếp giữa phần mềm và phần cứng thông qua các driver tiêu chuẩn. Chức năng chính bao gồm:

  • Truy cập các tài nguyên phần cứng như GPIO, ADC, Timer, UART, ... (Các ngoại vi của Vi điều khiển) và các thiết bị phần cứng bên ngoài.
  • Đảm bảo tính đồng nhất khi sử dụng phần cứng từ nhiều nhà cung cấp khác nhau, đảm bảo các phần mềm lớp trên sẽ không bị phụ thuộc vào phần cứng.
  • Hỗ trợ các yêu cầu thời gian thực và hiệu suất cao, hỗ trợ các module Safety và Security.

2. Cấu trúc của MCAL Layer

    Tầng MCAL bao gồm các nhóm module sau:

Autosar MCAL Driver

Microcontroller Drivers

    Cung cấp driver cho các ngoại vi nội chung của vi điều khiển (ví dụ: Clock, Reset, Watchdog, Timer GPT)

Communication Drivers

    Cung cấp driver cho các module giao tiếp truyền thông, các module truyền thông trên board ECU (như SPI, I2C) và các giao tiếp truyền thông trong toàn bộ xe (như CAN, LIN, Ethernet)

Memory Driver

    Cung cấp driver cho các module giao tiếp với bộ nhớ nội (Flash, EEPROM) và các thiết bị bộ nhớ ngoài được ánh xạ bộ nhớ (External Flash, SD Card, ...)

IO Driver

    Driver cho các ngoại vi giao tiếp I/O analog và digital (ADC, PWM, DIO)

Crypto Driver

    Driver hỗ trợ các ngoại vi mã hóa trên chip như SHE hoặc HSM

Wireless Communication Drivers

    Driver cho các hệ thống mạng không dây (giao tiếp trong xe hoặc ngoài bo mạch)

    Ví dụ việc giao tiếp các layer lớp trên với MCAL layer

Autosar Layered

3. Development & Configuration module tầng MCAL

    Tất cả các module MCAL đều được thiết kế cho các phần cứng vi điều khiển cụ thể, vì các ngoại vi trên mỗi vi điều khiển là khác nhau. Vì vậy mỗi Vi điều khiển sẽ có một tầng MCAL riêng.

    Các phần mềm ở tầng MCAL sẽ được sử dụng cho một bài toán cụ thể nào đó, và sẽ khác nhau ở từng bài toán. Ví dụ module GPT (Timer), sẽ cần cấu hình thời gian đếm, có sử dụng Interrupt hay không ở từng ứng dụng khác nhau .. Vì vậy, một phần quan trọng của tầng MCAL là cần cung cấp các hàm có khả năng cấu hình được cho từng ứng dụng.

    Chẳng hạn với module GPT, Autosar quy định hàm khởi tạo timer:

void Gpt_Init ( const Gpt_ConfigType* ConfigPtr ) 

    ➥ Tham khảo Specification of GPT Driver

    Với function trên, người viết phần mềm lớp trên sẽ cần tạo ra một struct cấu hình để truyền vào hàm Gpt_Init, ví dụ:

  1. Gpt_ConfigType GptUserConfig = {
  2. .channelCount = 1,
  3. .ChannelCfgPtr = {
  4. .channelMode = GPT_CH_MODE_ONESHOT,
  5. .tickValueMax = 1000U,
  6. }
  7. };
  8. Gpt_Init(&GptUserConfig);

    Với số lượng module cực kỳ lớn, và người viết code ở lớp trên không cần quá quan tâm đến phần cứng, thì việc tạo ra các struct trên là vô cùng khó khăn. Chính vì vậy, với AUTOSAR, việc cấu hình các module này được thực hiện bằng cách sử dụng các công cụ chuyên dụng để cấu hình các ngoại vi và và generate code.

    Các công cụ này cho phép người dùng cấu hình ngoại vi trên một giao diện trực quan, và sau đó có thể generate ra các đoạn code C (đơn giản nhất là các struct như trên).

    Với AUTOSAR, một phần mềm cực kỳ nổi tiếng dành cho việc cấu hình và generate code cho tầng MCAL đó là EB Tresos của Electrobit, hoặc một số phần mềm khác được phát triển riêng của các hãng như S32DS của NXP, Aurix development studio của Infineon, ...

Autosar EB Tresos Example
Ví dụ cấu hình GPT module sử dụng EB Tresos

    Các module MCAL sẽ tạo ra các file đầu ra chứa các cấu hình (struct như kể trên) - các file đầu ra là các source file Post Build và Pre Config (*_PBCfg.c / *_PBCfg.h và *_Cfg.h) làm đầu ra.

    Vì vậy, khi phát triển phần mềm ở tầng MCAL, chúng ta sẽ có 2 phần:

  • Driver Static Code - Các Source file không đổi chứa các function (ví dụ Gpt_Init) - Gpt.c / Gpt.h
  • Configuration Code - Các Source file chứa cấu hình của user - Gpt_PBCfg.c / Gpt_PBCfg.h / Gpt_Cfg.c / Gpt_Cfg.h

4. Kết luận

    MCAL Layer là một thành phần cốt lõi trong AUTOSAR, giúp chuẩn hóa giao tiếp giữa phần mềm và phần cứng. Vì vậy việc tiếp cận với các module MCAL và các sử dụng các tool generate code của tầng MCAL là rất quan trọng khi làm việc và học tập với AUTOSAR. Các bài viết sau mình sẽ giới thiệu về cách sử dụng một số Tool Generate Code điển hình!

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