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

相关推荐
森焱森10 小时前
嵌入式硬件工程师应知 白银快速分析报告
linux·c语言·arm开发·嵌入式硬件·去中心化
黄埔数据分析20 小时前
QDMA把描述符当数据搬移, 不用desc engine
fpga开发
森G1 天前
七、04ledc-sdk--------makefile有变化
linux·c语言·arm开发·c++·ubuntu
VekiSon1 天前
Linux内核驱动——杂项设备驱动与内核模块编译
linux·c语言·arm开发·嵌入式硬件
南檐巷上学1 天前
基于FPGA的正弦信号发生器、滤波器的设计(DAC输出点数受限条件下的完整正弦波产生器)
fpga开发·数字信号处理·dsp·dds
AI+程序员在路上1 天前
Nand Flash与EMMC区别及ARM开发板中的应用对比
arm开发
嵌入式-老费1 天前
Linux Camera驱动开发(fpga + csi rx/csi tx)
fpga开发
17(无规则自律)1 天前
深入浅出 Linux 内核模块,写一个内核版的 Hello World
linux·arm开发·嵌入式硬件
ALINX技术博客2 天前
【202601芯动态】全球 FPGA 异构热潮,ALINX 高性能异构新品预告
人工智能·fpga开发·gpu算力·fpga
梁洪飞2 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm