查看: 736|回复: 5

CAN驱动相关。ifconfig之后,只有can234没有can01且只能接收。

[复制链接]

1

主题

3

帖子

19

积分

办事员

Rank: 1

积分
19
发表于 2022-8-29 11:15:18 | 显示全部楼层 |阅读模式
本帖最后由 Frankie 于 2022-8-29 11:53 编辑

产品名称:MIIVII Apex;产品型号:MVST39BRO1T
问题所属:驱动-CAN驱动

问题发生背景:域控搭载ubuntu/ros系统,已经开发了几个月,现在由我接手,发现can驱动有问题。

本人技术水平:
can小白,ubuntu很少接触到驱动和设备这方面。

问题描述:
1.我有一个ROS程序,需要指定can0,比如chassisManager.connect("can0"),这就意味着必须存在一个can0的设备。
2.在终端ifconfig-a,can只有can2/3/4,没有can0/1。(使用sudo modprobe can can_raw mttcan之后,出现了)
3.can线无外设连接情况下,使用cansend命令向can234里发送,在本地使用candump监听,发现监听不到数据。(尝试过百度所谓的打开回环啥的,都没用)
4.新建虚拟can-vcan,使用cansend/candump,可以正常发送和接收数据。
5.使用canoe等外设连接can线,同事发送给我的数据,我可以通过candump收到;但我发送的数据,同事只能检测到一次电平冲击,没有数据。
6.我往can0发送一次数据,candump接收不到,使用sudo ip -details -statistics link show can0,发现bus-errors是很大的数字,error-warn/pass是1,RX前三个是很大的数字,下面其余的数字都是0。


问题需求:
需要使得can01234都工作正常,也就是我在程序里指定device_name=“can3”,就可以发送接收can数据。
我应该怎么做?

谢谢!!!
Thanks!!!

回复

使用道具 举报

1

主题

67

帖子

615

积分

处长

Rank: 4

积分
615
发表于 2022-8-29 14:28:52 | 显示全部楼层
你好,是这样的,由于linux系统下关于can的基本上都是采用模块化的方式,所以需要把相关的can模块手动加载后,can功能才可以正常使用
关于can的使用可以参考一下我们的用户手册,里面有很详细的关于can的使用方法:
http://doc.miivii.com/5964246.ht ... E%E6%96%B9%E6%B3%95
另外,需要注意的是,can0/1和can2/3/4的配置方式不同,建议在配置的时候注意这方面的区别
回复

使用道具 举报

1

主题

3

帖子

19

积分

办事员

Rank: 1

积分
19
 楼主| 发表于 2022-8-29 14:32:01 | 显示全部楼层
katsura 发表于 2022-8-29 14:28
你好,是这样的,由于linux系统下关于can的基本上都是采用模块化的方式,所以需要把相关的can模块手动加载 ...

你好,这个文档我试过了,can01出现了。但是,我无论是否采用loopback on/off,还是改变其它参数,使用cansend can0 123#abcdabcd之后,candump can0都收不到,是怎么回事呢?是否需要重装驱动,该怎么做?
回复

使用道具 举报

1

主题

67

帖子

615

积分

处长

Rank: 4

积分
615
发表于 2022-8-29 14:39:16 | 显示全部楼层
Frankie 发表于 2022-8-29 14:32
你好,这个文档我试过了,can01出现了。但是,我无论是否采用loopback on/off,还是改变其它参数,使用ca ...

“cansend can0 123#abcdabcd,然后candump can0”,这样肯定不对的,can端口的工作方式是半双工,单端口是不能同时进行收发的,建议您那可以把can0和can1通过杜邦线,把can_h和can_l对接,然后can0做发,can1做收,这样应该是没问题的
回复

使用道具 举报

1

主题

3

帖子

19

积分

办事员

Rank: 1

积分
19
 楼主| 发表于 2022-8-29 15:09:04 | 显示全部楼层
katsura 发表于 2022-8-29 14:39
“cansend can0 123#abcdabcd,然后candump can0”,这样肯定不对的,can端口的工作方式是半双工,单端口 ...

噢噢,我不太懂can。还有三个小问题问一下
那为什么我前几天,把can_C线连到外设上,同事发给我的数据,我可以candump can2收到,而我cansend can2 ***的数据,他只能收到电平冲击而无数据呢?
我当时输入的命令行是:sudo ifconfig can2 down,sudo ip link set can2 type can bitrate 500000,sudo ifconfig can2 up,然后cansend can2 ***。
是不是一定要按照官方文档,好像是什么fd模式。
是不是我不需要管它是什么模式,按照文档配置好can0-4,我在上层指定比特率和数据就行?
回复

使用道具 举报

1

主题

67

帖子

615

积分

处长

Rank: 4

积分
615
发表于 2022-8-29 15:21:42 | 显示全部楼层
Frankie 发表于 2022-8-29 15:09
噢噢,我不太懂can。还有三个小问题问一下
那为什么我前几天,把can_C线连到外设上,同事发给我的数据, ...

这三个问题其实可以归结于一个问题,就是can0/1和can2/3/4的配置方式是有区别的,建议还是按照手册中的配置方式针对不同的can端口去配置不同的can
至于can和canfd的区别,可以参考以下链接:
https://blog.csdn.net/u013606261/article/details/112527526
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点我注册

本版积分规则


快速回复 返回顶部 返回列表