AUTOSAR의 3가지 인터페이스
AUTOSAR와 인터페이스
AUTOSAR (AUTOmotive Open System ARchitecture)는 표준화된 차량 개방형 SW 아키텍처입니다. 하드웨어 의존성이 높은 자동차 SW를 HW와 분리하여 SW 재사용성을 높이는 것을 목적으로 합니다. 여러가지 표준을 통해 이를 해결하려고 하였고 특히 인터페이스를 표준화하였습니다.
AUTOSAR는 그림과 같이 계층형 아키텍처를 사용합니다. 이러한 계층형 아키텍처를 사용하려면 인터페이스를 표준화하는 게 필수적입니다. 인터페이스는 그림에서 계층과 계층이 맞닿은 면입니다. 인터페이스를 표준화하는 건 실생활에서도 많이 찾아볼 수 있습니다. 예를 들어, USB가 있습니다.
노트북은 USB 포트를 가지고 있어 다양한 회사에서 제작한 USB를 연결할 수 있습니다. USB 입장에서 보면, 하나의 USB로 여러 노트북에 연결하여 사용할 수 있습니다. 이게 가능한 이유는 USB 인터페이스를 표준화하였기 때문입니다. 노트북 제작자도, USB 제작자도 표준화된 인터페이스를 따라 제품을 만들었기 때문에 서로 다른 노트북에 서로 다른 USB를 연결하는 게 가능합니다.
소프트웨어 세계에서도 마찬가지입니다. 연결 부위인 인터페이스를 정의하면 다양한 회사에서 만든 SW를 서로 연결하는 게 가능합니다. 그럼 구체적으로 소프트웨어 세계에서 인터페이스는 무엇일까요. C 언어에서 인터페이스는 함수 입니다. 대표적으로 C언어 표준 라이브러리 함수인 printf()를 생각해볼 수 있습니다. https://en.cppreference.com/w/c/io/fprintf 를 보면 printf()가 어떻게 생겼는지, 어떤 기능을 하는지 나와있습니다. 표준에 구현은 나와있지 않습니다. 구현은 표준을 보고 이를 만드는 회사의 몫입니다.
다시 돌아와서, AUTOSAR에서도 인터페이스를 정의하여 사용하고 있습니다. 인터페이스를 사용하여 HW 독립적인 SW를 만들고 SW 재사용성을 높이려 하였습니다. AUTOSAR에서는 아래의 3가지 인터페이스를 정의하고 있습니다.
- AUTOSAR Interface
- Standardized Interface
- Standardized AUTOSAR Interface
AUTOSAR Interface
AUTOSAR에서는 애플리케이션을 만드는 기본 단위로 SWC (Software Component)를 사용합니다. SWC는 하나의 ECU에서 수행되는 기본 단위이며 그 안에는 여러 함수가 들어갈 수 있습니다. SWC를 나누어 ECU에 분배할 수는 없습니다. 하지만, 서로 다른 SWC는 같은 ECU에서 분배될 수도 있고 서로 다른 ECU에 분배될 수도 있습니다. 이게 가능한건 AUTOSAR에서는 HW 독립적인 SW 개발을 위해 HW가 정해져있지 않은 상태에서 애플리케이션을 개발하기 때문입니다.
AUTOSAR는 추상화 레벨이 높은 인터페이스가 필요했고 AUTOSAR 인터페이스를 새롭게 정의하였습니다. AUTOSAR 인터페이스에는 데이터를 송신하고 수신하는 Sender-Receiver 인터페이스와 기능을 요청하고 수행하는 Client-Server 인터페이스가 있습니다.
SWC 간에 데이터를 교환하는 경우 Sender-Receiver 인터페이스를 사용하여 구현합니다. 후에 HW가 정해졌을 때 SWC가 같은 ECU에 분배됐으면 함수 호출로 구현하고 다른 ECU에 분배됐으면 CAN 통신 등으로 구현합니다. 이런 방식을 사용하면 HW가 달라져도 설정만 변경하면 SW를 재사용할 수 있습니다.
Standardized Interface
Standardized 인터페이스는 BSW 내부에서 사용됩니다. BSW 모듈 사이에서 사용하며 C언어 API로 정의되는 인터페이스 입니다. BSW는 하나의 ECU에서 수행되므로 AUTOSAR 인터페이스와 같은 추상화된 인터페이스를 사용하지 않고 함수 이름을 정해주고 이를 Standardized Interface라 불러 사용합니다.
Standardized AUTOSAR Interface
Service 레이어에는 표준화된 AUTOSAR 인터페이스를 사용합니다. AUTOSAR 인터페이스와 마찬가지고 Sender-Receiver와 Client-Server 인터페이스를 사용하는데 인터페이스의 이름이 정해져있습니다. 애플리케이션이 진단이나 메모리 보호 서비스 등을 사용할 때 어떤 서비스가 있는지 알아야 사용할 수 있습니다. 서비스 레이어에는 정해져 있는 서비스가 제공됩니다.