CAN통신

: broadcast 방식(1:N방식)

: 2가닥으로 구현, 최대1Km 전송거리(50kbps일때)/ 최대속도 1Mbps (전체대역폭의 50%이하 트래픽 유지권장)

: 비동기 통신에서와 같이 NRZ(Non Return to Zero) 코딩 방법사용/ 1비트 동안은 같은 값을 유지

: ECU 간의 통신을 위한 통신

: 매체접근방식 (CSMA/CD 방식) 시간손실없이 우선순위 순서로 메시지 전송

: 중재(arbitration) id경쟁을 통한 이벤트기반 통신 <-> LIN -20Kbps

 

CAN규격 (2.0A > 2.0B 전송가능, 2.0B > 2.0A 전송불가)

  • 표준 형태(2.0A)의 ID= 11bits
  • 확장형태(2.0B)의 ID= 29bits 

ISO규격 (물리계층에서 차이, 통신속도로 구분)

  • ISO 11898 -1Mbps이상의 고속통신  
  • ISO 11519- 125Kbps까지 저속통신

CAN 프로토콜

- 데이터 링크 계층

  • LLC : Acceptance Filtering, Overload Notification, Recovery Management
  • MAC: Data Capsulation/Decapsulation, Frame Coding, Error Detection/Signaling , Serialization/DeSerialization

- 물리계층 (120ohm의 종단저항 처리)

 

Terms

** Dominant(우성) == ‘d’비트 == 0 / Recessive(열성) == ‘r’비트 == 1 

 

- SOF(Start Of Frame) 
: 한 개의 우성 bit 로 구성 Frame의 처음을 지시하고 모든 노드의 동기화를 위해 사용

- Arbitration(중재) ID 
: 메시지 내용 식별 > 우선순위 나타냄/ 11비트(CAN 2.0A버전) or 29비트(CAN 2.0B버전)  

- IDE (Identifier Extension) Bit
: 우성bit => Standard / 열성bit => Extended Frame (프레임 구분)

- RTR (원격 전송 요청) Bit

: 우성 RTR bit => Data Frame/ 열성 RTR bit => Remote Frame (프레임 구분)

- DLC (Data Length Code)

: 0 ~ 8bytes 사이즈

- SRR (Substitute Remote Request) 
: 표준 프레임의 RTR 위치 점유
- CRC (Cyclic Redundancy Code) 
: 16bits 체크섬(checksum) = 15bits  CRC + 열성 구분자(1bit == CRC Del) / 에러 감지에 사용

- ACK (ACKnowledge) Slot
: 전송노드는 열성Bit 송신, 버스에 ACK 비트가 있는지 확인, 없으면 전송 다시 시도

: 수신노드는 오류없으면 우성Bit송신

: 메시지를 올바르게 수신한 모든 CAN 컨트롤러는 메시지 끝에 ACK 비트 전송
- EOF (End of Frame)
: 7개의 ‘r’비트로 구성되어 메시지의 끝을 알리는 목적으로 사용

 

 

(입력) 리모트 프레임 요구 > 송신메일박스 > (응답) 데이터 프레임
##송신 메일 박스가 자동 응답 기능이설정되어 있고 ID가 일치해야 응답

 

Frame Types

  • Data Frame : 데이터 전송하기 위해 구성
  • Remote Frame  데이터 프레임에서 RTR bit == 1 / 데이터 영역 없음 / 데이터를 요구하는데 사용
  • Error Frame : 프레임에 에러 발견시 버스에 전송 / 6~12 dominant bits에러 플래그 + 8 recessive bits 에러경계
  • Overload Frame : 다음 프레임사이에 지연을 위함/ 6-7bits overload 플래그 + 8bit overload 경계

 

< Data Frame >

 

 

▶ Standard(2.0A)

 Arbitration Field = 11bits ID + 1bit RTR

Control Field =  r0 + 4bit DLC

 

▶ Extended(2.0B)

 Arbitration Field

= 11bits ID+ SRR + IDE + 18bits ID + 1bit RTR

Control Field = r1 + r0 + 4bit DLC

 

 

 

 

 

- Arbitration Field
: 11비트 또는 29비트의 크기를 갖는 ID와 1비트의 RTR(Remote Transmission Request) 비트로 구성 
: 둘 이상의 노드에서 메시지의 전송이 동시에 일어날 경우 메시지 간의 충돌을 조정. 
: RTR비트의 값은 데이터 프레임인지(d) 리모트 프레임인지(r)를 결정하는 데 사용

- Control Field
: 2비트의 IDE(IDentifier Extension) 비트, 4비트의 데이터 길이 코드(DLC, Data Length Code)로 구성/ 
: R0은 Reserved 비트(Extended CAN 2.0B R0, R1)

- Data Field
: 0 ~ 8bytes (==DLC 데이터 길이 코드) 의 데이터를 포함/ MSB(Most Significant Bit)부터 송신

: 특정 노드에서 다른 노드로 전송하는 데이터를 포함

- CRC (Cyclic Redundancy Check) Field
: CRC 시퀀스(15Bits) + CRC del(1개 ‘r’ Bit 

: SOF에서부터 데이터 필드까지의 비트열을 이용해 생성 / 메시지 상의 에러 유무를 검사하는데 사용

- ACK (ACKnowledge) Field
: 1bit의 ACK slot + ACK 델리미터(del)

: 노드에서 올바른 메시지를 수신하게 되면 ACK 필드를 받는 순간 ACK 슬롯의 값을 ’d’로 설정해 버스 상에서 계속 전송

 

< Remote Frame >

 SOF, Arbitration/ Control/ CRC/ ACK Field, EOF

: 데이터 영역이 없음 / 데이터 프레임에서 RTR 비트==1
: 데이터를 요구하는데 사용, 리모트 프레임의 요구를 받은 장치는 데이터 프레임으로 응답

<Error Frame>
:  6~12 dominant bits 에러 플래그+ 8 recessive bits 에러경계(에러 종료 상태) 
: 비트 stuffing 규칙을 일부러 손상 시키며, 따라서 현재 전송 중인 장치는 에러로 인해 현재의 프레임이 실패 하였음을 인식하고 즉시 중지하여 다음의 재 전송 기회를 기다림

  • 송신장치에서 발생 에러
    Bit 에러: 보낸 비트와 받은 비트가 서로 다르면 발생
    ACK 에러 : ACK 슬롯 동안 수신 장치가 0을 보내 주지 않을 때 발생.
  • 수신 장치에서 발생 에러
    CRC 에러 : CRC 가 맞지 않을 때 에러 발생 (crc계산결과와 나머지가 동일하지 않을때)
    STUFF 에러 : 스터핑(stuffing) 규칙이 맞지 않을 때 에러 발생
    FORMAT 에러 : CRC Del, ACK Del, EOF의 영역에 0(dominant) 값이 나타날 때 

** Frame Coding : 동일신호 5개이상 연속시 1개의 stuff Bit 전송

 

<Overload Frame> 
EOF | 6-7bit 오버로드 플래그 | 8bit 오버로드경계
: CAN 제어기가 아직 이전 메시지의 처리를 마치지 못한 경우 다음 메시지의 시작을 지연시키기 위해서 사용
: 오버 로드 프레임은 에러카운터 수에 영향X 

+ Recent posts