• 車種別
  • パーツ
  • 整備手帳
  • ブログ
  • みんカラ+

kz1000a1の愛車 [マツダ ロードスター]

整備手帳

作業日:2023年10月23日

CAN ID によるフィルタリング

他の整備手帳を見る 他の整備手帳を見る

目的 修理・故障・メンテナンス
作業 DIY
難易度

初級

作業時間 30分以内
1
CAN のコントローラーの機能を使って必要な CAN フレームだけを受信すると無駄な処理が減って必要なフレームの取りこぼしも減ります。
Arduino IDE で ESP32CAN(ESP32内蔵コントローラー) と MCP_CAN(MCP251x) ではフィルターの設定方法が違い苦労したので纏めておきます。
結局はデーターシートを片手にライブラリーのソースを読むしかないのですが。
2
ESP32CAN ライブラリーでは、レジスターに書き込む値そのものを設定します。
11ビットの ID 上位8ビットを ACR0 に下位3ビットを ACR1 に設定し残りの5ビットは1でマスクします。
ACMx の 1 をセットしたビットがドントケアになります。
CAN ID 0x120 ~ 0x12f だけを受信したい場合は、こんな感じ。
ACR0 = 0x120 >> 3
ACR1 = ((0x120 << 5) & 0xe0) | 0x1f
ACM0 = 0x00f >> 3
ACM1 = ((0x00f << 5) & 0xe0) | 0x1f
一度設定したフィルターの変更は ESP32Can.CanStop() をしてから ESP32Can.CANConfigFilter() して ESP32Can.CANInit() する。

https://www.nxp.com/docs/en/application-note/AN97076.pdf
3
MCP_CAN(1.5.0) ライブラリーでは、ライブラリー側でレジスター設定値に変換してくれるけど4バイトで設定するので16ビットシフトする。
こちらは 0 をセットしたビットがドントケアになります。
Init_Filt(0 ,0x120 << 16)
Init_Mask(0 ,(0x07ff << 16) & ( ~( 0x000f << 16)))
Init_Filt()、Init_Mask() はその場で反映されるので setMode() する必要なし。

https://ww1.microchip.com/downloads/en/DeviceDoc/MCP2515-Stand-Alone-CAN-Controller-with-SPI-20001801J.pdf

イイね!0件




関連コンテンツ

関連整備ピックアップ

トランクルーム照明取付け

難易度:

25年目の整備ほか

難易度: ★★

フットランプ取付け

難易度:

クルコン目当てでPivotの3-driveAC2を取り付け。めちゃくちゃ大変だ ...

難易度: ★★★

ホーン交換

難易度:

ESP32C3 で CAN 通信

難易度:

関連リンク

この記事へのコメント

コメントはありません。

プロフィール

kz1000a1です。よろしくお願いします。
みんカラ新規会員登録

ユーザー内検索

リンク・クリップ

CANバスのデータ割り込みはヤバイ:セキュリティ法規解説 第四報 
カテゴリ:その他(カテゴリ未設定)
2024/02/18 08:39:07
NDロド 2024年式と自動車サイバーセキュリティ法規制(第三報) 
カテゴリ:その他(カテゴリ未設定)
2024/02/18 08:38:29
NDロド 2024年式と自動車サイバーセキュリティ法規制(第二報) 
カテゴリ:その他(カテゴリ未設定)
2024/02/18 08:38:07

愛車一覧

マツダ ロードスター マツダ ロードスター
税金が高くなる年式になりました
スバル レヴォーグ スバル レヴォーグ
家族がレヴォーグに乗っています。
ヘルプ利用規約サイトマップ

あなたの愛車、今いくら?

複数社の査定額を比較して愛車の最高額を調べよう!

あなたの愛車、今いくら?
メーカー
モデル
年式
走行距離(km)
© LY Corporation