TI中文支持网
TI专业的中文技术问题搜集分享网站

AM335x CAN0 CAN1 同时使用时, 冲突问题

Hello 大家好:

我在使用AM3352时, 单独测试 can0 / can1 收发都是正常, 同时使用can0 & can1 时, can1 被 block 住, 一直在等 can0 释放 can1 才可以接收资料.

Linux Kernel : linux-rt-4.19.38+gitAUTOINC+1224cd679e-g1224cd679e

两片板子can1 接在一起, 测试步骤如下:

第一片板子

$ /bin/ip link set can0 type can bitrate 1000000;/bin/ip link set can0 up

$ /bin/ip link set can1 type can bitrate 1000000;/bin/ip link set can1 up

$ candump can0 &

$ candump can1 &

第二片板子

$ /bin/ip link set can0 type can bitrate 1000000;/bin/ip link set can0 up

$ /bin/ip link set can1 type can bitrate 1000000;/bin/ip link set can1 up

$cansend can1 -i 0x10 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

当第二片 "cansend" 后, 在第一片板子上并没看到接收到资料,之后在第一片板子停掉 can0 后

$ /bin/ip link set can0 down

马上收到  "<0x010> [8] 11 22 33 44 55 66 77 88"

该如何解决排除这个问题呢?

麻烦知道的人可以帮忙回答 谢谢

附上kernel config file

tisdk_am335x-evm-rt_defconfig.txt

Shine:

请看看下面的帖子是否有帮助。
e2e.ti.com/…/494905

jimmy yang1:

回复 Shine:

謝謝幫忙解答, 不過這個版本在"c_can.c"已經打過補丁, "c_can_platform.c" 改動不少和補丁不合

yongqing wang:

回复 jimmy yang1:

看看是否中断的问题

jimmy yang1:

回复 yongqing wang:

你好, 中断的问题要从哪边查看呢?

Shine:

回复 jimmy yang1:

我在e2e上发了帖,请关注下面的帖子。
e2e.ti.com/…/3327719

yongqing wang:

回复 jimmy yang1:

你can设置为什么模式

jimmy yang1:

回复 Shine:

Master:

/bin # /bin/ip link set can0 type can bitrate 1000000;/bin/ip link set can0 up/bin # /bin/ip link set can1 type can bitrate 1000000;/bin/ip link set can1 up/bin # ip -d -s link show can0;ip -d -s link show can12: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      /bin # candump can0 &/bin # interface = can0, family = 29, type = 3, proto = 1/bin # candump can1 &/bin # interface = can1, family = 29, type = 3, proto = 1/bin # ip -d -s link show can0;ip -d -s link show can12: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      /bin #

Salve:

/bin # /bin/ip link set can0 type can bitrate 1000000;/bin/ip link set can0 up/bin # /bin/ip link set can1 type can bitrate 1000000;/bin/ip link set can1 up/bin # ip -d -s link show can0;ip -d -s link show can12: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      /bin # cansend can1 -i 0x10 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88interface = can1, family = 29, type = 3, proto = 1/bin # ip -d -s link show can0;ip -d -s link show can12: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN qlen 10    link/can     can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          0          0          0             RX: bytes  packets  errors  dropped overrun mcast       0          0        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      3: can1: <NO-CARRIER,NOARP,UP,ECHO> mtu 16 qdisc pfifo_fast state DOWN qlen 10    link/can     can state BUS-OFF (berr-counter tx 248 rx 0) restart-ms 0     bitrate 1000000 sample-point 0.750     tq 83 prop-seg 4 phase-seg1 4 phase-seg2 3 sjw 1    c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1    clock 24000000    re-started bus-errors arbit-lost error-warn error-pass bus-off    0          0          0          1          1          1             RX: bytes  packets  errors  dropped overrun mcast       24         3        0       0       0       0          TX: bytes  packets  errors  dropped carrier collsns     0          0        0       0       0       0      /bin #

Result:

板子不是TI开发板, 两块板子分别是Master 和Salve, Master CAN0 和 Salve CAN0 连接, Master CAN1 和 Salve CAN1 连接.

从上面发现 Master端没看到异常地方, Salve端 输入"cansend" 后, can1 state 从"ERROR-ACTIVE" 变成 "BUS-OFF".

如果只使用can1, 并没有这个情况, 这种情况是kernel 配置出问题? 还是Driver的bug? 还是其他原因呢? 附件是Dual CAN 和 Single CAN 的测试结果

Single_Master.txtSingle_Salve.txtDual_Master.txtDual_Salve.txt

jimmy yang1:

回复 yongqing wang:

你好, 你指的can模式是指什么?

yongqing wang:

回复 jimmy yang1:

你可以试试改大fifo看看

jimmy yang1:

回复 yongqing wang:

我调整 c_can.h 

#define C_CAN_NO_OF_OBJECTS    64     // old:32#define C_CAN_MSG_OBJ_RX_NUM    32  // old:16#define C_CAN_MSG_OBJ_TX_NUM    32   // old:16

还是同样的情况, 这样改 fifo 正确?

赞(0)
未经允许不得转载:TI中文支持网 » AM335x CAN0 CAN1 同时使用时, 冲突问题
分享到: 更多 (0)