티스토리 뷰

자동차

차량 네트워크 / CAN-FD

삼전동해커 2023. 2. 27. 15:28

https://soc.seoultech.ac.kr/pdf/2019_JIEIE.pdf

 

 1. CANFD 프로토콜

CAN-FD 프로토콜을 적용한 차량의 ECU는 CAN node를 매개로 CAN frame을 송수신한다.node는 컨트롤러와 transceiver로 구성된다.

컨트롤러는 ECU에게서 받은 정보를 frame으로 생성하거나, CAN bus에서 받은 frame을 샘플링하고 분석해 data field 구간을 ECU에 전달한다.

트랜스시버는 컨트롤러가 생성한 디지털 신호인 frame을 아날로그 형식으로 변환한다.

 

2. CAN-FD Frame format

 

CAN node들이 통신을 하기 위해선 CAN 통신 규약에 맞는 CAN frame을 사용해야 한다. 

ISO-11898에서 명시된 frame의 종류는 다음 4가지이다.

1. CBFF(Classical Base Frame Format)

2. CEFF(Classical Extended Frame Format)

3. FBFF(FD Base Frame Format)

4. FEFF(FD Extended Frame Format)

 

CAN frame은 4개의 필드로 구분되며 4개의 필드는 CAN frame의 각기 다른 정보를 포함하고 있다.

 

1. arbitration field - CAN node의 ID 정보

2. control field - 데이터의 크기나 속도를 결정하는 bit 들로 구성

3. data field - CAN node가 송수신하는 데이터

4. CRC field - CRC 연산 결과

 

이들을 분류하는 기준은 다음과 같다.

 

ID 길이

Base 11bit

Extended 29bit

 

데이터 필드 포함 유무

데이터 필드가 있으면 Data Frame

데이터 필드가 없으면 Remote Frame

 

데이터 필드의 길이

0 ~ 8 Byte는 classical Frame

0 ~ 64 Byte는 FD Frame

 

3. CAN FD 프레임 상세

CAN과 CAN-FD의 프레임은 비슷한 부분이 많기 때문에 두개를 같이 설명할 수 있다.

CAN-FD Frame format detail      출처 : https://m.blog.naver.com/techref/222003211905

 

CAN Frame은 전송 속도에 따라 2개의 phase로 분류된다.

classical frame은 속도가 일정해 phase의 구분이 없지만, FD는 arbitration phase와 data phase로 구분된다.

 

aribitraion phase는 1Mbit/s로 송수신되고 범위는 CRC 필드의 CRC delimiter에서 brs까지다.

 

data phase는 8Mbit/s 고속통신이 가능하고 범위는 brs부터 CRC delimiter까지다.

 

 

 

SOF

Start Of Frame으로 프레임의 시작 비트이다. 0값을 갖는다.

값이 1 -> 0 으로 바뀌는 Falling Edge를 기준으로 모든 노드들이 비트를 인식한다.

 

Arbitration Field

Arbitration 필드는 CAN node의 ID 정보를 담고있다.

CAN Bus 내에서는 ID가 우선순위 역할을 한다. 메세지 ID가 작을 수록 우선순위가 높다. 하지만 ID별로 의미하는 바는 OEM마다 DBC가 다르기 때문에 ID만으로 어떤 역할인지는 찾아봐야 한다.

 

수신노드는 Acceptance Filter와 수신된 메세지 ID를 비교해 메세지를 어플리케이션으로 전달할지 내버려둘지 결정한다.

어플리케이션은 ID를 보고 어떤 내용이 메세지에 있는지와 데이터 구조를 파악한다.

 

 

IDE확장여부를 결정한다. standard Frame에서는 IDE가 0이고 Extended Frame에서는 1이다. Extended Frame에선 SRR비트가 1값을 가지고 추가되는데 dummy bit이다.

 

FDF 비트는 FD인지 Classic CAN인지 구분에 사용한다. FDF 비트가 1이면 FD 프레임이다.

r은 reserved bit이다.

 

RRSRemote Frame여부를 나타낸다. Remote Frame은 데이터필드를 가지지 않고 메세지 전달이 잘못되어 재전송이 필요한 경우에 사용한다.

 

BRS비트가 1이면 더 높은 전송속도를 가지고도록 Baud Rate를 변경한다.

BRS가 0이면 data phase를 1Mbit/s로 송수신하고 1이면 data phase를 8Mbit/s로 송수신한다.

CAN의 data 크기는 8byte까지 사용할 수 있다고 했고, CAN FD는 64byte까지 사용할 수 있다고 했다. BRS 값에 따라 CAN으로 전송할지 CAN-FD로 전송할지 정한다.

 

중간에 Data Phase를 건너뛰고 Arbitration phase를 계속 설명한다.

 

ACK 비트송수신자의 정상 송수신 구분 비트로 송신노드는 ACK 비트를 1로, 수신노드는 0으로 보내 정상적으로 받았음을 알린다. 만약 CRC 값이 잘못되었다면 수신자는 ACK 비트를 1로 설정해 전송한다.

 

EOF비트는 프레임이 끝났음을 알려준다.

EOF 7bit, ITM 3bit가 필수적으로 필요하다.

 

여기까지가 Arbitration Phase이다.

----------------------------------------------------------------------------

CAN-FD Frame format detail      출처 : https://m.blog.naver.com/techref/222003211905

ESI 비트가 1이면 송신노드가 Error Passive 상태, 0이면 Error Active 상태이다.

Error Active는 일반적인 통신상태이고, Passive는 버스이용에 불이익이 있어 송신에 제약이 있다.

 

DLC data field의 크기를 결정한다.

DLC값에 따라 데이터 필드 크기가 다르다.

 

 

CRC 필드는 CRC 연산과 관련된 정보들이 담겨 있다.

송신 측에서 보낸 CRC 연산 값과 수신 측에서 직접 계산한 CRC 연산 값을 비교해 CAN frame에 이상이 없는지 확인한다.

이 때 연산 범위는 다음 표와 같다.

 

 

Stuff Bit Counter

bit stuffing은 연속된 메세지 프레임들 사이에서 SOF값인지 그저 프레임 내의 값인지 구분하기 위함이다.

만약 SOF의 값이 1111인데 프레임 내부의 값에 1111이 있으면 어떻게 구분하지?를 고민해본적이 있다.

SOF를 제외하고 내부의 값에 SOF와 같은 값이 있으면 연속된 값 중간에 0을 삽입해 헷갈리지 않게한다.

수신 측에선 이 0을 제거한다. => delimiter

 

SOF비트부터 데이터 필드까지의 스터핑 비트의 개수를 Gray Code화해 한개의 페리티 비트와 함께 삽입한다.

 

데이터 필드가 16비트보다 작으면 CRC 비트는 17비트

그보다 크면 CRC 비트는 21비트

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함