Skip to main content
控制器局域网(CAN)是一种基于消息的串行通信,能够快速可靠地共享信息。术语 CAN 和 CAN 总线在同一语境中使用。CAN 的优势如下:
  • CAN 总线提供一个与所有网络节点通信的入口点,可实现集中式数据记录和诊断。
  • CAN 帧按消息 ID 划分优先级。因此高优先级消息 ID 可获得总线仲裁的控制权。按位仲裁通过基于 ID 的优先级来管理 CAN 总线访问并避免冲突。
  • CAN 总线在运行期间有两种逻辑状态:
    • 隐性电平(Recessive level),隐性总线状态等同于逻辑高电平,称为空闲状态。
    • 显性电平(Dominant level),显性总线状态等同于逻辑低电平。
  • 任何节点都可以随时发送数据。CAN 通信中不存在主从节点的概念。
  • CAN 节点使用位同步进行同步,其中每个位时间被划分为四个时间量子段。
  • CAN 协议确保错误处理并检测 CAN 错误,包括 CRC 和 ACK。

CAN 功能

CAN 协议支持以下功能:
  • 基于优先级的总线访问。
  • 非破坏性的按位仲裁。
  • 通过全帧传输实现广播。
  • 通过验收滤波实现多播帧传输。
  • 错误检测和错误信号发送。
  • 通过识别故障节点自动停用故障节点。
CAN 支持以下数据传输模式。默认情况下,CAN 传输模式设置为中断模式。
  • DMA 模式:CAN 帧通过 DMA 从 RX FIFO 移动到系统内存,CPU 负载最小。
  • 轮询模式:CPU 定期检查 RX FIFO 中是否有新帧并进行处理。
  • 中断模式:收到帧时,通过中断通知 CPU,由 CPU 从 RX FIFO 读取数据。
下表列出了 CAN 通道及支持的最大波特率: CAN 接口的每个通道支持以下波特率范围:

CAN 架构

CAN IP 是 SoC 的一部分,是一个可配置的 CAN 控制器。TLE9255WLC 是外部收发器,可通过 SPI 接口进行配置,其工作时钟频率为 4 MHz,采用 SPI 模式 1。SoC 控制器连接到一个 QUP 模块,其 SE4 配置为 4 引脚 SPI 操作。
CAN0Dragonwing IQ-9075 EVK 支持八个 CAN 通道。Dragonwing IQ-9075 EVK 支持 CAN0 与 TLE9255WLC 收发器的连接。下图显示了 CAN0 通道与 TLE9255WLC 收发器之间的连接,该收发器支持最高 5 MBPS 的波特率
IQ-9075.png
CAN1/CAN2/CAN3/CAN4/CAN5/CAN6/CAN7Dragonwing IQ-9075 EVK 支持 CAN1/CAN2/CAN3/CAN4/CAN5/CAN6/CAN7 与 ADM3058EBRIZ-RL 收发器的连接。下图显示了 CAN1/CAN2/CAN3/CAN4/CAN5/CAN6/CAN7 通道与 ADM3058EBRIZ-RL 收发器之间的连接,该收发器支持最高 12 MBPS 的波特率。
can123.png
用户测试应用程序在注册客户端回调后与 CAN 服务层通信。CAN 服务层充当测试应用程序与 CAN 及收发器驱动之间的隔离层。TLE9255WLC 收发器驱动是 SPI 驱动的客户端,QUP_SPI 驱动注册到该 SPI 驱动。
teat_application.png

CAN 文件

以下是 CAN 接口文件:

验证 CAN 接口

有关验证 CAN 接口的信息,请参阅 CAN 测试命令。

自定义 CAN 接口

Qualcomm 建议使用默认的 CAN 收发器(TLE9255WLC)。使用默认收发器时,无需修改软件,因为平台 CAN 软件栈提供了完整支持。 如果使用虚拟收发器(例如 ADM3058EBRIZ),则无需修改 CAN 驱动,因为所有收发器处理均由硬件管理。 但是,如果引入新的或不同的 CAN 收发器,则必须在软件中集成并配置相应的收发器驱动。以下各节以 TLE9255 为例介绍所需的更改。 将收发器映射到平台 CAN 驱动 必须在 sail_proc/BSP/can/src/sailel1/Can_Plt_Cfg.c 的平台 CAN 驱动配置中映射新收发器。 示例(Dragonwing IQ-8275 EVK):
  1. 为新收发器添加映射数组:
  2. 映射相应的 CAN 通道(以 CAN0 为例):
实现收发器驱动 必须为新收发器实现专用驱动。 参考路径示例:sail_proc/BSP/cantrcv_tle9255/src/sailel1/cantrcv_Task.c 该驱动处理收发器特定的操作,例如初始化、模式控制和故障处理。 初始化收发器驱动 必须在系统启动期间初始化新的收发器驱动。 文件:sail_proc/BSP/el_entry/src/sailsw1/sailel1_main.c 添加新收发器驱动的初始化调用。 示例: