데이터 프레임 (Data Frame)
SOF + Arbitration + Control + Data + CRC + ACK + EOF + IFS
CAN 2.0A

출처
CAN 2.0B

SOF (Start Of Frame) - 1bit
- dominant bit 0
- frame 전송이 시작되었음을 알려줌
- Rising edge에서 모든 노드들이 동기를 맞춤
Arbitration Field - 12bit
ID + RTR
CAN 2.0A

CAN 2.0B

출처
- IDentifier
- CAN 2.0A : 11bit
- CAN 2.0B : 29bit
- 작은 ID가 큰 ID보다 우선순위가 더 높음
- RTR (Remote Transmisson Request bit)
- 0 : data frame
- 1 : remote frame
- SRR(Substitute Remote Request bit)
- 항상 recessive(1)
- CAN 2.0A와 충돌할 경우, CAN 2.0A의 우선순위를 더 높게 하기 위해서
- Extended임을 나타냄
- CAN 2.0B에만 존재
충돌 발생시, 일반적으로 MAC protocol은 bandwidth degradation (성능저하)이 발생하지만 CAN에서는 bandwidth의 낭비 없이 100% 활용 가능함
Control Field - 6bit
- IDE (IDentifier Extension)
- STD : dominant <0>
- Extended : recessive <1>
- Reserved bit : 새로운 기능 등을 위해 남겨둔 여유 비트
- STD : 1bit
- Extended : 2bit
- DLC (Data Length Code)
Data - 8Nbit
- 최대 8Bytes
- Remote Frame : N = 0
Data Frame : 1 <= N <= 8
CRC Field - 16bit
전송 과정 중 error를 검출하기 위해서 사용됨
- [SOF ~ Data field + 15zeros]
- Hamming distance = 6 ➡ 최대 5bit error까지 검출 가능
- error detection ⭕ error correction ❌
ACK Field - 2bit
정상적으로 수신했는지를 확인하기 위해서 사용됨
- ACK + ACK delimiter(always 1)
- Tx : 11
- Rx : 01 (success) 11(fail)
송신과 동시에 수신 오류 여부를 확인할 수 있음 ➡ 빠르고 효율적
EOF (End Of Frame) - 7bit
Frame의 끝, 전송 종료를 알리기 위해 사용됨
- 7 recessive bits ('1111111')
IFS (Interframe Space) - 3bit
프레임과 프레임을 구분하기 위해서 사용됨
- data, remote frame ⭕
- error, overload frame ❌
- 최소 3bit
- 모든 노드들에게 공평하게 버스를 차지할 기회를 줌
원격 프레임 (Remote Frame)
정보를 보내달라고 특정 노드에게 요청
data frame과의 차이점
- ID : 내가 원하는 정보의 ID
- DLC : 요청한 정보의 길이 (이 길이로 보내줘!)
- Data field : empty (0 Byte)
- RTR : recessive 1
오류 프레임 (Error Frame)
- Error는 여러 위치에서 발생할 수 있음
- Error 감지시 버스의 모든 프레임에서 Error frame
- Error Delimiter = 8r (11111111)
과부하 프레임 (Overload Frame)
- 처리에 시간이 걸릴 것 같으니 대기상태가 되도록 하기 위해서 사용
- overload flag = 6d, overload delimiter = 8r
- IFS의 초반 2bit에 전송