정의

CAN 동기화는 각 노드가 버스 신호의 에지를 보고 자신의 비트 시간 경계를 버스 위의 비트 흐름에 맞추는 절차다. 프레임 시작에서 한 번 일어나는 하드 동기화와, 프레임이 진행되는 동안 계속되는 재동기화 두 가지가 있다.[1]

CAN은 NRZ 코딩을 쓰므로 메시지 안에 클럭이 실리지 않고, 버스에도 별도의 클럭 선이 없다.[2] 노드마다 자기 발진기로 비트 시간을 만들어 내는 이상 두 노드의 비트 경계는 언제든 어긋날 수 있다. 그래서 수신 노드는 신호의 에지 하나만을 단서로 자기 타이밍을 계속 고쳐 나간다. 이 일은 비트 인코딩·디코딩과 함께 물리 코딩 서브레이어(PCS)가 맡는다.[3]

동기화가 조정하는 대상은 CAN 비트 타이밍의 두 위상 버퍼 세그먼트다. 위상 버퍼 세그먼트를 늘이거나 줄여 표본 추출 시점을 에지로부터 적절한 거리에 유지하는 것이 동기화의 전부다.

에지와 위상 오차

노드는 매 시간 양자마다 버스 레벨을 표본 추출해 직전 표본 추출 시점의 값과 비교한다. 직전 표본이 recessive였고 지금 시간 양자의 레벨이 dominant이면 에지가 검출된 것이다. 에지가 동기 세그먼트 안에서 발생하면 그 에지는 동기 상태이고, 아니라면 에지와 동기 세그먼트 끝 사이의 거리가 위상 오차가 된다. 단위는 시간 양자이며 부호가 붙는다 — 에지가 동기 세그먼트보다 늦게 오면 위상 오차는 양수, 이르게 오면 음수다.[1]

부호는 상대가 나보다 빠른지 느린지를 알려 준다. 위상 오차가 양수라는 것은 에지가 예상보다 늦게 왔다는 뜻이므로 상대의 비트 시간이 더 긴 쪽이고, 음수라면 더 짧은 쪽이다.[2]

동기화에 쓰는 에지

recessive에서 dominant로 가는 에지만 동기화에 쓰인다.[2] 반대 방향 에지는 무시된다. dominant에서 recessive로 가는 에지도 쓰는 선택지는 프로토콜 1.1판에서 1.2판으로 넘어올 때 없어졌고, 그 대가로 허용 가능한 발진기 오차 범위가 넓어졌다.[1]

하드 동기화

하드 동기화는 버스가 유휴 상태일 때 나타나는 첫 recessive에서 dominant로의 에지, 곧 프레임 시작(SOF)에서 일어난다.[2] 이때 노드는 위상 오차의 크기와 상관없이 비트 시간을 동기 세그먼트의 끝에서 다시 시작한다. 결과적으로 하드 동기화를 일으킨 그 에지는 재시작된 비트 시간의 동기 세그먼트 안에 놓이게 되고, 모든 수신자가 송신자에 맞춰진다.[1]

하드 동기화는 한 프레임에 한 번뿐이다. 프레임 안에서는 재동기화만 일어나며, 하드 동기화가 일어난 그 비트 시간에는 재동기화가 겹쳐 일어나지 않는다.

재동기화

프레임이 진행되는 동안 노드 사이의 클럭 차이는 계속 쌓인다. 재동기화는 그 누적을 주기적으로 털어 내어 하드 동기화가 만들어 준 정렬을 유지하는 장치다. 재동기화가 없으면 수신 노드는 발진기 편차가 쌓이는 대로 동기를 잃는다.[2]

보정 방향은 위상 오차의 부호가 정한다.[1]

위상 오차보정결과
양수 — 늦은 에지Phase_Seg1을 늘인다비트 시간이 길어진다
음수 — 이른 에지Phase_Seg2를 줄인다비트 시간이 짧아진다

보정 폭은 위상 오차의 크기와 같되, 한 번의 재동기화가 지울 수 있는 위상 오차의 상한인 재동기화 점프 폭(SJW)을 넘지 못한다. 위상 오차가 SJW보다 크면 SJW만큼만 보정되고 나머지는 남는다. 뒤집어 말하면 위상 오차의 크기가 SJW 이하일 때는 재동기화의 결과가 하드 동기화의 결과와 같아진다.

