udspcanlinux-kerneliso-tpembedded

[Multi-Protocol Sensor Acquisition] UDS 프로토콜 연동 및 PCAN Chardev 드라이버 기반 하드웨어 안정화

2 min read

기존 동기식 OBD 폴링 아키텍처의 병목을 해소하기 위해 비동기 UDS 상태 머신을 도입함. 또한, 임베디드 리눅스 환경에서의 타이밍 이슈와 Bus-off 문제를 근본적으로 해결하기 위해 통신 드라이버 계층을 전면 교체함.

[C++ / UDS Protocol] 비동기 상태 머신 기반 다중 프레임(Multi-frame) 파서 아키텍처

  • 다중 ECU를 대상으로 빠른 속도로 데이터를 수집하기 위해 진단 프로토콜 파이프라인을 비동기식으로 재설계함.
  • 기존의 블로킹 방식 OBDInterface를 제거하고, 상태 머신(State Machine) 기반의 UDSParser 신규 구현.
  • ISO-TP 규격에 맞춘 멀티 프레임(Multi-frame) 조립 및 Flow Control(0x30) 자동 응답 송신 로직 연동.
  • 시스템 전반의 네이밍 컨벤션을 OBD에서 UDS로 개편하고, 설정 모듈에 UDS 특화 프로토콜 핸들러 적용.

[Linux / Kernel Driver] PCAN-Basic 드라이버 교체 및 udev 런타임 프로토콜 제어

  • 임베디드 보드에서 발생하는 고질적인 네트워크 스택 불안정성을 우회하기 위해 전용 커널 드라이버를 통합함.
  • SocketCAN에서 PCAN-Basic (Chardev) 커널 드라이버로 인터페이스 전면 마이그레이션.
  • 메인라인 peak_usb 커널 모듈을 블랙리스트 처리하고, 맞춤형 udev 규칙(45-pcan.rules, 80-can.rules) 적용.
  • systemd 서비스 및 start_scanner.sh 쉘 스크립트를 작성하여 J1939(250k) 및 UDS(500k) 런타임 프로토콜 동적 전환 배포 환경 구축.

[SocketCAN / Hardware] 물리 계층 하드웨어 오류 필터링 및 동적 통신 모드 분기

  • 물리 계층의 간헐적 오류에 대한 모니터링을 강화하고, 통신 모드에 따라 하드웨어 설정을 동적으로 변경함.
  • CAN_RAW_ERR_FILTER를 활성화하여 컨트롤러 상태, ACK 실패 및 Bus-off 등의 하드웨어 에러 프레임 핸들링 추가.
  • 버스 헬스 상태(Active, Warning, Passive, Bus-off)를 추적하는 SocketCANBusState 열거형 설계 및 자동 복구 메커니즘 연동.
  • UDS(500k) 진단 요청 송신을 위해 Listen-Only 모드를 해제하고, J1939(250k) 환경에서는 패시브 스캐닝을 위해 Listen-Only 모드를 유지하도록 분기 제어.