0

我有一个在 imx CPU 上运行的自定义构建 linux 2.6。CAN与外部节点的通信就像一个魅力,但是当我在终端中使用“candump can0”时(当我使用usb-CAN加密狗在我的主机上运行相同的应用程序时,我从我的应用程序发送到节点的帧不会被打印出来)不会出现此问题)。

当发送扩展 CAN 帧时,它们会使用 candump 显示。

我知道过滤发送的消息可能很方便,但我应该可以选择。

欢迎提供任何线索。我在想可能是驱动程序中的一些过滤导致了这种情况。

FlexCAN 驱动程序具有以下配置文件:

中止 br_propseg dump_rx_mb loopback state 唤醒 bcc br_pseg1 dump_xmit_mb maxmb std_msg xmit_maxmb 比特率 br_pseg2 ext_msg
modals 子系统 boff_rec br_rjw fifo power tsyn br_clksrc 驱动程序监听 smp uevent br_presdiv
dump_reg local_priority srx_dis wak_src

4

2 回答 2

1

can-utils 包需要 SocketCAN,它已集成到股票内核 2.6.30 中。

如果您使用的是 SocketCAN,您应该能够打开环回以接收从您的接口传输的消息(并且它们实际上必须通过线路传输才能通过环回接收)。

来自 bash:

ifconfig can0 down
ip link set can0 type can loopback on
ifconfig can0 up
candump can0|grep C0FFEE

在另一个终端:

cansend can0 00C0FFEE#00112233445566
于 2016-10-13T17:48:13.920 回答
0

好吧,我已经在这个问题上多次但放弃了。但知道我偶然发现了解决方案:

FlexCAN 文件夹中名为 srx_dis 的设置文件控制此行为。因此,如果您希望能够读取您在 imx53_loco 上发送的 CAN 帧,请执行以下操作:

ifconfig can0 down
echo 0 > /sys/bus/platform/devices/FlexCAN.0/srx_dis
ifconfig can0 up

我想这样做的原因是为了在同一设备上创建一个可以记录所有 CAN 帧的服务工具。

于 2016-10-18T11:53:05.923 回答