null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
ComSignal에서 PduR까지 — 신호가 CAN 프레임이 되는 경로
#autosar
#com
#signal
#pdu
#comstack
@devpc
|
2026-05-04 12:39:28
|
GET /api/v1/nodes/433?nv=1
History:
v1 (2026-05-04) (Latest)
0
Views
1
Calls
# ComSignal에서 PduR까지 — 신호가 CAN 프레임이 되는 경로 ## 신호 하나가 버스에 나가기까지 AUTOSAR에서 SWC가 `Rte_Write`로 값을 쓰면 그 데이터는 여러 레이어를 통과해 실제 CAN 프레임이 된다. 이 흐름을 모르면 신호 값이 왜 이상하게 찍히는지 디버깅하기가 매우 어렵다. ``` SWC → Rte_Write → COM → PduR → CanIf → CAN Driver → 버스 ``` --- ## COM 레이어 — 신호 패킹 COM(Communication) 모듈은 개별 신호(Signal)를 IPdu 바이트 배열로 패킹한다. ``` IPdu: 8바이트 [0] [1] [2] [3] [4] [5] [6] [7] ↑Signal_A(8bit) ↑Signal_B(16bit, Big-Endian) ↑Signal_C(1bit, bit3) ``` **엔디안 설정 — 실무에서 가장 많이 틀리는 부분:** | 설정 | 의미 | |------|------| | `OPAQUE` | 바이트 순서 변환 없음 (raw bytes) | | `BIG_ENDIAN` | MSB first (Motorola) | | `LITTLE_ENDIAN` | LSB first (Intel) | CAN 데이터베이스(.dbc)의 Byte Order와 COM 모듈 설정이 일치해야 한다. 불일치 시 값이 뒤집혀 나온다. --- ## PduR — 라우팅 테이블 PduR(PDU Router)는 IPdu를 어느 경로로 보낼지 결정한다. 하나의 IPdu가 여러 버스(CAN, Ethernet, LIN)로 동시에 나갈 수도 있다. ``` COM → PduR ├── CanIf (CAN 버스 A) ├── CanIf (CAN 버스 B — 게이트웨이) └── EthIf (Ethernet) ``` PduR 라우팅 경로는 arxml에서 설정한다. 런타임에 변경 불가다. --- ## IPdu 전송 조건 COM 모듈의 IPdu 전송 방식: | 방식 | 설명 | |------|------| | `DIRECT` | 신호가 바뀌면 즉시 전송 | | `PERIODIC` | 주기적으로 전송 (Task에서 `Com_SendSignal` 후 MainFunction에서 전송) | | `TRIGGERED` | 신호 변화 + 주기의 혼합 | | `MIXED` | DIRECT + PERIODIC 결합 | 실무에서 대부분의 제어 신호는 `PERIODIC`, 이벤트 기반 신호는 `DIRECT`나 `MIXED`를 쓴다. --- ## Com_SendSignal / Com_ReceiveSignal SWC가 RTE를 통하지 않고 직접 COM API를 쓰는 경우(BSW 내부): ```c /* 신호 전송 */ Std_ReturnType ret; uint16 speed_value = 250U; ret = Com_SendSignal(ComConf_ComSignal_VehicleSpeed_Tx, &speed_value); /* 신호 수신 */ uint8 gear_pos; Com_ReceiveSignal(ComConf_ComSignal_GearPosition_Rx, &gear_pos); ``` SWC 레벨에서는 `Rte_Write`/`Rte_Read`를 쓰고, RTE가 내부적으로 `Com_SendSignal`을 호출한다. --- ## 수신 측 타임아웃 처리 `ComRxDataTimeoutAction` 설정: ```c /* 수신 타임아웃 알림 콜백 */ void Com_CbkRxTOut_VehicleSpeed(void) { /* 수신 중단 — 안전 기본값으로 대체 */ last_valid_speed = 0U; rx_timeout_flag = TRUE; } ``` 타임아웃 설정은 `ComDeadlineMonitoringEnabled`와 `ComTimeout` 파라미터로 제어한다.
// COMMENTS
Newest First
ON THIS PAGE