单节点CAN总线持续报错致通信失效问题求助
单节点CAN总线发送报文触发大量ERROR-PASSIVE报错及隐性失效问题
场景
- 设备配置:搭载USB2CAN适配器的PC
- 总线状态:仅本地一个节点在线,另一节点(车辆线缆)可能断开连接
- 问题现象:单节点发送CAN报文时,每秒产生大量ERROR-PASSIVE报错,最终导致CAN总线隐性失效——重启PC后CAN接口状态显示正常,但无法传输任何报文
- 尝试情况:使用
cansend即可触发故障,更换gs_usb驱动(python-can)、调整qlen参数均无效
接口状态信息
$ ip a l can0 4: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP group default qlen 10 link/can # qlen已调至100000,无效;线缆连接后状态恢复为ERROR-ACTIVE;断开线缆时error-warn+1,error-pass每秒增长约2000 $ ip -details -statistic link show dev can1 5: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 100000 link/can promiscuity 0 minmtu 0 maxmtu 0 can state ERROR-PASSIVE restart-ms 0 bitrate 500000 sample-point 0.875 tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1 gs_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1 clock 48000000 re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 3 10578541 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 RX: bytes packets errors dropped missed mcast 84628424 10578553 0 0 0 0 TX: bytes packets errors dropped carrier collsns 2 1 0 0 0 0
其他信息
- 操作系统:Debian(Crunchbang++)
- CAN配置命令:
ip link set can1 type can bitrate 500000 - 额外情况:换用其他厂商USB转CAN适配器仍出现相同问题;仅断电重启适配器可恢复;软件断电USB端口无效;厂商仓库存在类似未解决问题
设备日志
$ lsusb --tree -v /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 5000M ID 1d6b:0003 Linux Foundation 3.0 root hub |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 5000M ID 0424:5534 Microchip Technology, Inc. (formerly SMSC) Hub /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 480M ID 1d6b:0002 Linux Foundation 2.0 root hub |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M ID 0424:2134 Microchip Technology, Inc. (formerly SMSC) Hub |__ Port 2: Dev 6, If 0, Class=Human Interface Device, Driver=usbhid, 12M ID 0eef:c000 D-WAV Scientific Co., Ltd Multitouch Capacitive Touchscreen eGalaxTouch EXC3188-4643-08.00.00.00 Sirius_4643 PCAP3188UR Series [IIyama Prolite PLT1932MSC |__ Port 3: Dev 7, If 0, Class=Hub, Driver=hub/4p, 480M ID 1a40:0101 Terminus Technology Inc. Hub |__ Port 1: Dev 9, If 1, Class=Application Specific Interface, Driver=, 12M ID 1d50:606f OpenMoko, Inc. Geschwister Schneider CAN adapter |__ Port 1: Dev 9, If 0, Class=Vendor Specific Class, Driver=gs_usb, 12M ID 1d50:606f OpenMoko, Inc. Geschwister Schneider CAN adapter |__ Port 2: Dev 10, If 0, Class=Vendor Specific Class, Driver=gs_usb, 12M ID 1d50:606f OpenMoko, Inc. Geschwister Schneider CAN adapter |__ Port 2: Dev 10, If 1, Class=Application Specific Interface, Driver=, 12M ID 1d50:606f OpenMoko, Inc. Geschwister Schneider CAN adapter $ dmesg ... [ 9.697798] usb 2-1.3.2: New USB device found, idVendor=1d50, idProduct=606f, bcdDevice= 0.00 [ 9.697802] usb 2-1.3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 9.697805] usb 2-1.3.2: Product: USB2CAN v1 [ 9.697807] usb 2-1.3.2: Manufacturer: InnoMaker [ 9.697810] usb 2-1.3.2: SerialNumber: 002C00... ... [ 10.154148] gs_usb 2-1.3.1:1.0: Configuring for 1 interfaces [ 10.154921] gs_usb 2-1.3.2:1.0: Configuring for 1 interfaces [ 10.155372] usbcore: registered new interface driver gs_usb ... [ 12.461996] IPv6: ADDRCONF(NETDEV_CHANGE): can0: link becomes ready ... [ 15.439110] IPv6: ADDRCONF(NETDEV_CHANGE): can1: link becomes ready [ 15.572371] can: controller area network core [ 15.572501] NET: Registered protocol family 29 [ 15.589581] can: raw protocol
Python CAN Viewer日志
Count Time dt ID DLC Data (changed) 17 0.002219 0.000000 0x004 8 00 30 00 00 00 00 80 00 208182 122.054997 0.000723 0x024 8 00 30 00 00 00 00 80 00 # 我的测试报文 14 0.000000 0.000000 0x123 2 12 34
期望与待测试方案
- 期望效果:移除CAN连接器后发送报文仅触发单次错误,无报错级联
- 待测试方案:
- 启用loopback模式
- 用虚拟CAN处理未应答错误
- 配置适配器自ACK报文
内容的提问来源于stack exchange,提问作者The Mark
相关产品推荐
相关产品推荐

