【发布时间】:2022-07-27 06:33:20
【问题描述】:
我正在 zed 板上开发一个项目。我正在使用 Yocto 为我的 zed 板生成 linux 映像。我希望能够从用户空间控制 CAN 总线。 我一直在遵循这些指南: https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/18842496/Linux+CAN+driver https://blog.mbedded.ninja/programming/operating-systems/linux/how-to-use-socketcan-with-the-command-line-in-linux/
我在设备树中启用了 PS 的 CAN,并通过 MIO 将其输出信号路由到外部引脚。
当我启动时,这是 dmesg 的输出:
[ 1.764588] can: controller area network core (rev 20170425 abi 9)
[ 1.775204] can: raw protocol (rev 20170425)
[ 1.779457] can: broadcast manager protocol (rev 20170425 t)
[ 1.785090] can: netlink gateway (rev 20170425) max_hops=1
然后我继续使用 ip 命令设置比特率,然后启动设备。
ip link set can0 type can bitrate 500000
ip link set up can0
Dmesg 现在显示:
[ 118.504008] xilinx_can e0008000.can can0: bitrate error 0.0%
如果配置:
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING NOARP MTU:16 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:22
和ip地址:
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN group default qlen 10
link/can
现在我尝试从总线发送一些数据:
cansend can0 123#1122334455667788
Ifconfig 现在显示接口有错误:
can0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP NOARP MTU:16 Metric:1
RX packets:22 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:21 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:10
RX bytes:176 (176.0 B) TX bytes:0 (0.0 B)
Interrupt:22
而 ip addr 显示接口已关闭:
2: can0: <NO-CARRIER,NOARP,UP,ECHO> mtu 16 qdisc pfifo_fast state DOWN group default qlen 10
link/can
如果我使用 ip 命令关闭接口,然后再次备份,dmesg 会显示:
[ 378.643526] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
我的逻辑分析仪连接到 zed 板上 CAN 引脚的 CANH 和 CANL 输出,使用 CAN 发送时我看不到任何活动。 我尝试在输出上启用上拉电阻,但没有帮助。
如果我启用环回模式,candump 会显示设备现在可以正确发送数据并将其接收回自身。以下是启用环回时 ip addr 显示的内容:
2: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10
link/can
任何建议将不胜感激。
【问题讨论】:
标签: driver embedded-linux xilinx zynq socketcan