【Arduino】MCP2515で受信するCAN信号のフィルタ方法 ~MaskとFilterの使用方法
MCP2515というCANコントローラは
2個の受け入れマスク(2個受信バッファがあり、各バッファに1つずつ)と
6個の受け入れフィルタがあって、これをしっかり設定しないと意図したメッセージが取得できない。
SeeedのCAN_BUS_Shieldを使う。READMEがわかりやすくていいね。
GitHub - Seeed-Studio/CAN_BUS_Shield: CAN Bus Shield - MCP2515&MCP2551
フィルタとマスクの設定方法
ライブラリでは下記のメソッドを使ってフィルタとマスクを設定する。
2番目の引数は標準IDか拡張IDかなのでほとんどのケースで標準IDの0になるかと。
マスク0はフィルタ0, 1
マスク1はフィルタ2, 3, 4, 5と組み合わせて使う。
下記の表を参考にID0x209とID0x218を受信する場合、
こんな設定になる。
マスクとフィルタ、IDを2進数で表現して各ビットを比較した時、
マスク:1 フィルタ:1 -> ID:1のみ受入れ、0は拒否
マスク:1 フィルタ:0 -> ID:0のみ受入れ、1は拒否
マスク:0 フィルタ:any -> ID:なんでもOK
となる。
ちなみに受信バッファRXB0の方がRXB1より処理の優先順位が高いようなので更新周期が早いメッセージはRXB0で
設定したほうがいいのかも。