This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM335x Dcan如何实现过滤?



最近使用BBB板在做CAN相关实验,想在驱动层做DCAN的过滤,但手册中并没有写的很清楚,如何使用过滤,在linux4.2.0内核源码中找到设置CAN Message Objects的相关代码:(drivers/net/can/c_can.c)

但无论怎么设置mask和id,A板使用cansend发送任意CAN帧均能在B板使用candump收到,没有起到过滤作用。请问DCAN的过滤机制究竟是如何实现的?

  • 有个滤过数组,把你不需要接收的加进去就可以了,在CAN初始化配置的里面。

  • 您好,

    我在AM335X 手册DCAN相关章节只看到MASK 寄存器位怎么设置,也许是英语不好,没太看明白如何配置过滤器。

    您指的初始化函数是不是指 内核 c_can.c中c_can_configure_msg_objects(dev)函数?

    我仔细看了代码 内核版本 4.2.0,但是并没有找到相关过滤数组的配置,能否再进一步指导一下?

  • 手册看 ,根据你选择的DCAN引脚看乡音寄存器。之后看IF1CMD的寄存器。一共可以添加64个无效消息。寄存器地址从baseAdd + (0x100 + (((regNum) - 1) * 0x20,baseAdd是你DCAN1或者DCAN0的物理地址,regNum是你滤过的数量。然后如何配就看我刚刚告诉你的IF1CMD这个寄存器各位是什么意思。