yoncho`s blog
CAN Bit Timing, CAN Bus Parameter 설정을 위한 계산 본문
CAN Bit Timing, CAN Bus Parameter 설정을 위한 계산
욘초 2022. 11. 8. 15:31참조 : https://embedclogic.com/can-protocol/
*CAN과 UDS에 대해 잘 정리되어있어 업무에 참고하시면 좋을 듯 합니다.
CAN Bit Timing & Calculation Post.
Bit Timing이란
Bit Timing은 CAN Bus 상태에서 단일 비트를 전달하는데 필요한 시간 Quanta(tq : 비트 시간의 기본단위)이라 합니다.
Bit Timing의 역수는 Bit rate (혹은 Nominal bit rate) 입니다.
ECU의 Oscillator frequencies(신호 생성 주기)에서는 동기화 오류가 발생할 수 있어서
모든 ECU는 주파수 편차가 허용 범위 내에 있을 경우, 비트 시간을 조정하여 동기화를 자체적으로 유지한다고 합니다.
비트 시간 구성 요소
비트 동기화를 위한 비트 시간은 4개의 세그먼트로 이루어지며 각 세그먼트 별로 프로그래밍(조작)가능한 특정 시간 Quanta(tq)가 존재합니다.
1. SYNC_SEG : 동기화 세그먼트로, 1tq
2. PROP_SEG : 전파 세그머트 (허용값 : 1~8 tq)
3. PHASE_SEG1 : 위상 세그먼트 1 (허용값 : 1~8tq, 동기화를 위해 일시적으로 연장됨)
4. PHASE_SEG2 : 위상 세그먼트 2 (허용값 : 1~8tq, 동기화를 위해 일시적으로 단축됨)
(*위상 : 반복되는 파형의 한 주기에서 첫 시작점의 각도 혹은 어느 한 순간의 위치)
Nominal Bit Time = SYNC_SEG + PROP_SEG + PHASE_SEG1 + PHASE_SEG2
여기서, CAN Bit Time Parameter로 사용되는 tseg1과 tseg2값은 다음과 같습니다.
TSEG1 = PROP_SEG + PHASE_SEG1
TSEG2 = PHASE_SEG2
최종적으로 Nominal Bit Time은 아래와 같습니다.
Nominal Bit Time = Tsync_seg + TSEG1 + TSEG2
(*Tsync_seg = SYNC_SEG)
공식
여기서 그럼 Bit Time의 기본 단위 tq의 공식과 Sample Point의 계산식에 대해 소개하겠습니다.
Quanta (tq) 공식
tq = BRP / fsys
BRP = 전송 속도 프리스케일러 (= Pre-Scaler)
fsys = MCU System Clock (fosc)
Sample Point 공식
SamplePoint = (Tsync_seg + TSEG1) / (Tsync_seg + TSEG1 + TSEG2)
Tsync_seg는 1tq로 고정되어 있으므로
SamplePoint = (1 + TSEG1) / (1 + TSEG1 + TSEG2)와 같습니다.
예시)
System Clock이 40mhz이고 CAN Clock Divider (=BRP) 가 4 일때, 500kbps 전송 속도를 달성하기 위한 Quanta 계산.
CAN Clock = 40 /4 = 10mhz
tq = 1 / CAN Clock = 1 / 10 = 100ns
(*tq 공식에 의하면, tq = BRP / System Clock = 4 / 40mhz = 100ns가 되는 것이다.)
bit rate = 500kbps
bit time = 1 / 500kbps = 2us
number of tq = 2us / 100ns = 20tq
CAN Bit Parameter Setting in SecurityFuzzer
SecurityFuzzer의 Can Bit Timing 계산식 구현에 있어서 Tseg1, Tseg2 이외의 다른 값들도 Can Bus Parameter Setting에 영향을 주고있어서 그런 값들에 대한 소개와 System Clock과 Number of tq, Prescaler, Kbps값 사이의 관계에 대해 소개하겠습니다.
Prescaler (CAN Divider) : 한국어로 번역할때 모호해서, 분주기 (주기를 쪼갠다)라고 쓰인다고 합니다.
System Clock을 Prescaler값으로 나눈 클럭값을 CAN Clock으로 사용한다고 합니다.
*단, 정수만 가능합니다.
(*나무위키 (영문) :https://en.wikipedia.org/wiki/Prescaler)
CAN Bit Parameter Setting에서 Pre-Scale값은 곧 CAN Divider입니다.
*주파수 Prescaling 사용하는 회로에서 Divider를 사용할 때, Prescaler로 부른다고합니다.
SystemClock = Prescaler * No of Tq * Kbps
위 식은 SystemClock값으로 보기 편하게 치환한 식이며, CAN Clock을 구하기 위해
SystemClock을 Prescaler로 나눠야하는 분주기 처리하는 과정으로 표현 한 식은 아래와 같습니다.
SystemClock(khz) / Prescaler(int) = No of Tq(int) * Kbps(kbit/s)
(*위 식은 CAN Clock = No of Tq * Kpbs 와 같습니다.)
여기서 SystemClock은 ECU System Clock을 의미하고
대체로 CAN은 16Mhz, CANFD는 80Mhz값을 ECU System Clock으로 사용하는 듯 합니다.
ECU마다 System Clock은 다를 수 있습니다.
SF 구현 예시)
Q. CAN mode에서 Bitrate가 500kbps일 때, 선택할 수 있는 Tseg1, Tseg2, Prescaler 값은 어떻게 변할까?
CAN mode에서 ECU System Clock = 16Mhz 일 때
16Mhz = Prescaler * No of Tq * 500kbps 식을 만족해야하는 Prescaler 값과 No of Tq 값을 구해야합니다.
여기서 Prescaler는 정수여야 하며, Prescaler를 1부터 증가시키게되면 아래와 같습니다.
Prescaler = 1일때, No of Tq = 32입니다.
Prescaler = 2일때, No of Tq = 16입니다.
..
Prescaler = 32일때, No of Tq = 1입니다.
Prescaler 값에 따라 변하는 No of Tq를 가지고
Tseg1과 Tseg2, SamplePoint를 구해줄 수 있습니다.
*공식에서 변수는 Prescaler와 No of Tq가 있습니다.
두 변수 중 하나를 1부터 증가시키면 다른 변수도 그 값에 따라 변합니다.
여기서 저는 Prescaler를 1부터 증가시켰고, No of Tq를 Prescaler값에 따라 변하게했습니다.
+)
Prescaler를 1로 설정한다면, No of Tq는 32이고
Sample Point가 75%라면
SamplePoint 공식에 의거하여 Tseg1과 Tseg2값은 아래와 같습니다.
Tseg1 = 32 * 0.75 - 1 = 23
Tseg2 = 32 - 1 - Tseg1 = 8
결과 :
CAN mode, 500Kbps일 때
Prescaler를 1, SamplePoint를 75%로 설정한다면
Tseg1 = 23, Tseg2 = 8 이 됩니다.
마무리
CAN Bit Timing Calculator와 CAN Bit Parameter Setting 구현을 통해 위 내용을 알 수 있게 되었고,
포스트로 다시 한번 정리하면서 Prescaler와 Divider가 동일함을 알 수 있었습니다.
SF CAN Bit Timing Calculator는 위 내용을 기반으로 개발되었습니다.
읽어주셔서 감사합니다 : )
참고
CAN, UDS 설명) https://en.wikipedia.org/wiki/Prescaler
Bit Timing Calculator 테스트) http://www.bittiming.can-wiki.info/
AN1787 : CAN Bit Timing 관련 논문) https://www.nxp.com/docs/en/application-note/AN1798.pdf
BOSCH CAN Bit Timing 관련 논문) http://www.oertel-halle.de/files/cia99paper.pdf
'기술, 나의 공부를 공유합니다. > [Vehicle] CAN, CANFD' 카테고리의 다른 글
CAN, 자동차 통신 프로토콜 Controller Area Network (0) | 2024.09.28 |
---|---|
CAN, 주섬 주섬 (0) | 2023.03.07 |
DBC, 자동차를 위한 CAN 관련 정보 파일 (0) | 2023.02.21 |
CAN Frame, Frame(single, multi) & Flow (0) | 2023.02.03 |