首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
首页
  • GM-3568JHF
  • M4-R1
  • M5-R1
  • SC-3568HA
  • M-K1HSE
  • CF-NRS1
  • CF-CRA2
  • 1684XB-32T
  • 1684X-416T
  • C-3568BQ
  • C-3588LQ
  • GC-3568JBAF
  • C-K1BA
商城
  • English
  • 简体中文
  • GM-3568JHF

    • 一、简介

      • GM-3568JHF 简介
    • 二、快速开始

      • 00 前言
      • 01 环境搭建
      • 02 编译说明
      • 03 烧录指南
      • 04 调试工具
      • 05 软件更新
      • 06 查看信息
      • 07 测试命令
      • 08 应用编译
      • 09 源码获取
    • 三、外设与接口

      • 01 USB
      • 02 显示与触摸
      • 03 以太网
      • 04 WIFI
      • 05 蓝牙
      • 06 TF-Card
      • 07 音频
      • 08 串口
      • 09 CAN
      • 10 RTC
    • 四、应用开发

      • 01 UART读写案例
      • 02 按键检测案例
      • 03 LED灯闪烁案例
      • 04 MIPI屏幕检测案例
      • 05 读取 USB 设备信息案例
      • 06 FAN 检测案例
      • 07 FPGA FSPI 通信案例
      • 08 FPGA DMA 读写案例
      • 09 GPS调试案例
      • 10 以太网测试案例
      • 11 RS485读写案例
      • 12 FPGA IIC 读写案例
      • 13 PN532 NFC读卡案例
      • 14 TF卡读写案例
    • 五、QT开发

      • 01 ARM64交叉编译器环境搭建
      • 02 QT 程序加入开机自启服务
    • 六、RKNN_NPU开发

      • 01 RK3568 NPU 概述
      • 开发环境搭建
    • 七、FPGA开发

      • ARM与FPGA通讯
      • FPGA开发手册
    • 八、其他

      • 01 根目录文件系统的修改
      • 02 系统自启服务
    • 九、资料下载

      • 资料下载

09 CAN

1 CAN 总线概述

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

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_LCAN_L
CAN_HCAN_H
CAN

2.2 CAN 通讯测试

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

CAN_2

检查接口

检查开发板 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 分析仪测试效果:
CAN_4

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
在 GitHub 上编辑此页
上次更新:
贡献者: jxc, zsl
Prev
08 串口
Next
10 RTC