CAN 통신으로 자동차와의 통신을 구현하려고 하는데..
예제 코드를 보니 Mask와 Filter를 해줬다.
근데 내가 지금까지 공부한 개념에는 Mask와 Filter는 없었는데..
인터넷에 찾아도 제대로 나오지 않고ㅠㅠ
MCP2515 Datasheet를 봤더니 Block Diagram에서 mask와 filter를 찾을 수 있었다.
Mask와 Filter의 개념을 아직 이해하지는 못했지만..
아마도 TX와 RX로 받아온 데이터를 처리(필요 없는 값을 거르는..?)하는 역할을 하는 것 같다..
더 자세한 내용을 찾게 되면 밑에 추가로 적도록 하겠다.
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 = 0b 010 0001 0101(0x215) - 표준 ID(11 bits)
Filter0 = 0b 010 0001 0101(0x215)로 설정하면 0x215 Message ID만 받게 된다.
물론 Filter가 여러 개 있기 때문에 여러 Message ID을 받을 수 있다.
2) 특정 영역의 ID를 받기 위한 예를 들면,
Mask = 0b 111 1111 1000 (0x7f8)
Filter0 = 0b 001 0000 0000(0x100)
Filter1 = 0b 010 0001 0000(0x210)
< 수신받을 수 있는 ID의 범위 >
Filter0 : 0b 001 0000 0000(0x100) ~ 0b 001 0000 0111(0x107)
Filter1 : 0b 010 0001 0000(0x210) ~ 0b 010 0001 0111(0x217)
Mask의 하위 3bits가 0(Disable)이기 때문에 이에 대응하는 Filter의 값을 무시하고 받아들인다.
Filter는 000~111의 범위는 모두 수용 가능!
Mask bit가 1이면 이에 대응하는 Filter bit값이 0인지 1인지를 수신되는 bit와 비교하고
Mask bit가 0이면 Filter의 bit와 상관없이 모두 수용한다.
관련 References
https://forum.arduino.cc/t/mcp2515-can-filtering/506401
https://forum.arduino.cc/t/mcp2515-can-filter-mask/631355
https://etfplant.tistory.com/1130
https://answerofgod.tistory.com/862
https://louie0724.tistory.com/363
'프로젝트 > CAN_OBDII' 카테고리의 다른 글
CAN 통신 ID 값이 뭘 의미하는지 & OBD Broadcast에 관하여 (0) | 2022.01.28 |
---|---|
CAN OBDII 통신 관련 링크 & 파일 모음 (0) | 2022.01.28 |
CAN 통신 모듈(MCP2515) (0) | 2022.01.26 |
Can Controller, CAN Transceiver (0) | 2022.01.25 |
CAN 통신 프레임(Frame) 타입 (0) | 2022.01.25 |
댓글