CAN Interface (CanIf) — AUTOSAR Communication Stack 중 CAN 하드웨어 추상화 모듈. 상위의 PduR·COM이 요구하는 데이터·제어 흐름을 CAN 하드웨어 독립적인 균일 인터페이스로 제공한다. Controller·Transceiver·on-chip/on-board 구성 차이를 숨기며, PDU id와 하드웨어 객체 핸들(HOH) 사이의 매핑을 담당한다.
기능
- CAN Driver 서비스의 상위 통신 계층용 표현 — PduR에는 CanIf만 보이고 Can은 보이지 않음
- CAN 하드웨어 독립 작업 수행 — 모든 μC·CAN controller 종류·Transceiver 종류에 대해 공통 처리
- 다양한 CAN HW 장치 종류(Controller·Transceiver, on-chip·on-board)에 대한 단일 인터페이스 제공
주요 데이터·제어 흐름
- Transmit request processing — 상위 PDU의 송신 요청을 Can driver로 변환
- Transmit confirmation — 송신 완료 통지를 상위로 전달
- Receive indication — 수신 PDU를 상위로 전달
- Error notification — 에러 상태를 상위로 통지
- Start/Stop of a CAN controller
- Waking up / participating on a network — CanTrcv 통한 모드 전환 포함
- Bus-off 발생 시 CanSM으로 전달
PDU id ↔ HW Object Handle 매핑
CanIf의 핵심 추상화는 PDU identifier를 Hardware Object Handle(HOH)로 변환하는 것이다.
용어
| 약어 | 원어 | 의미 |
|---|---|---|
| HOH | Hardware Object Handle | HW mailbox에 대한 참조 핸들 (HRH/HTH의 공통 상위 개념) |
| HRH | Hardware Receive Handle | 수신 mailbox를 가리키는 HOH |
| HTH | Hardware Transmit Handle | 송신 mailbox를 가리키는 HOH |
Hardware Object (Mailbox)
- CAN controller 내부에 존재하는 메모리 버퍼
- Configuration에 따라 송신·수신 메시지 버퍼로 사용
- Mailbox = CAN RAM 구조, PDU buffer 구조체로 CanID / DLC / Data를 보유
Hardware Object Handle
- Hardware 추상화 개념
- CanIf는 상위에서 받은 PDU를 HOH로 변환한 뒤 CAN Driver interface를 호출
- Outlet range = 전달될 RX L-PDU의 범위
Basic CAN vs Full CAN
CAN Controller HW 설계의 두 종류. CanIf는 양쪽을 모두 지원한다.
| 항목 | Basic CAN Controller | Full CAN Controller |
|---|---|---|
| 메시지 필터링 | CPU가 처리 — 모든 수신·ACK·파싱에 대해 인터럽트 발생 | HW에서 필터링·파싱 수행 |
| 메시지 저장 | 단일 또는 소수 RX 버퍼 | 여러 mailbox가 특정 메시지 정보(ID 등)를 저장 |
| CPU 부하 | 높음 — 매 메시지마다 인터럽트·판별 필요 | 낮음 — 일치하는 mailbox에만 통지 |
| CanIf 매핑 | 소수의 HOH가 다수 PDU를 핸들 | 각 mailbox가 고정 PDU와 1:1로 매핑되기 쉬움 |
Tx / Rx 경로
PDU 방향별 흐름:
[Tx] PduR → CanIf_Transmit(PDU) → HTH 조회 → Can_Write(HOH, data)
[Rx] Can RX IRQ → Can_IReceiveHandler → CanIf_RxIndication(HRH, PDU) → PduRBus-off 같은 에러는 CAN Driver가 감지해 CanIf를 거쳐 CanSM으로 전달된다.