세그먼트가 늘어나거나 줄어드는 것은 그 비트 시간 동안뿐이다. 다음 비트 시간이 되면 두 위상 버퍼 세그먼트는 설정된 값으로 돌아간다.

두 가지 제한이 더 있다. 두 표본 추출 시점 사이에는 동기화가 한 번만 일어날 수 있다. 그리고 송신 중인 노드는 양의 위상 오차에 재동기화하지 않는다 — 자기가 내보낸 신호가 되돌아오며 생긴 지연에 자신을 다시 맞추면 안 되기 때문이다. 수신 노드는 평소대로 재동기화한다.

동기화에는 잡음을 걸러 내는 부수 효과도 있다. 에지와 표본 추출 시점 사이에 최소 거리를 유지시키므로, 전파 세그먼트와 위상 버퍼 세그먼트 1을 합한 길이보다 짧은 스파이크는 표본 추출 시점 밖으로 밀려나 걸러진다. 다만 스파이크의 위상 오차가 SJW보다 크면 표본 추출 시점을 충분히 밀어내지 못해 스파이크가 그대로 읽힌다.

에지 간격

재동기화는 에지가 있어야만 일어나므로, 같은 값의 비트가 길게 이어지면 그동안 보정 기회가 없다. CAN 비트 스터핑이 이 간격의 상한을 정한다. 스터핑 규칙 덕분에 재동기화 사이의 간격은 최대 10비트를 넘지 않는다.[2]

동기화를 일으키는 에지의 성격은 프레임 구간에 따라 다르다. 중재 구간에서는 여러 노드가 동시에 송신하므로, 노드들은 먼저 전송을 시작한 “선두” 송신자의 에지에 동기화한다. 그런데 선두 송신자가 반드시 중재에서 이기는 것은 아니어서, 수신자들은 뒤이어 선두를 잡는 다른 송신자에게 다시 동기화해야 한다.[1] 확인 응답 필드에서도 같은 일이 일어난다 — dominant 확인 응답 비트를 가장 먼저 내보낸 수신자에게 송신자와 나머지 수신자들이 맞춰진다. 중재가 끝난 뒤의 동기화는 대부분 발진기 오차 때문이다.

발진기 허용 오차

동기화가 흡수할 수 있는 클럭 오차의 크기는 비트 타이밍 설정이 결정한다. 허용 오차는 두 조건을 동시에 만족해야 하며, 하나는 두 위상 버퍼 세그먼트 중 짧은 쪽과 비트 시간의 비에서, 다른 하나는 SJW와 비트 시간의 비에서 나온다.[1] 뒤의 조건은 재동기화 사이 최대 10비트 동안 쌓인 두 노드의 비트 시간 차이가 한 번의 보정으로 지워져야 한다는 요구와 같은 말이다.[2]

두 조건이 허락하는 최대치는 1.58 %이며, 전파 세그먼트를 1 tq로 두고 두 위상 버퍼 세그먼트와 SJW를 모두 4 tq로 맞춘 조합에서 나온다. 전파 세그먼트가 비트 시간의 10 %밖에 되지 않는 이 조합은 짧은 비트 시간에는 쓸 수 없고, 125 kbit/s에 버스 길이 40 m 정도가 한계다.

여기서 발진기의 정밀도와 네트워크 설계가 맞물린다. 비트율을 올리면 왕복 지연을 흡수하느라 전파 세그먼트가 커지고, 위상 버퍼 세그먼트에 남는 몫이 줄어 허용 오차가 좁아진다. 그만큼 더 정밀한 클럭원이 필요해진다는 뜻이다. 네트워크 전체의 허용 오차는 가장 여유가 적은 노드가 결정하므로, 한 노드의 설정만 잘 잡아서는 소용이 없다.

[1]
F. Hartwich and A. Bassemir, “The Configuration of the CAN Bit Timing,” in 6th International CAN Conference (iCC), Turin, Italy, 1999. Accessed: Aug. 25, 2026. [Online]. Available: https://kvaser.com/wp-content/uploads/2014/08/boschcia99-can-bit-timing.pdf
[2]
P. Richards, “Understanding Microchip’s CAN Module Bit Timing,” Microchip Technology, Application note AN754, 2001. Accessed: Aug. 25, 2026. [Online]. Available: https://ww1.microchip.com/downloads/en/Appnotes/00754.pdf
[3]
CAN in Automation, “CAN knowledge: from physical layer to application layer and beyond.” 2026. Accessed: Aug. 24, 2026. [Online]. Available: https://www.can-cia.org/can-knowledge