본문 바로가기

카테고리 없음

can통신 filter/mask

먼저 Mask 및 Filter에 대해서 간략히 설명드리면,

CAN Message 수신시 특정한 ID 또는 어떤 범위의 ID만 받고저 할때 설정하시면 됩니다.

Mask는 Filter의 사용여부(Enable/Disable)를 결정 한다고 보시면 됩니다.

실제 Message ID가 CAN Rx에 수신 되었을 때, Filter의 각 bit값이 비교 되어 같은지 다른지 판단하여 수용하게 됩니다.

이때 각 Filter bit값이 비교 되기 위해서는 이에 대응되는 Mask bit가 Enable,즉 1이 되어야 합니다. 0일때는 Filter bit값에 상관없이 모두 수용하게 되는 것입니다.

1) 특정한 ID를 받아들이기 위한 예를 들면,

Mask = 0b01000010101(0x215) - Standard ID (11bits인경우)

Filter0 = 0b01000010101(0x215) 로 하시면 0x215 Message ID만 받아 들이게 됩니다.

물론 Filter가 여러개 있기 때문에 여러 Message ID를 받을 실 수 있습니다.

2) 특정 영역의 ID를 받기 위한 예를 들면,

Mask = 0b11111111000 (0x7f8)

Filter0=0b00100000000(0x100)

Filter1=0b01000010000(0x210)

위의 경우는 0x100~0x107, 0x210~0x217의 영역의 ID를 수신하게 됩니다.

이유는 Mask의 하위 3bits가 0(Disable)이기 때문에 이에 대응하는 Filter의 값을 무시하고 받아들이기 때문에 000~111의 범위는 모두 수용하기 때문입니다.

 

간략히 정리하면 Mask bit가 1이면 이에 대응하는 Filter bit값이 0인지 1인지를 수신되는 bit와 비교하고, Mask bit가 0이면 상관없이 모두 수용하게 됩니다.