ESP32を使って1Mbpsで流れているバスを全部拾うときついので、自分の必要なIDだけHW側でフィルタする。
使っているマイコンはESP32-C6だけど他のシリーズでも同じはず。
例)0x03Aのスタンダードフレームのみ読むとき
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(PIN_CANTX, PIN_CANRX, TWAI_MODE_NORMAL);
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_1MBITS();
twai_filter_config_t f_config;
f_config.acceptance_code = (0x03A << 21);
f_config.acceptance_mask = ~(0x1FF << 21);
f_config.single_filter = true;
twai_driver_install(&g_config, &t_config, &f_config);
twai_start();
解説
図の一番右がビットの並びの一番左。
なので、acceptance_codeで03AのIDをセットして、acceptance_maskで(図の)左のほうをマスクする。