티스토리 뷰
반응형
🚗 AUTOSAR (AUTomotive Open System ARchitecture)의 데이터 통신 계층(Communication Stack)은 ECU 간 네트워크 통신을 표준화하기 위해 구성됩니다.
AUTOSAR의 통신 스택은 각 계층마다 특정 역할을 담당하는 모듈(Module)로 구성되며, 아래와 같은 계층 구조를 가집니다.
1. AUTOSAR 통신 스택 개요
📌 계층별 구조
Application Layer | 응용 계층 |
Runtime Environment (RTE) | RTE |
Communication Services (COM, PDUR, DCM, SoAd) | 통신 서비스 계층 |
Communication Hardware Abstraction (CanIf, LinIf, FrIf, EthIf) | 통신 서비스 추상화 계층 |
Microcontroller Abstraction Layer (CAN Driver, FlexRay Driver, Ethernet Driver) | MCAL |
Hardware (FlexRay, CAN, LIN, Ethernet) | 물리 계층 |
2. 각 계층별 모듈 설명
AUTOSAR 통신 스택의 각 계층별 주요 모듈을 설명하겠습니다.
1️⃣ 응용 계층 (Application Layer)
- 차량의 ECU가 수행하는 고유 기능(예: 엔진 제어, 브레이크 제어, ADAS, 인포테인먼트 등)이 포함됨
- 응용 계층은 네트워크 통신을 직접 수행하지 않음
- RTE (Runtime Environment)를 통해 데이터를 송수신함
✅ 모듈
- 사용자 애플리케이션(User Application): 특정 ECU 기능을 수행하는 애플리케이션 코드
- Sensor & Actuator Logic: 센서 데이터 처리 및 액추에이터 제어
2️⃣ RTE (Runtime Environment)
- 응용 계층과 통신 서비스 계층(COM 등) 간 인터페이스 역할
- 응용 계층이 네트워크 프로토콜(CAN, LIN, Ethernet 등)에 의존하지 않고 메시지를 송수신할 수 있도록 함
✅ 모듈
- RTE (Runtime Environment): ECU 내부에서 애플리케이션 간 데이터 교환 관리
- AUTOSAR Interface (ARIF): ECU 간 표준 인터페이스 제공
✅ 예제: 센서 데이터 전송
cpp
void SendSensorData(uint16_t sensorValue) { Rte_Write_SensorData(sensorValue); // RTE를 통해 데이터 전송 }
3️⃣ 통신 서비스 계층 (Communication Services Layer)
- 네트워크 데이터 송수신을 제어하는 핵심 계층
- 응용 계층이 네트워크 프로토콜에 직접 접근하지 않고도 통신 가능하도록 지원
- 다양한 네트워크 프로토콜을 사용할 수 있도록 PDU Router와 COM 모듈이 메시지를 변환하여 처리
✅ 모듈
모듈명역할
COM (Communication Manager) | 응용 계층에서 요청한 데이터를 송수신하고, 네트워크 프로토콜에 맞게 변환 |
PDUR (PDU Router) | 데이터를 적절한 네트워크 프로토콜(CAN, LIN, Ethernet 등)로 라우팅 |
DCM (Diagnostic Communication Manager) | 차량 진단(OBD-II, UDS) 메시지 처리 |
SoAd (Socket Adapter) | TCP/IP, UDP 기반 Ethernet 통신 지원 |
✅ 예제: PDU Router를 통한 CAN 메시지 전송
cpp
PduInfoType pdu;
pdu.SduDataPtr = dataBuffer;
pdu.SduLength = sizeof(dataBuffer);
PduR_CanIfTransmit(PDU_ID_SENSOR_DATA, &pdu); // CAN 메시지 전송
4️⃣ 통신 하드웨어 추상화 계층 (Communication Hardware Abstraction Layer)
- 네트워크 프로토콜별 인터페이스를 제공 (CAN, LIN, FlexRay, Ethernet)
- 응용 계층이 하드웨어 차이를 신경 쓰지 않고 통신할 수 있도록 지원
- 상위 계층(PDUR, COM)에서 보낸 데이터를 네트워크 프레임으로 변환하여 하드웨어 드라이버로 전달
✅ 모듈
모듈명역할
CanIf (CAN Interface) | CAN 메시지 송수신 처리 |
LinIf (LIN Interface) | LIN 메시지 송수신 처리 |
FrIf (FlexRay Interface) | FlexRay 메시지 송수신 처리 |
EthIf (Ethernet Interface) | Ethernet 프레임 송수신 처리 |
✅ 예제: CAN 메시지 수신 처리
cpp
void CanIf_RxIndication(PduIdType PduId, PduInfoType* PduInfoPtr) { printf("CAN 메시지 수신: ID = %d, Data = %s\n", PduId, PduInfoPtr->SduDataPtr); }
5️⃣ MCAL (Microcontroller Abstraction Layer)
- 하드웨어 드라이버 레벨에서 네트워크 데이터를 직접 처리
- 하드웨어별 차이를 숨기고 AUTOSAR 표준 API를 제공
- 통신 컨트롤러(CAN Controller, FlexRay Controller 등)를 직접 제어
✅ 모듈
모듈명역할
CAN Driver | CAN 컨트롤러 직접 제어 |
FlexRay Driver | FlexRay 컨트롤러 직접 제어 |
LIN Driver | LIN 컨트롤러 직접 제어 |
Ethernet Driver | Ethernet 컨트롤러 직접 제어 |
✅ 예제: CAN 컨트롤러 초기화
cpp
void Can_Init(void) { Can_ConfigType canConfig; canConfig.baudRate = 500000; // 500 kbps 설정 Can_SetControllerMode(CAN_CONTROLLER_ID, CAN_MODE_START); }
6️⃣ 물리 계층 (Hardware Layer)
- 실제 네트워크 하드웨어(CAN, LIN, FlexRay, Ethernet 등)를 포함
- 신호를 전기적 신호(Bit)로 변환하여 전송
- CAN, LIN, FlexRay 등의 물리적인 데이터 링크 및 전송 속도를 결정
✅ 모듈
모듈명역할
CAN Bus | CAN 데이터 프레임을 실제 전기 신호로 변환하여 전송 |
LIN Bus | LIN 데이터 프레임을 신호로 변환 |
FlexRay Bus | FlexRay 프레임을 고속 데이터로 변환 |
Ethernet PHY | Ethernet 패킷을 물리적 신호로 변환 |
3. 정리
계층주요 모듈역할
응용 계층 | 사용자 애플리케이션 | ECU 기능 수행 |
RTE (Runtime Environment) | RTE | 응용 계층과 통신 계층 연결 |
통신 서비스 계층 | COM, PDUR, DCM, SoAd | 데이터 송수신 제어 |
통신 하드웨어 추상화 계층 | CanIf, LinIf, FrIf, EthIf | 네트워크 인터페이스 관리 |
MCAL (Microcontroller Abstraction Layer) | CAN Driver, FlexRay Driver, Ethernet Driver | 하드웨어 제어 |
물리 계층 | CAN, LIN, FlexRay, Ethernet | 실제 물리적 데이터 전송 |
🚗 AUTOSAR 통신 스택을 활용하면 ECU 간의 통신을 표준화하고, 다양한 네트워크 프로토콜을 손쉽게 지원할 수 있음!
개인적으로 학습하면서 정리한 내용입니다.
잘못된 내용이 있을 경우 알려주시면 확인 후 수정 및 반영하도록 하겠습니다.
오늘도 감사합니다.(__)>
'개발 > 그 외 개발관련' 카테고리의 다른 글
AUTOSAR Classic Platform과 Adaptive Platform의 상세 비교 (0) | 2025.01.20 |
---|---|
Google Test(GTest)란? (0) | 2025.01.16 |
CAN TP (CAN Transport Protocol) 설명 (0) | 2025.01.08 |
CMake 가이드 (0) | 2025.01.03 |
syscall(__NR_getpid)와 syscall(__NR_gettid) (0) | 2024.11.15 |