CAN 식별자는 CAN의 데이터 프레임과 리모트 프레임의 중재 필드에 실리는 값이다. 식별자는 프레임의 목적지를 가리키지 않고, 데이터가 무엇인지 나타낸다. 수신 노드는 식별자를 보고 그 데이터를 쓸지 정하고, 여러 노드가 한꺼번에 송신을 시작하면 식별자로 비트 단위 중재를 해서 버스를 차지할 노드를 가린다.[1]
길이
식별자는 기본 포맷에서 11비트, 확장 포맷에서 29비트다.[2] 29비트 식별자는 앞의 기본 식별자 11비트와 뒤의 확장 식별자 18비트로 나뉜다. 두 포맷 모두 식별자를 최상위 비트부터 보낸다.[1]
Bosch CAN 2.0 규격은 11비트 식별자의 상위 7비트가 모두 recessive인 값을 쓰지 못하게 한다.[1]
상위 프로토콜이 29비트 식별자를 여러 필드로 나눠 쓰기도 한다. 예를 들어 J1939를 바탕으로 한 ISO 11783은 29비트 식별자에 송신 노드 주소 8비트 필드를 두고, 식별자의 다른 필드로 파라미터 그룹 번호(PGN, Parameter Group Number)를 나타낸다.[3]
우선순위
식별자는 버스 접근에서 정적인 우선순위를 정한다.[1] dominant는 논리 0, recessive는 논리 1이다.[2] 중재에서는 식별자 값이 가장 작은 메시지가 가장 높은 우선순위를 가진다.[4] TI 앱노트에 따르면 메시지 우선순위를 배정하는 일은 시스템 설계자에게 달려 있다.[5]
ISO 11898-1:2024는 식별자를 특정 프레임의 우선순위를 반영하는 고유한 라벨로 정의한다. 이 표준은 우선순위(priority)를 데이터 프레임과 리모트 프레임이 중재에서 차지하는 순위를 정하는 속성으로 정의하고, 우선순위가 높을수록 그 프레임이 중재에서 이길 확률이 커진다.[2] 같은 식별자로 두 노드가 함께 송신할 때 일어나는 일은 CAN 중재에서 다룬다.
기본 식별자가 같은 기본 포맷 프레임과 확장 포맷 프레임이 부딪히면 기본 포맷 프레임이 이긴다. 확장 포맷의 SRR(Substitute Remote Request) 비트는 기본 포맷의 RTR(Remote Transmission Request) 비트 자리에 recessive로 실리고, IDE(Identifier Extension) 비트는 기본 포맷에서 dominant, 확장 포맷에서 recessive다.[1]
수신
수신 노드는 받은 프레임의 식별자를 필터와 비교해, 소프트웨어가 필요로 하는 프레임만 수신 메모리에 넣고 나머지는 소프트웨어 개입 없이 버린다.[4] 필터의 구성은 수용 필터에서 다룬다.