GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 09 CAN

1 CAN 总线概述

CAN 总线协议(Controller Area Network,控制器局域网总线)是德国 BOSCH(博世)公司于 1986 年研发的一种串行通讯协议总线。GM-3568JHF 开发板配备了 2 路 CAN 接口,基于 RK3568J 处理器的集成 CAN 控制器实现,为工业控制、汽车电子和设备互联提供了可靠的通信解决方案。

本篇教程基于ShiMetaPi 研发的FPGA+ARM开发板------GM-3568JHF展开。

1.1 CAN 总线技术特性

|-------|-----------------------------|
| 参数 | 规格 |
| 协议标准 | ISO 11898-1 (CAN 2.0A/2.0B) |
| 接口数量 | 2 路独立 CAN 接口 |
| 传输介质 | 双绞线 |
| 网络拓扑 | 总线型 |
| 传输距离 | 最大 1000 米 (5Kbps) |
| 最大节点数 | 110 个节点 |
| 数据帧长度 | 0-8 字节 |
| 仲裁机制 | 非破坏性位仲裁 |

1.2 CAN 协议特点

技术优势

  • 多主机通信: 支持多个节点同时发送数据

  • 非破坏性仲裁: 高优先级消息优先传输

  • 错误检测: 强大的错误检测和处理机制

  • 实时性强: 确定性的消息传输延迟

  • 可靠性高: 差分信号传输,抗干扰能力强

应用领域

  • 汽车电子: 发动机管理、车身控制、仪表系统

  • 工业自动化: PLC 控制、传感器网络、执行器控制

  • 医疗设备: 医疗仪器互联、监护设备通信

  • 船舶系统: 导航设备、动力系统控制

  • 楼宇自动化: 照明控制、空调系统、安防设备

2 GM-3568JHF CAN 接口配置

根据产品规格,GM-3568JHF 开发板提供 2 路 CAN 接口,满足多种工业应用需求。

2.1 CAN 硬件连接

开发板和外部设备 CAN 接线如下:

|-------|-------|
| 开发板 | 外部设备 |
| CAN_L | CAN_L |
| CAN_H | CAN_H |

2.2 CAN 通讯测试

本次测试使用 CAN 分析仪进行测试,将两个设备的 H 端和 L 端连接即可

检查接口

检查开发板 can0 和 can1 接口是否有生成

复制代码
root@linaro-alip:/# ifconfig -a
can0: flags=128<NOARP>  mtu 16
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 54

can1: flags=128<NOARP>  mtu 16
        unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  txqueuelen 10  (UNSPEC)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 55
···

参数设置

开发板设置波特率并进行测试(本次以 CAN0 为测试样本)

复制代码
# 将 CAN0 接口关闭
sudo ip link set can0 down
# 设置比特率为 250000
sudo ip link set can0 type can bitrate 250000
# 将CAN0 接口启用
sudo ip link set can0 up

# 发送(标准帧,数据帧,ID:7ff,date:11223344556677)
cansend can0 -i 0x7ff 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

# 接收
candump can0

测试结果

  • 开发板测试结果:
  • CAN 分析仪测试效果:

3 CAN 网络诊断和调试

3.1 使用 cansniffer 进行网络分析

复制代码
# 安装 cansniffer
sudo apt-get install can-utils

# 启动网络嗅探
cansniffer can0

# 带过滤的嗅探
cansniffer can0 -c 0x100-0x200

# 保存日志
candump can0 -L > can_log.txt

3.2 网络负载测试

复制代码
# 生成测试流量
cangen can0 -g 10 -I 123 -L 8

# 测试网络带宽
canbusload can0@250000

# 压力测试
for i in {1..1000}; do
    cansend can0 123#DEADBEEF
done

4 故障排除

4.1 CAN 接口无法启动

检查步骤:

复制代码
# 检查内核模块
lsmod | grep can

# 手动加载 CAN 模块
sudo modprobe can
sudo modprobe can-raw
sudo modprobe can-dev

# 检查设备树配置
dmesg | grep can

# 检查硬件连接
cat /proc/interrupts | grep can

4.2 通信错误或丢包

诊断方法:

复制代码
# 检查错误统计
ip -s link show can0

# 查看错误详情
cat /proc/net/can/stats

# 检查总线状态
candump can0 -e

# 调整波特率和时序
sudo ip link set can0 type can bitrate 125000 sample-point 0.75

4.3 网络冲突和仲裁问题

解决方案:

复制代码
# 检查网络负载
canbusload can0@250000

# 分析消息冲突
cansniffer can0 -c

# 优化消息优先级
# 使用较低的 CAN ID 获得更高优先级

4.4 硬件连接问题

检查要点:

  • 终端电阻: 确保网络两端有 120Ω 终端电阻

  • 线缆质量: 使用双绞线,避免长距离传输

  • 接地: 确保良好的信号地连接

  • 电源: 检查 CAN 收发器电源供应

    测试回环模式

    sudo ip link set can0 type can bitrate 250000 loopback on
    cansend can0 123#DEADBEEF
    candump can0

原文链接: https://forum.shimetapi.cn/wiki/zh/fpga-arm/GM-3568JHF/Peripherals/ch10-CAN.html

相关推荐
未来之窗软件服务2 小时前
幽冥大陆(八十)Win7环境下ARM架构开发—东方仙盟练气期
arm开发·架构·仙盟创梦ide·东方仙盟
XXYBMOOO12 小时前
内核驱动开发与用户级驱动开发:深度对比与应用场景解析
linux·c++·驱动开发·嵌入式硬件·fpga开发·硬件工程
白狐_79818 小时前
数字集成电路设计核心考点与 Verilog 实战指南
fpga开发
FPGA_ADDA18 小时前
ORIN+FPGA 高速采集AI 智能处理板
人工智能·fpga开发
卡姆图拉夫18 小时前
基于米尔 MYD-YM90X 开发板的项目测评与技术分享
fpga开发
奋进的电子工程师1 天前
新架构下高精度时间戳总线接口卡 TestBase VCI 0620
测试工具·fpga开发·软件工程
上大科技蔡生1 天前
CS5567:具有宽占空比范围的60V同步降压DCDC控制器
单片机·嵌入式硬件·fpga开发·dcdc
未来之窗软件服务1 天前
国产化系统(一)ARM轻量化系统开发与试用全指南—东方仙盟练气期
arm开发·仙盟创梦ide·东方仙盟·阿雪技术观·国产化操作系统
bruk_spp1 天前
verilog spi slave回环模拟
fpga开发