Welcome to the CAN-bus Wiki project

What is CAN Message Filtering

The two most common terms used are accceptance mask and acceptance code. Let's see how Allen Pothoof apothoof@hotmail.com explains this:

In an ideal world, you would have a filter for each message you wanted to receive. That would allow you to reject any messages you aren't interested in. But we don't live in a perfect world. If you don't have enough filters, you have to “open” the filters, risking receiving messages you don't care about. Any message you receive but don't want, you have to throw away in your applications software. This costs code space and CPU cycles. Having the hardware do it for you is “better”.

As for the difference between acceptance registers and mask registers, it has to do with how the micro controller builds the filter.

For some micro controllers, such as Infineon, you only have 1 “filter.” What you are telling the CAN controller is, in effect, “these bits, which I have set, are the only bits I am interested in and the corresponding bits in the identifier must also be set”.

In mathematical terms, you AND the filter with the identifier and, if the result is the same as the filter, the identifier/message is accepted.

On other micro controllers, such as the PIC and Motorola parts, you have two parts to the filter. The mask says “these bits, which I have set, are the only bits I am interested in”. The acceptance register says “for those bits which correspond to the mask, the identifier must match the bits in the acceptance register”.

Again, in mathematical terms, you AND the mask with the identifier; if the result is the acceptance filter, the identifier/message is accepted.

Note that some micro controllers use inverted bitmasks; i.e., the bits in the mask are flipped before the AND operation. Is one way better than the other? It would seem that the two-part filter would do a better job but in the real world, I am not sure it does. However, my observations are biased by the fact that the Infineon chips have 16 mailboxes/filters while the Microchip parts I have used only have two receive buffers/filters. As a practical matter, that has made the filtering on the Microchip parts worthless for me.


QR Code
QR Code can_faq:can_message_filtering (generated for current page)