FlexCAN CAN 控制器驱动

作者:Marc Kleine-Budde <mkl@pengutronix.de>, Dario Binacchi <dario.binacchi@amarulasolutions.com>

RTR 帧接收的开启/关闭

对于大多数 FlexCAN IP 核,该驱动支持两种 RX 模式:

  • FIFO

  • 邮箱

较旧的 FlexCAN 核(集成在 i.MX25、i.MX28、i.MX35 和 i.MX53 SOC 中)只有在控制器配置为 RX-FIFO 模式时才能接收 RTR 帧。

RX FIFO 模式使用深度为 6 个 CAN 帧的硬件 FIFO,而邮箱模式使用深度可达 62 个 CAN 帧的软件 FIFO。借助更大的缓冲区,邮箱模式在高系统负载情况下表现更佳。

由于接收 RTR 帧是 CAN 标准的一部分,所有 FlexCAN 核都以支持 RTR 接收的模式启动。

通过“rx-rtr”私有标志,可以放弃接收 RTR 帧的能力,但代价是失去接收 RTR 消息的能力。这种权衡在某些使用场景下是有益的。

“rx-rtr” 开启

接收 RTR 帧。(默认)

CAN 控制器能够且将会接收 RTR 帧。

在某些 IP 核上,控制器无法在性能更优的“RX 邮箱”模式下接收 RTR 帧,而会转而使用“RX FIFO”模式。

“rx-rtr” 关闭

放弃接收 RTR 帧的能力。(并非所有 IP 核都支持)

此模式启用“RX 邮箱模式”以获得更好的性能,在某些 IP 核上,RTR 帧将无法再被接收。

该设置只能在接口关闭时更改

ip link set dev can0 down
ethtool --set-priv-flags can0 rx-rtr {off|on}
ip link set dev can0 up