写:没有可用的缓冲区空间socket-can / linux-can

时间:2016-11-04 13:51:58

标签: beagleboneblack can-bus socketcan

我正在运行一个带有两个CAN通道的程序(使用TowerTech CAN Cape TT3201)。

两个通道是can0(500k)和can1(125k)。 can0通道工作正常,但can1运行写入:没有缓冲区空间可用错误。

我使用ValueCAN3 / VehicleSpy来检查消息。

这是在我运行程序之前。 can0和can1似乎都发送,但只有can0出现在VehicleSpy中。

root@cantool:~# cansend can0 100#00 
root@cantool:~# cansend can1 100#20

enter image description here

这是在我尝试运行程序之后

root@cantool:~# cansend can1 100#20 
write: No buffer space available 
root@cantool:~# cansend can0 111#10

enter image description here

当我的程序运行时:我在can1

上发送的所有消息都出现此错误
2016-11-02 15:36:03,052 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 
2016-11-02 15:36:03,131 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af81118    010    6    00 00 00 00 00 00 
2016-11-02 15:36:03,148 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f81018    010    6    00 00 00 00 00 00 
2016-11-02 15:36:03,174 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    0af87018    010    3    00 00 00 
2016-11-02 15:36:03,220 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f89018    010    4    00 00 00 00 
2016-11-02 15:36:03,352 - can.socketcan.native.tx - WARNING - Failed to send: 0.000000    12f83018    010    1    00 

然而,有时整个程序运行良好(如果模块重新启动或某些随机实例)。

我该如何解决这个问题?

root@cantool:~# uname -r 
4.1.15-ti-rt-r43
在做了一些挖掘之后,我发现了这个

 root@cantool:-#ip -details link show can0
 4:can0: <NOARP,UP,LOWER_UP, ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
      link/can promiscuity 0
      can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 100
      bitrate 500000 sample-point 0.875
      tq 125 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
      c_can: tseg1 2..16 tseg2 1..8 sjw 1..4 brp 1..1024 brp-inc 1
      clock 24000000
 root@cantool:-#ip -details link show can1
 5: can1: <NOARP,UP,LOWER_UP, ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10
      link/can promiscuity 0
      can state STOPPED restart-ms 100
      bitrate 125000 sample-point 0.875
      tq 500 prop-seg 6 phase-seg1 7 phase-seg2 2 sjw 1
      c_can: tseg1 2..16 tseg2 2..8 sjw 1..4 brp 1..64 brp-inc 1
      clock 8000000

事实证明,由于某种原因,can1已停止

然而,当我尝试:

ip link set can1 type can restart 
RNETLINK answers: Invalid argument

2 个答案:

答案 0 :(得分:3)

使用can0启用sudo ifconfig can0 up界面后,请运行:

sudo ifconfig can0 txqueuelen 1000

这将增加排队规则的每个内核传输队列允许的帧数。更多信息here

  

...有时整个程序运行正常(如果模块重启或某些随机实例)。

当你重新启动SocketCAN接口时,它的工作原理是你可以清理足够的缓冲空间来使其工作。

答案 1 :(得分:0)

尝试ifconfig can1 up它应该可以正常工作......