嵌入式爱好者

查看: 7386|回复: 10

[Linux] imx8mq板卡使用cangen工具发生错误,希望帮忙解决

[复制链接]

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

扫一扫,手机访问本帖
发表于 2021-11-15 10:45:07 | 显示全部楼层 |阅读模式

板卡:imx8mq
系统:linux 5.4.3



使用手册中提供的can测试方法,发生错误,如下图所示:
主要错误有两处;
1. mcp25xxfd spi0.0 can0: CAN Bus error experienced
2,write: No buffer space available


手册中提供的can测试方法:


回复

使用道具 举报

0

主题

143

帖子

534

积分

LS1012A通行证LS1043A\46A通行证A40i/T3/T507通行证i.MX8MM通行证RK3399通行证LS1028A通行证i.MX8MP通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU11xx通行证FCU1201通行证FCU2201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证

发表于 2021-11-17 09:07:27 | 显示全部楼层
您这个应该是CAN的数据没有发送出去,导致把开发板缓冲区占满了。
您8mq的can有外接其他can设备吗?连接的设备接收到信息了吗?
或者如果您外接了设备,那个设备支持CAN FD传输吗?如果接的设备只支持普通can数据传输,那开发板也会有这种现象。

点评

我如果想在代码里面完成socketcan的初始化,应该怎么做,才能避免这个错误的发生。同样的代码,我在imx6q板卡上面执行不会出错  详情 回复 发表于 2021-11-17 12:01
嗯嗯,谢谢您回复,我把两块板卡通过can连在一起,确实没这个现象了。 但是出现了另外一个奇怪的问题,需要咨询一下您,如下图所示: root@imx8mqevk:~# ./cansend can0 123#12345678 [ 2060.920669] mcp25xxfd s  详情 回复 发表于 2021-11-17 12:00
点评回复 支持 1 反对 0

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-15 10:46:56 | 显示全部楼层
图片怎么没有附上,,,相关图片如下:

//--------------------------------------------------------------------------------------
root@imx8mqevk:~# uname -a
Linux imx8mqevk 5.4.3 #1 SMP PREEMPT Wed Nov 11 07:48:36 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux
root@imx8mqevk:~# cat /proc/version
Linux version 5.4.3 (lixinguo@1ffe9f7b637e) (gcc version 9.2.0 (GCC)) #1 SMP PREEMPT Wed Nov 11 07:48:36 UTC 2020
root@imx8mqevk:~#//--------------------------------------------------------------------------------------

//--------------------------------------------------------------------------------------
点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-15 10:47:57 | 显示全部楼层
root@imx8mqevk:~#
root@imx8mqevk:~# ifconfig can0 down
root@imx8mqevk:~#  ip link set can0 up type can bitrate 500000 dbitrate 2000000 fd on
[  105.895458] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready
root@imx8mqevk:~#  ifconfig can0 up
root@imx8mqevk:~#
root@imx8mqevk:~# cangen can0 -I i -m -v -n 100 -g 10
  can0  000##0.9B.1C.D9.68.A6.5F.80.38.9B.1C.D9.68
[  123.242075] mcp25xxfd spi0.0 can0: CAN Bus error experienced
  can0  00000001#21.D2.7E.0C.5B.D8.34.77
  can0  002#R8
  can0  003#R8
  can0  004#12.53.84.7F.8B.22.30.46
  can0  00000005##1.4A.DF
  can0  006##0.E5.41.A7.07.BD.1A.98.49.E5.41.A7.07.BD.1A.98.49.E5.41.A7.07.BD.1A.98.49.E5.41.A7.07.BD.1A.98.49
  can0  007##1.99.E7.86.27.26
  can0  00000008##1.CD.EF.9F.64.B0
  can0  009#0B.79.95.36.99.7A.E0.3B
  can0  00A#
  can0  0000000B##1.1A.88.D9.35.F4
  can0  0000000C#7F.9A.F5.38.C8.4F.6A.50
  can0  00D##1.8B.97.FD.3F.81.0D.6F.03.8B.97.FD.3F
  can0  00E##1
  can0  0000000F#1B.CD.D0.69.E4.7E.A7
  can0  010#94.1F.08.17.8D.D5.91.49
write: No buffer space available
root@imx8mqevk:~# cangen can0 -I i -m -v -n 100 -g 10
  can0  000##0
write: No buffer space available
root@imx8mqevk:~# cangen can0 -I i -m -v -n 100 -g 10
  can0  000##0.AD.89.5A
write: No buffer space available
root@imx8mqevk:~#
点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-17 12:00:13 | 显示全部楼层
wjy 发表于 2021-11-17 09:07
您这个应该是CAN的数据没有发送出去,导致把开发板缓冲区占满了。
您8mq的can有外接其他can设备吗?连接的 ...

嗯嗯,谢谢您回复,我把两块板卡通过can连在一起,确实没这个现象了。
但是出现了另外一个奇怪的问题,需要咨询一下您,如下图所示:
root@imx8mqevk:~# ./cansend can0 123#12345678
[ 2060.920669] mcp25xxfd spi0.0 can0: tefif: fifo 0 not pending - tef data: id: 00000000 flags: 00000000, ts: 00000000 - this may be a problem with spi signal quality- try reducing spi-clock speed if this can get reproduced


