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

相关推荐
坏孩子的诺亚方舟15 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐15 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
AndyHeee15 天前
【SVC、PendSV(系统异常) 与 外设 IRQ 、NVIC笔记】
arm开发
FPGA小徐15 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
暮云星影15 天前
瑞芯微rk3588利用Rockchip NPU运行大语言模型(LLM)
arm开发·人工智能·语言模型·自然语言处理
techdashen15 天前
绕过系统 ICMP:用 rawsock、Npcap 和 WMI 找到默认网卡
开发语言·arm开发·rust
振南的单片机世界15 天前
ARM中断比51快在哪?硬件压栈+NVIC集中管理
arm开发·stm32·单片机·嵌入式硬件
墨绿色的摆渡人15 天前
论文笔记(一百三十七)Learning Dual-Arm Push and Grasp Synergy in Dense Clutter
arm开发·论文阅读
暮云星影15 天前
全志linux开发屏幕适配(一)屏幕参数设置说明
linux·arm开发
m0_5474866616 天前
《ARM Cortex-M4嵌入式应用技术——基于STM32F407、STM32CubeMX与Proteus》全套PPT课件
arm开发·stm32·proteus