본문으로 건너뛰기

CAN-FD

AVS300 은 CAN 채널 2개(can0·can1)를 장비 후면 COM 단자로 내보냅니다. 단자로 나오는 두 채널에는 TI TCAN1044(CAN FD 지원) 트랜시버가 실장되어 있고, 종단 저항 120Ω 은 딥스위치로 채널별로 켤 수 있습니다.

단자 위치 — 후면 COM 블록​

후면에는 단자 블록이 두 개 있습니다. CAN 은 위쪽 COM 블록의 오른쪽 열입니다 (아래쪽 IN/OUT 블록은 카메라 외부 동기 입력·디지털 IO 용입니다).

테두리단자신호
🔴 빨강CAN0L · CAN0Hcan0 차동 한 쌍
🟢 초록GND접지 기준 (아래 참고)
🔵 파랑CAN1L · CAN1Hcan1 차동 한 쌍

같은 COM 블록의 왼쪽 열(232R·232T·GND·485A·485B)은 RS-232 / RS-485 이며 CAN 과 무관합니다.

GND 를 연결해야 하나

CAN 은 차동 신호라 짧은 배선에서는 두 가닥(H·L)만으로도 통신됩니다. 다만 노드끼리 접지 전위가 크게 다르면 공통모드 범위를 벗어나므로, 서로 다른 전원을 쓰는 장비와 연결할 때는 GND 를 함께 잇는 것을 권장합니다.

종단 저항 — 딥스위치 SW6​

스위치 번호가 채널 번호와 어긋납니다
딥스위치종단되는 채널
1번can1
2번can0

can0 을 종단하려면 2번을 켜야 합니다. OFF 면 그 채널에는 종단 저항이 없습니다.

종단은 버스의 물리적 양 끝에 정확히 2개만 있어야 합니다.

  • AVS300 이 버스의 끝단이면 → 해당 채널 스위치 ON
  • AVS300 이 중간 노드면 → OFF (켜면 세 번째 종단이 되어 버스를 망칩니다)
  • 장비 두 대만 케이블로 직결해 시험할 때는 → 양쪽 ON

링크 올리기​

# 인터페이스 확인
ip -brief link show can0 can1

# 500 kbit/s 로 올리기 (클래식 CAN)
sudo ip link set can0 down
sudo ip link set can0 type can bitrate 500000 loopback off fd off berr-reporting on restart-ms 0
sudo ip link set can0 up

sudo ip link set can1 down
sudo ip link set can1 type can bitrate 500000 loopback off fd off berr-reporting on restart-ms 0
sudo ip link set can1 up

# 상태 확인 — ERROR-ACTIVE 이고 LOOPBACK 플래그가 없어야 정상입니다
ip -details link show can0
loopback off fd off 를 반드시 명시하십시오

SocketCAN 의 loopback·fd 플래그는 링크를 내리고 다시 설정해도 남습니다. loopback 이 켜진 채로 cansend 하면 프레임이 컨트롤러 내부에서 그대로 돌아와 에러 0으로 보입니다 — 케이블이 빠져 있어도, 버스가 죽어 있어도 정상처럼 보입니다.

판정은 ip -details link show can0 출력의 can <...> 플래그로 하십시오. 여기에 LOOPBACK 이 있으면 그 시험 결과는 버스에 대해 아무것도 증명하지 않습니다.

CAN FD — 데이터 구간 비트율​

CAN FD 는 중재 구간(ID·중재)과 데이터 구간을 서로 다른 비트율로 보냅니다. 데이터 구간 비트율은 dbitrate 로 지정하고, 배선·종단 요구사항은 클래식 CAN 과 같습니다.

sudo ip link set can0 down
sudo ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on berr-reporting on restart-ms 0
sudo ip link set can0 up

# 확인 — 플래그에 FD 가 있고 dbitrate 가 지정한 값이어야 합니다
ip -details link show can0
비트율 전환은 보내는 쪽이 프레임마다 켭니다 (BRS)

dbitrate 를 설정해 두어도, BRS(Bit Rate Switch) 비트가 없는 프레임은 데이터 구간까지 중재 비트율로 나갑니다. cangen 에서는 -b, 응용 프로그램에서는 CANFD_BRS 플래그입니다.

받은 프레임에 BRS 가 실제로 섰는지는 candump -x 로 봅니다 — 플래그 칸의 B 가 BRS 입니다.

can1 RX B - 123 [64] ... ← BRS 켜짐 (데이터 구간이 dbitrate 로 전환됨)
can1 RX - - 123 [64] ... ← BRS 없음 (64바이트를 중재 비트율로 보냈다)

🔴 BRS 가 없어도 통신은 성공합니다 — 느려지기만 합니다. 그래서 "잘 되는데 느리다" 는 증상이 나오면 에러를 찾기 전에 이 플래그부터 확인하십시오.

실측값​

