Leo's Garage

CAN bit Timing 본문

자동차 및 자동차 SW/자동차 SW 개발 일반

CAN bit Timing

LeoBehindK 2023. 6. 25. 17:34
728x90
반응형

CAN bus의 각 bit는 Timing을 위해 최소 4개의 Quanta로 나뉜다.

이 Quanta는 논리적으로 4개의 그룹 또는 세그먼트로 나뉘게 된다.

1. Synchronization Segment : 동기화 세그먼트

2. Propagation Segment : 전파 세그먼트

3. Phase Segment 1 : 위상 세그먼트 1

4. Phase Segment 2 : 위상 세그먼트 2

 

이 Segment들은 소위 Time Quantum이라고 불리는 단위 시간의 정수 배를 의미한다. Time Quantum은 CAN system의 Clock 주기와 동일하다. 이는 MCU에 의해 구현되는 것이다.

결국 이것들은 CAN message의 1bit가 날아갈 때, CAN clock의 몇 배가 각 영역에 할당되어야 하는지에 대한 이야기이다. 

 

항상 1 Quantum 길이인 동기화 세그먼트는 Clock 동기화에 사용된다. Bus에서 Data가 변경될 때, 여기서 Bit Edge가 발생할 것으로 예상된다. 

전파 세그먼트는 Bus 라인의 지연을 보정하는데 필요하다. 

위상 세그먼트는 Clock을 동기화하기 위해 필요한 경우 짧게 (위상 세그먼트 1) 또는 길게 (위상 세그먼트 2) 할 수 있다. Bus level은 위상 세그먼트 1과 위상 세그먼트2 사이의 경계에서  Sampling 된다. 

대부분의 CAN controller는 1 bit 동안에 3번 Sampling하는 옵션도 제공한다. 이 경우 Sampling은 Sampling 지점 앞의 2개의 Quanta의 경계에서 발생한다. 

 

Bit Timing Calculator

-> 주어진 input frequency와 bus speed에 대한 가능한 모든 CAN bus parameter를 계산해준다. 참고하자

https://www.kvaser.com/support/calculators/bit-timing-calculator/

 

Bit Timing Calculator | Kvaser

CAN Bus Bit Timing Calculator Use the calculator below (requires JavaScript) to calculate all possible sets of CAN bus parameters for a given input frequency and a given bus speed. The input frequency is the frequency you are feeding the CAN controller wit

www.kvaser.com

 

Clock Synchronization

on-chip bus clock을 조정하기 위해서 CAN Controller는 Bit의 길이를 quanta의 정수 배만큼 줄이거나 늘일 수 있다. 이러한 Bit 시간의 조정의 최대값을 Synchronization Jump Width(SJW)라고 한다. 

Hard Synchronization은 Bit가 recessive에서 dominant로 전환할 때 발생한다. Bit Time은 해당 edge에서 부터 다시 시작한다.

 

ReSynchronization은 메시지의 동기화 세그먼트 내에서 Bit edge가 발생하지 않을 경우에 수행된다. 위상 세그먼트는 신호가 잘못 들어옴에 따라서 짧아지거나 길어질 수 있는데 이 때 최대 길이는 SJW에 의해 결정된다.

 

Bit Timing Register Calculation

대부분의 CAN controller는 다음 parameter를 사용하여 Bit Timing을 설정할 수 있다. 

clock prescaler value

sampling point 이전의 quanta의 수

sampling point  이후의 quanta의 수

SJW 내의 quanta의 수

단, 각자 사용하는 IC의 데이터 시트를 주의깊게 읽어보는게 더 중요하다.

 

NXP의 82c200 혹은 SJA1000의 Register Layout은 다음과 같다. 

BPR0 ~ BPR5는 clock prescaler 값을 설정한다. 

SJW0 ~ SJW1은 SJW의 length를 설정한다.

TSEG10 ~ TSEG13은 sampling point 이전의 quanta의 수를 설정한다. 

TSEG20 ~ TSEG22는 sampling point 이후의 quanta의 수를 설정한다.

3번 sampling을 하고 싶다면 SAM을 1로 설정하고, 1번으로 충분하다면 0으로 설정한다. 

 

ex) SJA1000에 공급되는 오실레이터의 신호가 16MHz이고 bit rate가 250kbit/s이며, Sampling point가 62%이면서 SJW가 2quanta인 경우에는 다음과 같이 설정할 수 있다. 

 

BRP = 4; quanta length가 2 * 4 / 16000000 초 = 500ns 

TSEG1 = 5; 

TESG2 = 3

이렇게 설정하면, 8개의 Quanta로 bit는 구성되며, 1 / (8 * 500ns) = 250kbit/s가 된다.

그리고 5/8은 거의 62.5%이다. 

 

728x90
반응형
Comments