BRD601 THOR CAN接口#

硬件规格#

隔离CAN的端子引脚定义:

可选转接线图示

引脚定义

Pin

Signal

1

CAN_GND

2

CAN_H

3

CAN_L

4

N/A

指标

规格

隔离电压

3000V

隔离引脚

CAN_H, CAN_L, CAN_GND

功能和设备节点对应#

功能

说明

设备节点

CAN_0

Thor模组CAN0,终端电阻受拨码开关控制

can0

CAN_1

Thor模组CAN1,终端电阻受拨码开关控制

can1

CAN_2

Thor模组CAN2,终端电阻120Ω

can2

CAN_3

Thor模组CAN3,终端电阻120Ω

can3

使用说明#

准备工作#

设备端

#配置参数(以can0为例)
sudo ip link set can0 up type can bitrate 500000 dbitrate 5000000 sjw 4 restart-ms 1000 berr-reporting on fd on

PC端

#安装
sudo apt-get install can-utils -y

#PC端接入USB转CAN(PCAN)设备后,执行命令,输出结果为CAN接口名称:
ls /sys/class/net/ | grep -E 'can[0-9]+' | sort -V | tail -n 1

#配置
sudo ip link set can0 up type can bitrate 500000 sjw 4

收发验证#

设备发数据,PC接收#

设备端

#执行命令发送数据
sudo cansend can0 123#abcdabcd

PC端

#PC端执行命令接收数据
sudo candump can0
#如果打印如下信息,说明设备端发送数据成功
can0  123   [4]  AB CD AB CD

PC发数据,设备接收#

PC端

#执行命令发送数据
sudo cansend can0 123#abcdabcd

设备端

#执行命令接收数据
sudo candump can0
#观察设备端终端,如果打印如下信息,说明设备端发送数据成功
can0  123   [4]  AB CD AB CD

问题排查方法#


通过以下命令查看can0的状态信息

ip -d -s link show can0

#检查1是否和之前设置的值相同。
#检查2和3是否为0
#如果1,2,3都没有问题,请检查硬件连接。
#如果有问题,并且找不到问题点,请联系技术支持人员排查。

参考#

https://www.kernel.org/doc/html/latest/networking/can.html

linux-can/can-utils

隔离CAN说明#

CAN 总线虽采用差分方式传输信号,似乎并不需要相对于某个参照点来判定信号,系统只需检测两线之间的电位差就可以了。但设计者也应该考虑 CAN 接口模块的共模电压承受范围,只有满足这个条件,整个网络才能正常工作。当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口。采用隔离技术能够很好的解决共模噪声的问题,所以使用 TD CAN 系列 CAN 隔离收发器构建总线硬件端口能够很好的隔断总线上各节点的按地环路,减小节点间的地线环路电流,从而减小共模干扰。但对于干扰严重、恶劣的电气环境,仍然推荐设计者使用屏蔽双绞线,通过屏蔽层将总线上各通信节点的总线参考地联接起来,减小共模传导及辐射干扰,提高系统通信可靠性。

CAN问题排查#

现象一:设备开机后,can无法通信#

排查项1:检查硬件环境是否正常#

步骤1:检查接口是否损坏#

  • 如有明显接口损坏,则直接转米文售后进行处理。

  • 如无损坏,执行”步骤2:交叉验证”。

步骤2:交叉验证(如有条件)#

线缆以及发can数据的外设,接到另一台设备上,查看能否正常通信。

  • 如另一台设备使用一样的配置方法可正常通信,则大概率为单台硬件问题,需要联系米文售后进行处理。

  • 如另一台设备也无法正常通信,则建议检查线缆以及can外设是否存在故障。

  • 如无其他设备验证可使用设备本身can口短接,执行”步骤3:接口短接,验证功能是否正常”。

步骤3:接口短接,验证功能是否正常#

使用杜邦线将故障can口和其他can口进行短接,使用cansend candump进行收发验证。 can引脚定义以及收发验证方法详见:https://doc.miivii.com/Apex-AD10-User-Manual-CH/wiki/Apex-AD10-CAN.html

  • 如两个can口可正常通信,则建议检查线缆以及can外设是否存在故障。

  • 如两个can口不可正常通信,则执行”排查项2:检查can是否正确配置”。

排查项2:检查can是否正确配置#

步骤1:使用 ifconfig -a 查看接口状态#

打开终端,输入指令:ifconfig -a

  • 如不能识别故障can,则执行”步骤2:检查can是否进行了初始化配置(NV mttcan默认不加载)”。

  • 如能识别故障can节点,则执行”步骤3:配置can参数”。

步骤2:检查can是否进行了初始化配置(NV mttcan默认不加载)#

新加载can节点:

sudo modprobe can
sudo modprobe can_raw
sudo modprobe mttcan

重新配置can节点后,使用ifconfig -a验证能否识别can节点。

  • 如能识别can节点,则执行”步骤3”。

  • 如不能识别can节点,则大概率为单台硬件问题,需要联系米文售后进行处理。

步骤3:配置can参数#

输入命令:sudo ip link set can2 up type can bitrate 500000 dbitrate 5000000 restart-ms 1000 berr-reporting on fd on

//该参数配置了can接口的波特率,其中500K是使用can2.0协议传输的时候使用的速率,5M是使用canfd协议传输的时候使用的速率。

需要注意:can接口波特率一定要与发can数据的外设波特率一致

  • 如重新配置后,can可正常通信,则问题解决。

  • 如重新配置后,can仍不可正常通信,则执行”排查项3:重新刷写镜像验证是否为软件环境导致”。

排查项3:重新刷写镜像验证是否为软件环境导致#

步骤1:刷写镜像#

刷写镜像方法详见:https://doc.miivii.com/Apex-AD10-User-Manual-CH/wiki/Apex-AD10-%E5%9B%BA%E4%BB%B6%E7%83%A7%E5%86%99.html

刷写镜像完成后,重新配置can节点进行can通信验证。

  • 刷写镜像后,can可正常通信,则证明为系统软件环境导致,需要客户自己排查软件环境。

  • 刷写镜像后,仍无法正常通信,则将设备连接外网后,则执行”步骤2:获取log”。

步骤2:获取log#

则将设备连接外网后,打开终端输入:

curl -sSL https://doc.miivii.com/scripts/run_miivii_diagnostic.sh | bash -s can

并将日志导出,上传至故障工单系统(分析由米文售后工程师执行)。

现象二:can口通信一段时间后阻塞#

排查项1:检查外部环境#

步骤1:确认现场can总线的节点是否做共地处理#

  • 如未做共地处理,请做共地处理。

  • 如已做共地处理,请执行”排查项2:检查can txqueuelen 配置”。

排查项2:检查can txqueuelen 配置#

步骤1:查看txqueuelen大小#

打开终端,输入:

sudo ip link show can0 | grep txqueuelen

步骤2:设置 txqueuele 最大为65536#

打开终端,输入:

sudo ip link set can0 txqueuelen 6553

  • 如设置完成后,can通信正常,用户可根据实际需求,调整一个适合的值。

  • 如设置完成后,can通信仍阻塞,则在问题复现时将设备连接外网,打开终端输入:curl -sSL https://doc.miivii.com/scripts/run_miivii_diagnostic.sh | bash -s can 将日志导出上传故障工单系统(分析由米文售后工程师执行)。