这里虽然报错了,但是另外一个板卡是imx6,确实可以通过candump收到来自imx8的can报文,想问一下这个问题出错是什么原因造成的,因为我发现当我发送大量报文时,会发送失败。
这里的cansend程序是我基于can-utils-2020.12.0更改的,代码在附件中,相较于源码,我只是在ioctl之前增加了system相关操作,如下所示:


        /* check command line options */
        if (argc != 3) {
                print_usage(argv[0]);
                return 1;
        }

    char stop[] = "ifconfig can0 down";
    system(stop);
    char ip_set[] = "ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on";
    system(ip_set);
    char start_cmd[] = "ifconfig can0 up";
    system(start_cmd);

        /* parse CAN frame */
        required_mtu = parse_canframe(argv[2], &frame);
        if (!required_mtu){
                fprintf(stderr, "\nWrong CAN-frame format!\n\n");
                print_usage(argv[0]);
                return 1;
        }


cansend-err

cansend-err

cansend-modify.zip

2.72 KB, 下载次数: 1, 下载积分: 贡献 1

cansend-modify代码

点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-17 12:01:59 | 显示全部楼层
wjy 发表于 2021-11-17 09:07
您这个应该是CAN的数据没有发送出去,导致把开发板缓冲区占满了。
您8mq的can有外接其他can设备吗?连接的 ...

我如果想在代码里面完成socketcan的初始化,应该怎么做,才能避免这个错误的发生。同样的代码,我在imx6q板卡上面执行不会出错
点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-18 11:27:31 | 显示全部楼层
@wjy 麻烦您帮忙看一下~~
点评回复 支持 反对

使用道具 举报

0

主题

143

帖子

534

积分

LS1012A通行证LS1043A\46A通行证A40i/T3/T507通行证i.MX8MM通行证RK3399通行证LS1028A通行证i.MX8MP通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU11xx通行证FCU1201通行证FCU2201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证

发表于 2021-11-18 16:23:37 | 显示全部楼层
6q是can,8mq是can fd,他们发的数据位数要求不一样,您最好找两块都是can fd的开发板进行测试。
如果实在要用这两个,那就试试把速率降一些,
char ip_set[] = "ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on";   把fd on去掉,把2000000降成500000

socketcan的我们没有试过,您在IP配完之后加个延时试试。

点评

@wjy 再次感谢您的回复,我找了用两块imx8mq进行报文交互,确实没出现那个问题了,但是按照您说的: 如果实在要用这两个,那就试试把速率降一些, char ip_set[] = "ip link set can0 type can bitrate 500000 dbi  详情 回复 发表于 2021-11-19 11:58
点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-19 11:58:16 | 显示全部楼层
wjy 发表于 2021-11-18 16:23
6q是can,8mq是can fd,他们发的数据位数要求不一样,您最好找两块都是can fd的开发板进行测试。
如果实在 ...

@wjy 再次感谢您的回复,我找了用两块imx8mq进行报文交互,确实没出现那个问题了,但是按照您说的:
如果实在要用这两个,那就试试把速率降一些,
char ip_set[] = "ip link set can0 type can bitrate 500000 dbitrate 2000000 fd on";   把fd on去掉,把2000000降成500000


我也试了一下,去掉fd on以后,can设备是不支持的,如下所示:
root@imx8mqevk:~#
root@imx8mqevk:~# ifconfig can0 down
root@imx8mqevk:~#  ip link set can0 up type can bitrate 500000 dbitrate 2000000
RTNETLINK answers: Operation not supported
root@imx8mqevk:~#
root@imx8mqevk:~#  ip link set can0 up type can bitrate 500000 dbitrate 500000
RTNETLINK answers: Operation not supported
root@imx8mqevk:~#


----------------

那只能用都是canfd的板卡进行can收发么?没有别的解决办法可以满足can和canfd同时进行收发么?比如imx6q与imx8mq







点评回复 支持 反对

使用道具 举报

2

主题

9

帖子

21

积分

i.MX8MM通行证i.MX6Q通行证

 楼主| 发表于 2021-11-22 10:16:46 | 显示全部楼层
@wjy 麻烦帮忙看一下,多谢了
点评回复 支持 反对

使用道具 举报

0

主题

143

帖子

534

积分

LS1012A通行证LS1043A\46A通行证A40i/T3/T507通行证i.MX8MM通行证RK3399通行证LS1028A通行证i.MX8MP通行证AM5718通行证Hi3519A通信证AM335x通行证i.MX6UL通行证i.MX RT通行证i.MX6Q通行证XX18通行证TCU通行证FDU产品通行证FCU1401通行证FCU1301通行证FCU11xx通行证FCU1201通行证FCU2201通行证FCU2301/FCU2302通行证FCU2401通行证5G转接卡通行证

发表于 2021-11-23 08:47:05 | 显示全部楼层
抱歉我们目前没有可以满足can和canfd同时进行收发的方法,后期可以帮您实验一下,但是需要时间。
可以先帮您记录一下,之后如果试出来了给您回复。
点评回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋| 飞凌嵌入式 ( 冀ICP备12004394号-1 )

GMT+8, 2024-3-29 17:34

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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