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