Title Image

Blog Logo

🌱 AUTOSAR 03. BSW - Basic Software

🌱 AUTOSAR 03. BSW - Basic Software

autosar

    Để hiểu những nội dung của bài viết này, các bạn cần đọc hiểu các nội dung trong bài viết mở đầu về AUTOSAR. Bài viết này chúng ta sẽ tìm hiểu về layer AUTOSAR BSW - Basic Software (Layer dưới của RTE), đây là một layer quan trọng giúp cho tầng Application có thể sử dụng để giao tiếp với các peripheral khác nhau của MCU.

    👉 BSW - Basic Software là gì?

    BSW - Basic Software bao gồm các module Basic Software (BSWM) dưới dạng tập hợp các file phần mềm (code hoặc description), những file code này triển khai các hàm cơ bản của một ECU.

    BSW được cấu hình bằng các phần mềm cấu hình như Vector Davinci Configurator là các cấu hình nằm dưới tầng RTE (Như trong hình).

AUTOSAR

    Hình trên là một mô hình chi tiết về kiến trúc phân lớp của AUTOSAR:

  • Micro-Controller
    Tầng màu đen dưới cùng là phần cứng Micro-Controller.
  • MCAL - Microcontroller Abstraction Layer
    Các khối màu đỏ đại diện cho tầng MCAL (Microcontroller Abstraction Layer), bao gồm các drivers của các peripherals. MCAL là tầng thấp nhất của Basic Software. Tầng này trực tiếp truy cập vào phần cứng nên rất phụ thuộc vào phần cứng, và sẽ cần thay đổi đối với các phần cứng khác nhau.
  • ECU Abstraction Layer
    Các lớp màu xanh green (ngoại trừ CDD), được hiểu là ECU Abstraction Layer. Abstraction - Trừu tượng, trong bài toán này có thể hiểu là làm giảm tối đa sự phụ thuộc vào phần cứng. Tức là cung cấp các API chung nhất cho người dùng, để khi phần cứng có thay đổi thì các API này cũng ít bị ảnh hưởng. (Tham khảo thư viện HAL của hãng ST - chip STM32).
  • CDD - Complex Device Drivers
    Tầng CDD kết nối trực tiếp SWC - tầng Application với phần cứng MCU thông qua tầng RTE. Tầng này hữu ích cho việc viết các functions/drivers của các peripheral/external devices mà không được định nghĩa trong AUTOSAR, hoặc những functions yêu cầu ràng buộc cao về mặt thời gian.
    Khác với tầng MCAL kết hợp với ECUAL, tầng CDD phụ thuộc nhiều vào phần cứng và khả năng sử dụng lại code sẽ kém hơn. 
  • Service Layer
    Đây là tầng trên cùng của BSW, tầng này cung cấp các dịch vụ (service) cơ bản cho các Application, RTE, BSW. Các service có thể là: Các function liên quan đến OS, Communication Services, Memory Service (NVRAM), ECU state management, ...

    👉 Internal/External Driver trong AUTOSAR

    Phụ thuộc vào loại peripheral được sử dụng, AUTOSAR có 2 loại driver: InternalExternal.

    Internal Driver được sử dụng để truy cập tới các thiết bị ngoại vi nội bên trong vi điều khiển như EEPROM, ADC, GPIO, ... Trong khi đó External Driver sử dụng để truy cập tới các thiết bị ngoại vi kết nối bên ngoài Vi điều khiển, như External Flash, SD Card, ... 

    Các Internal Driver nằm trong tầng MCAL, trong khi External Driver nằm trong tầng ECU Abstraction Layer. Một vài trường hợp ngoại lệ, với External Device như memory mapped memories, nó có thể được truy cập trực tiếp bằng vi điều khiển và nó nằm trong tầng MCAL.

    👉 Khái niệm Interfaces, Handlers, Manager

    ➤ Interfaces là khái niệm nằm trong tầng ECU Abstractioncung cấp một chức năng để trừu tượng hóa các module cấp thấp (Low-level module) và cung cấp một số API có thể được sử dụng ở các lớp trên.

    Interfaces còn cung cấp khả năng truy cập vào một số thiết bị cụ thể bất kể số lượng thiết bị hiện có cùng loại, và không phụ thuộc vào Hardware.

    ➤ Handlers có nhiệm vụ kiểm soát các truy cập đồng thời, các truy cập liên tiếp và bất đồng bộ của một hay nhiều clients, Khi có nhiều truy cập xảy ra thì Handlers sẽ đưa chúng vào các cơ chế như Buffer, Queue, ... để tránh mất sự kiện.

    Các chức năng của Handlers thường được triển khai trong Driver hoặc Interfaces.

    ➤ Manager là khái niệm nằm trong tầng Services, nó cung cung các dịch vụ cụ thể cho nhiều clients khác nhau. Nó được yêu cầu trong mọi trường hợp mà chỉ mình Handlers là không đủ để xử lý các yêu cầu.

    Ví dụ. NVRAM Manager điều khiển việc truy cập vào bộ nhớ Internal/External Flash.

    👉 Chi tiết các tầng của BSW

    MCAL (Microcontroller Abstraction Layer)

    Tầng MCAL bao gồm những Layer sau:

  • Microcontroller Drivers - Cung cấp các function để truy cập đến các ngoại vi nội như Watchdog, Timer, ...
  • Memory Drivers - Cung cấp các function để truy cập đến các bộ nhớ nội như Internal Flash, Internal EEPROM, và các bộ nhớ ngoài như External Flash.
  • Crypto Drivers - Cung cấp các function để truy cập đến Internal Crypto như SHE, HSM, ...
  • Wireless Communication Drivers - Cung cấp các function cho các hệ thống mạng không dây (Giao tiếp trong hoặc ngoài xe).
  • Communication Drivers - Cung cấp các function cho các giao tiếp on board như UART, I2C, SPI, ... và các giao tiếp Vehicle như CAN, LIN, FlexRay, ...
  • I/O Drivers - Cung cấp các function để truy cập và sử dụng các chân I/O của MCU như chân Digital, Analog, PWM, ...

    ② CDD - Complex Device Drivers

    Module này thích hợp trong việc triển khai các chức năng non-standard (không theo tiêu chuẩn của AUTOSAR) trong BSW stack. Trên thực tế AUTOSAR là một tiêu chuẩn chung cho phần mềm phục vụ cho lĩnh vực Automotive, nên nó không thể cover hết được những trường hợp riêng biệt của từng hãng làm phần mềm. 

    Chính vì vậy có nhiều trường hợp mà các hãng sẽ triển khai một số chức năng mà AUTOSAR không hỗ trợ, CDD sẽ được sử dụng trong những trường hợp như vậy.

    Một trường hợp khác, một số chức năng yêu cầu ràng buộc về mặt thời gian, và yêu cầu thời gian thấp hơn thời gian tối thiểu của AUTOSAR OS cũng cần đặt vào tầng CDD, vì CDD giúp kết nối MCU với ứng dụng.

    ➤ Nhược điểm lớn nhất của tầng CDD là không theo tiêu chuẩn, và phụ thuộc vào application nhiều hơn là MCU, vì vậy code ở tầng này sẽ khó porting giữa các dòng chip khác nhau. 

    ③ ECU Abstraction Layer

    Tầng Abstraction giúp việc viết phần mềm cho ECU sẽ độc lập với phần cứng (Cả về các thành phần MCU cũng như các thiết bị ngoại vi bên ngoài kết nối với ECU). Tức là Application sẽ được Abstraction cung cấp các API để sử dụng và không cần quan tâm đến sự thay đổi của phần cứng (ECU hay MCU).

  • I/O Hardware Abstraction - Các thiết bị ngoại vi I/O có thể nằm trên chip hoặc trên board, việc cấu hình các chân của MCU cũng khá phức tạp. Tuy nhiên tầng Abstraction giúp đơn giản hóa việc cấu hình của tầng Application, bằng cách cung cấp các API để sử dụng I/O, Ví dụ - Pin_SetMode(pin, mode)
    Tầng này sẽ cung cấp các API không đổi như trên, nhưng nội dung của nó sẽ thay đổi theo phần cứng của ECU (Ví dụ các MCU khác nhau thì sẽ có số lượng chân khác nhau, tên các module quản lý chân khác nhau như GPIO, PORT, DIO, ...).
  • Communication Hardware Abstraction - Đối với các module truyền thông (như CAN, LIN, FlexRay, ...), tầng Application chỉ cần quan tâm việc truyền nhận dữ liệu, không cần quan tâm chân nào được sử dụng để kết nối, kết nối trên chip hay trên board, thậm chí không cần quan tâm loại bus giao tiếp nào được sử dụng. 
    Module này đảm bảo việc độc lập phần cứng như nói trên, cung cấp các API cho việc truyền/nhận dữ liệu.
  • Crypto Hardware Abstraction - Module này trừu tượng hóa chức năng Crypto bằng cách ẩn các thông tin về Crypto được sử dụng (Các thiết bị Internal/External hoặc các phần mềm cơ sở). Bởi vì Application không cần quan tâm đến việc loại Crypto nào được sử dụng, trên chip, board hay mã hóa bằng phần mềm.
  • Memory Hardware Abstraction - Module này trừu tượng hóa vị trí của thiết bị bộ nhớ được sử dụng. Application chỉ cần quan tâm đến dữ liệu, không có quyền kiểm soát đối với thiết bị bộ nhớ được chọn là Internal/External, ROM/Flash/SDCard, ...
  • Onboard Device Abstraction - Module này trừu tượng hóa các thiết bị trên board mạch cụ thể, cung cấp các API để giao tiếp với các thiết bị trên Board như Sensors, Actuators.

    Services Layer

  • Communication Services - Đây là một nhóm các module dành cho các giao thức truyền thông mạng trên xe, cung cấp giao diện thống nhất cho mạng trên xe để giao tiếp dữ liệu, đồng thời ẩn các thuộc tính giao thức và thuộc tính message khỏi tầng Application.
    Communication Service Interfaces với Communication Drivers (MCAL), cùng với sự giúp đỡ của Communication Hardware Abstraction. Đây là sự độc lập phần cứng với ECU và MCU, nhưng phụ thuộc vào bus type. Vì vậy, một phần của tầng Service có thể thay đổi nếu bus type thay đổi (CAN, FlexRay, ...).
  • Off board Communication Services - Đây là một nhóm các module dành cho phương tiện để giao tiếp với các clients bên ngoài thông qua mạng không dây. Nó bao gồm 3 khối được sử dụng với những chức năng khác nhau. Module này cung cấp một giao diện thống nhất cho mạng Ethernet không dây bằng cách ẩn các thuộc tính giao thức và message.
  • Memory Services - Service này bao gồm một module, NVRAM Manager. Nó chịu trách nhiệm quản lý dữ liệu non-volatile (đọc/ghi từ các memory drivers khác nhau). Application yêu cầu lưu trữ dữ liệu trong bộ nhớ để sử dụng sau này, vì vậy module này được sử dụng để triển khai điều này theo một cách thống nhất và cung cấp khả năng trừu tượng hóa từ các vị trí bộ nhớ cấp thấp hơn.
    Memory Services cung cấp cơ chế để lưu trữ, load, checksum, ... dữ liệu non-volatile, có khả năng cấu hình cao và độc lập với phần cứng ECU.
  • System Services - Đây là một nhóm các module có thể được sử dụng bởi các module của tất cả các layer, ví dụ như RTOS, Error Messager. Các services này có thể phụ thuộc vào một số MCU hoặc có thể hỗ trợ các tính năng đặc biệt của MCU (như Time Service), một phần phụ thuộc vào phần cứng ECU và Application.
    Trên đây là các thuật ngữ về BSW, có một số thuật ngữ sẽ được giải thích chi tiết sau này. 

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

                                        

Đăng nhận xét

4 Nhận xét