장치 속성을 설정/가져오기 위한 Netlink 인터페이스
CAN 장치는 netlink 인터페이스를 통해 구성되어야 합니다. 지원되는 netlink 메시지 유형은 "include/linux/can/netlink.h"에 정의되고 간략하게 설명되어 있습니다. IPROUTE2 유틸리티 제품군의 "ip" 프로그램에 대한 CAN 링크 지원이 가능하며 아래와 같이 사용할 수 있습니다.
CAN 장치 속성 설정:
$ ip link set can0 type can help Usage: ip link set DEVICE type can [ bitrate BITRATE [ sample-point SAMPLE-POINT] ] | [ tq TQ prop-seg PROP_SEG phase-seg1 PHASE-SEG1 phase-seg2 PHASE-SEG2 [ sjw SJW ] ] [ dbitrate BITRATE [ dsample-point SAMPLE-POINT] ] | [ dtq TQ dprop-seg PROP_SEG dphase-seg1 PHASE-SEG1 dphase-seg2 PHASE-SEG2 [ dsjw SJW ] ] [ loopback { on | off } ] [ listen-only { on | off } ] [ triple-sampling { on | off } ] [ one-shot { on | off } ] [ berr-reporting { on | off } ] [ fd { on | off } ] [ fd-non-iso { on | off } ] [ presume-ack { on | off } ] [ cc-len8-dlc { on | off } ] [ restart-ms TIME-MS ] [ restart ] Where: BITRATE := { 1..1000000 } SAMPLE-POINT := { 0.000..0.999 } TQ := { NUMBER } PROP-SEG := { 1..8 } PHASE-SEG1 := { 1..8 } PHASE-SEG2 := { 1..8 } SJW := { 1..4 } RESTART-MS := { 0 | NUMBER }
CAN 장치 세부 정보 및 통계 표시:
$ ip -details -statistics link show can0 2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP qlen 10 link/can can <TRIPLE-SAMPLING> state ERROR-ACTIVE restart-ms 100 bitrate 125000 sample_point 0.875 tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 sja1000: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1 clock 8000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 41 17457 0 41 42 41 RX: bytes packets errors dropped overrun mcast 140859 17608 17457 0 0 0 TX: bytes packets errors dropped carrier collsns 861 112 0 41 0 0
위 출력에 대한 추가 정보:
- "<삼중 샘플링>"
선택한 CAN 컨트롤러 모드(LOOPBACK, LISTEN-ONLY 또는 TRIPLE-SAMPLING) 목록을 표시합니다.
- "상태 오류-활성"
CAN 컨트롤러의 현재 상태: "ERROR-ACTIVE", "ERROR-WARNING", "ERROR-PASSIVE", "BUS-OFF" 또는 "STOPPED"
- "다시 시작-ms 100"
자동 재시작 지연 시간. 0이 아닌 값으로 설정된 경우, 지정된 지연 시간(밀리초) 이후 버스 오프 조건이 발생하는 경우 CAN 컨트롤러의 재시작이 자동으로 트리거됩니다. 기본적으로는 꺼져 있습니다.
- "비트 전송률 125000 샘플 포인트 0.875"
비트/초 단위의 실제 비트 전송률과 0.000..0.999 범위의 샘플 포인트를 표시합니다. 커널에서 비트 타이밍 매개변수 계산이 활성화된 경우(CONFIG_CAN_CALC_BITTIMING=y) "비트 전송률" 인수를 설정하여 비트 타이밍을 정의할 수 있습니다. 선택적으로 "샘플 포인트"를 지정할 수 있습니다. 기본적으로 CIA 권장 샘플 포인트를 가정하면 0.000입니다.
- "tq 125 prop-seg 6 위상-seg1 7 위상-seg2 2 sjw 1"
ns 단위의 시간 할당량, 전파 세그먼트, 위상 버퍼 세그먼트 1 및 2, tq 단위의 동기화 점프 폭을 표시합니다. Bosch CAN 2.0 사양( http://www.semiconductors.bosch.de/pdf/can2spec.pdf 의 8장 참조)에서 제안한 대로 하드웨어 독립적 형식으로 CAN 비트 타이밍을 정의할 수 있습니다 .
- "sja1000: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1 클럭 8000000"
CAN 컨트롤러의 비트 타이밍 상수(여기서는 "sja1000")를 보여줍니다. 시간 세그먼트 1과 2의 최소값과 최대값, tq 단위의 동기화 점프 폭, 비트레이트 프리스케일러 및 CAN 시스템 클럭 주파수(Hz)입니다. 이러한 상수는 사용자 공간에서 사용자 정의(비표준) 비트 타이밍 계산 알고리즘에 사용될 수 있습니다.
- "다시 시작된 버스 오류 중재 손실 오류 경고 오류 통과 버스 끄기"
재시작, 버스 및 중재 손실 오류 수를 표시하며 상태는 오류 경고, 오류 수동 및 버스 끄기 상태로 변경됩니다. RX 오버런 오류는 표준 네트워크 통계의 "오버런" 필드에 나열됩니다.
CAN 비트 타이밍 설정
CAN 비트 타이밍 매개변수는 인수 "tq", "prop_seg", "phase_seg1", "phase_seg2" 및 "sjw"를 지정하는 Bosch CAN 2.0 사양에서 제안된 대로 항상 하드웨어 독립적인 형식으로 정의될 수 있습니다.
$ ip link set canX type can tq 125 prop-seg 6 \ phase-seg1 7 phase-seg2 2 sjw 1
커널 옵션 CONFIG_CAN_CALC_BITTIMING이 활성화된 경우 비트 전송률이 "bitrate" 인수로 지정되면 CIA 권장 CAN 비트 타이밍 매개변수가 계산됩니다.
$ ip link set canX type can bitrate 125000
이는 표준 비트 전송률을 사용하는 가장 일반적인 CAN 컨트롤러에서는 제대로 작동하지만 이국적인 비트 전송률이나 CAN 시스템 클럭 주파수에서는 실패 할 수 있습니다. CONFIG_CAN_CALC_BITTIMING을 비활성화하면 일부 공간이 절약되고 사용자 공간 도구가 비트 타이밍 매개변수를 단독으로 결정하고 설정할 수 있습니다. 이러한 목적으로 CAN 컨트롤러 특정 비트 타이밍 상수를 사용할 수 있습니다. 다음 명령으로 나열됩니다.
$ ip -details link show can0 ... sja1000: clock 8000000 tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
CAN 네트워크 장치 시작 및 중지
CAN 네트워크 장치는 "ifconfig canX up/down" 또는 "ip link set canX up/down" 명령을 사용하여 평소처럼 시작하거나 중지됩니다. 오류가 발생하기 쉬운 기본 설정을 피하기 위해 시작하기 전에 실제 CAN 장치에 대해 적절한 비트 타이밍 매개변수를 정의해야 한다는 점에 유의하십시오 .
$ ip link set canX up type can bitrate 125000
CAN 버스에서 너무 많은 오류가 발생한 경우 장치는 "버스 꺼짐" 상태로 들어갈 수 있습니다. 그러면 더 이상 메시지가 수신되거나 전송되지 않습니다. 자동 버스 오프 복구는 "restart-ms"를 0이 아닌 값으로 설정하여 활성화할 수 있습니다. 예:
$ ip link set canX type can restart-ms 100
또는 애플리케이션이 CAN 오류 메시지 프레임을 모니터링하여 "버스 꺼짐" 조건을 인식하고 적절한 경우 다음 명령을 사용하여 다시 시작할 수 있습니다.
$ ip link set canX type can restart
다시 시작하면 CAN 오류 메시지 프레임도 생성됩니다( 네트워크 문제 알림 참조 ).