Linux-CAN设备问题记录
Write failed: No buffer space available
·
Linux-CAN设备问题记录
Write failed: No buffer space available
- 向can设备中写入数据时提示如上,问题为can设备的写队列满了
- 增加写队列大小
ip link set can1 txqueuelen 100 - 或者找个设备实时接收can设备发送的数据即可
- 增加写队列大小
通过ip -details -statistics link show can1或者cat /sys/class/net/can1/tx_queue_len可以看到发送队里长队为10
3: 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 ERROR-WARNING (berr-counter tx 128 rx 0) restart-ms 1000
bitrate 250000 sample-point 0.866
tq 266 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
clock 30000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 1 0 0
RX: bytes packets errors dropped overrun mcast
8 1 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0
以下是对 ip -details -statistics link show can1 命令输出的解释:
-
基础信息:
3: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 10- 3: 设备编号
- can1: 设备名称
- <NOARP,UP,LOWER_UP,ECHO>: 设备状态标志:
- NOARP: 不使用地址解析协议(ARP)
- UP: 设备已启动
- LOWER_UP: 物理层连接正常
- ECHO: 启用了回显功能
- mtu 16: 最大传输单元(MTU)为 16 字节
- qdisc pfifo_fast: 队列调度器使用 pfifo_fast
- state UNKNOWN: 当前状态未知
- mode DEFAULT: 默认模式
- group default: 设备所属的组
- qlen 10: 发送队列长度为 10
-
CAN 设备特性:
link/can promiscuity 0 can state ERROR-WARNING (berr-counter tx 128 rx 0) restart-ms 1000 bitrate 250000 sample-point 0.866 tq 266 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1 flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1 clock 30000000- link/can: 设备类型为 CAN
- promiscuity 0: 设备未设置为混杂模式
- can state ERROR-WARNING: 当前 CAN 状态为错误警告,表示有一定数量的错误,系统仍在警告状态。
berr-counter tx 128 rx 0表示发送错误计数为 128,接收错误计数为 0。 - restart-ms 1000: 重新启动等待时间为 1000 毫秒
- bitrate 250000: CAN 总线比特率为 250 kbps
- sample-point 0.866: 采样点位置为 86.6%
- tq 266: 时间量度为 266 个时间量度单元
- prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1: CAN 时间段配置:
- prop-seg (传播段): 6
- phase-seg1 (相位段 1): 6
- phase-seg2 (相位段 2): 2
- sjw (同步跳转宽度): 1
- flexcan: tseg1 4…16 tseg2 2…8 sjw 1…4 brp 1…256 brp-inc 1: FLEXCAN 模块的时间段参数:
- tseg1 (时间段 1): 范围 4 到 16
- tseg2 (时间段 2): 范围 2 到 8
- sjw (同步跳转宽度): 范围 1 到 4
- brp (比特率分频器): 范围 1 到 256,增量为 1
- clock 30000000: CAN 时钟频率为 30 MHz
-
错误计数:
re-started bus-errors arbit-lost error-warn error-pass bus-off 0 0 0 1 0 0- re-started: 重新启动次数为 0
- bus-errors: 总总线错误次数为 0
- arbit-lost: 仲裁丢失次数为 0
- error-warn: 错误警告次数为 1
- error-pass: 错误被动模式次数为 0
- bus-off: 总线关闭次数为 0
-
接收和发送统计:
RX: bytes packets errors dropped overrun mcast 8 1 0 0 0 0 TX: bytes packets errors dropped carrier collsns 0 0 0 0 0 0- RX (接收)
- bytes: 接收到的字节数为 8
- packets: 接收到的数据包数为 1
- errors: 接收错误数为 0
- dropped: 被丢弃的数据包数为 0
- overrun: 接收溢出次数为 0
- mcast: 多播数据包数为 0
- TX (发送)
- bytes: 发送的字节数为 0
- packets: 发送的数据包数为 0
- errors: 发送错误数为 0
- dropped: 被丢弃的数据包数为 0
- carrier: 载波错误数为 0
- collsns: 碰撞次数为 0
- RX (接收)
总结:
can1设备处于错误警告状态,说明有错误发生,但系统仍在运行。- 发送队列的长度设置为 10,但目前没有数据包被发送或接收。
- 检查设备状态和配置是否正常,特别是查看和处理错误警告(
error-warn),并确保 CAN 总线上的所有设备都配置正确,且总线负载在合理范围内。
更多推荐

所有评论(0)