본문 바로가기
임베디드

[임베디드] CAN 통신 Mask & Filter Bit

by 코딩히어로 2022. 3. 25.
728x90

Can 통신은 일반 Serial 통신과 비교했을 때 1:N으로 통신이 가능하고

통신을 위한 물리적 계층을 관리하지 않아도 되는 편리함이 있습니다.

 

대개 1:N 통신은 구현하는데 복잡하기도 하고 통신 순서 등을 신경 써야 하는데 비해

Can통신은 이러한 점들을 생각하지 않고 오직 상대방의 ID만 알고

데이터를 전송하면 나머지는 물리적 계층이 알아서 데이터를 전달해줍니다.

 

이러한 통신을 위해서는 Can통신에서 사용되는 Mast bit와 Filter bit에 대해 이해하여야 합니다.

 

case num Mask Bit Filter Bit n Message Identifier Bit
1 0 Don't Care Dont'Car
2 1 1 1
3 1 1 0
4 1 0 1
5 1 0 0

 

  • Case 1 : Mask Bit 가 0인 경우에 해당 비트에 대한 관심이 없고 관리를 하지 않는다는 것을 의미합니다. 
               즉 해당 비트로 들어가는 값이 어떤 값이든 상관없이 수신합니다.
  • Case 2,5 : Mask Bit가 1인 경우, 해당 비트를 관리합니다. 해당 비트의 Filter Bit와 수신되는 ID Bit가 일치해야 수신
                합니다. 이 경우는 수신되는 ID Bit와 Filter Bit가 일치 함으로써 데이터를 수신합니다.
  • Case 3,4 : Mask Bit가 1인 경우, 해당 비트를 관리합니다.
                해당 비트의 Filter Bit와 수신되는 ID Bit가 일치해야 수신을 합니다. 이 경우는 수신되는 ID Bit와 Filter Bit
                가 일치하지 않아서 데이터를 수신하지 않습니다.

 

현재 제가 사용하는 칩인 PIC18F66K80에서는 Can 모드를 다음과 같이 지원합니다.

 

Mode 0       2 RX Buffer

Mode 1,2     6 RX Buffer

 

들어온 데이터가 필터에 걸리는 순서는 Mode 0 -> Mode 1 -> Mode 2

 

위 내용을 바탕으로 Filter0 7FC, Filter1,2 7FF로 설정한 다음 ID 112를 받으려고 한다면

Filter0에서 112가 만족하여 인터럽트가 발생하므로 Filter1,2에서는 인터럽트가 걸리지 않습니다.

 

 

728x90
반응형

'임베디드' 카테고리의 다른 글

[임베디드] Watchdog Timer란?  (0) 2023.10.27
[임베디드] ADC 사용하기  (2) 2022.08.25
[임베디드] PLL이란?  (4) 2022.01.10
[임베디드] ADC란?  (21) 2022.01.06
[임베디드] CAN 통신이란?  (0) 2021.12.27

댓글