2022-07-15 06:32 AM
I am trying to set the CAN bus rx filter so that only the CAN message IDs that I specify in the can_lld_cfg.c file will be received. I tried to use the CAN classic filter setup for extended IDs. I set the mask to all ones (0x0fFFFFFFUL) so, it should only allow IDs with exact matches. The snippet of the filter is below:
/* rx extended buffer filters */
{
{0x18fff180UL,0x0fFFFFFFUL,CAN_FILTER_CLASSIC,CAN_FIFO0}, /* Extended filter 0*/
{0x18ff1680UL,0x0fFFFFFFUL,CAN_FILTER_CLASSIC,CAN_FIFO0}, /* Extended filter 1*/
},
/* number of standard filters */
0U,
/* number of extended filters */
2U,
I would expect that the above filter would only allow exact matches to the IDs to be received and only if IDs matching 0x18fff180UL or 0x18ff1680UL would be allowed.
However, I am sending CAN IDs 18FE4DFE, 18FE4EFE, 18FEF1FE and 18FD16FE and all of them are being received by the system. I don't understand why this is happening, since none of the IDs match the filter and they should all be rejected.
I tried to use the CAN_FILTER_RANGE setting such as this.
{0x18fff180UL,0x18fff180UL,CAN_FILTER_RANGE ,CAN_FIFO0}, /* Extended filter 0*/
But this still fails to filter out IDs that are not set in the filter. The processor is SPC582B60E1 and the can_lld_cfg.c file is attached. What am I doing wrong? Thanks.