can0↔can1 직결, 64바이트 FD 프레임(BRS 켬), 각 방향 100 프레임:

데이터 구간dsample-point결과프레임당 버스 시간
2 Mbit/s0.750100 / 100 양방향 · 에러 0340 µs
5 Mbit/s0.750100 / 100 양방향 · 에러 0—
8 Mbit/s0.600100 / 100 양방향 · 에러 0127 µs
8 Mbit/s (BRS 끔)—100 / 100 · 에러 01,188 µs

마지막 두 줄이 BRS 의 효과입니다 — 같은 설정·같은 64바이트인데 9배 차이가 납니다 (BRS 가 없으면 데이터 512비트를 500 kbit/s 로 보내기 때문입니다).

측정 조건

dsample-point 는 ip 가 자동으로 고른 값입니다(8 Mbit/s 에서 0.600). 위 값은 짧은 케이블 2노드 기준이며, 실제 버스에서 쓸 수 있는 최고 데이터 비트율은 케이블 길이·분기·종단이 정합니다 — 길이가 늘면 8 Mbit/s 는 통하지 않을 수 있습니다. 프레임당 시간은 수신측 프레임 간격으로 측정했습니다.

통신 확인​

두 채널을 케이블로 서로 연결하면 장비 한 대로 확인할 수 있습니다 (CAN0H↔CAN1H, CAN0L↔CAN1L, 딥스위치 1·2번 모두 ON).

# 수신 쪽 (터미널 1)
candump can1

# 송신 쪽 (터미널 2) — 100 프레임
cangen can0 -I 123 -L 8 -n 100 -g 2

# 또는 한 프레임만
cansend can0 123#DEADBEEF

아래는 사내 실측값입니다 — can0↔can1 을 짧은 케이블로 직결하고 클래식 CAN(fd off)으로 시험했습니다. CAN FD 쪽 실측은 CAN FD — 데이터 구간 비트율에 있습니다.

비트율방향결과
500 kbit/scan0 → can1100 / 100 수신 · 에러 0
500 kbit/scan1 → can0100 / 100 수신 · 에러 0
1 Mbit/scan0 → can1100 / 100 수신 · 에러 0
1 Mbit/scan1 → can0100 / 100 수신 · 에러 0

200 프레임을 연속 전송했을 때 에러 프레임 0건, berr-counter tx 0 rx 0, 상태 ERROR-ACTIVE 였습니다.

에러를 읽는 법​

에러 프레임을 보려면 마스크를 붙여야 합니다. -e can0 만으로는 잡히지 않습니다.

아래 상태값은 restart-ms 0(자동 재시작 없음) 기준입니다. restart-ms 를 주면 컨트롤러가 스스로 복구를 반복하므로 상태가 한곳에 머물지 않습니다 — 진단할 때는 0 으로 두십시오.

candump -e can0,0:0,'#FFFFFFFF'
나오는 것뜻조치
에러 프레임 없음 · 수신됨정상—
protocol-violation{{}{acknowledge-delimiter}} + bus-error
→ ERROR-PASSIVE
정상입니다. 프레임은 제대로 나갔고 응답할 상대가 버스에 없을 뿐입니다상대 노드를 연결하십시오
tx-dominant-bit-error🔴 물리단 고장. 보낸 신호가 트랜시버를 통해 되돌아오지 않습니다아래 참조
tx-dominant-bit-error 가 나오면

배선(H·L 반대로 연결·단선·단락)을 먼저 확인하고, 배선이 맞다면 장비의 이미지 판을 확인하십시오.

. /etc/avs-release && echo "$AVS_RELEASE"

r39.2.1-20260916 이상이면 정상입니다. 그보다 이전 이미지를 쓰는 장비에서는 can0 이 이 증상을 보일 수 있습니다. 이 문제의 수정은 부트로더 영역에 있어 운영체제에서 고칠 수 없습니다 — 최신 이미지로 다시 플래시해야 반영됩니다.

문제 해결​

증상확인할 것
에러 없이 너무 잘 된다ip -details link show 에 LOOPBACK 플래그가 남아 있지 않은지
CAN FD 인데 기대만큼 안 빠르다보내는 프레임에 BRS 가 켜져 있는지 — candump -x 의 플래그 칸에 B 가 있어야 합니다. 없으면 데이터 구간도 중재 비트율로 나갑니다
FD 프레임을 받는 쪽이 못 읽는다양쪽 dbitrate 와 fd on 이 같은지. 한쪽만 FD 면 통신되지 않습니다
통신은 되는데 에러가 간간이 난다종단 저항 개수 — 버스 전체에 정확히 2개인지 (SW6 번호가 채널과 어긋납니다)
비트율을 바꿨는데 반영이 안 된다링크를 내린 뒤 type can 설정을 다시 주고 올려야 합니다
ERROR-PASSIVE 에서 안 돌아온다링크를 내렸다 올리십시오. restart-ms 100 을 주면 자동 복구합니다