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 正确?
TI中文支持网