1 弁言
2 CAN-FD

3 示例演示

LPC55S1x/LPC55S0 拥有带有 CAN-FD 功能的 CAN 掌握器。LPC5500 系列 的 SDK 软件包供应了 mcan_interrupt_transfer 示例,演示了如何利用 SDK 的 CAN API 来传输 CAN 帧。基于此示例,本文描述了如何利用 CAN-FD 的比特 率切换和发送延迟补偿功能。启用这两个功能可以提高吞吐量,并肃清由收发器延迟引起的误码。
2 CAN-FD 国际标准ISO 11898-1:2015 中定义了 CAN-FD 的实现。为了快速开始利用 CAN-FD,针对不熟习 CAN 的用户,本节会先容 CAN-FD 的一些基本观点。
2.1 CAN 和 CAN-FD 的不同
传统的 CAN 和 CAN-FD 之间紧张有两个差异。首先是 CAN-FD 可以利用比传统 CAN 高得多的比特率。传统 CAN 的比特率限定 为 1 Mbit/s。CAN-FD 没有理论的极限值,但实际上会受到收发器的限定。第二个差异是每个 CAN 所含的数据量增加了。传 统的 CAN 最多为 8 个字节,而对付 CAN-FD,每条的最大值增加了 8 倍至 64 个字节。
随着每个 CAN 所含数据量的增加,CAN-FD 每帧须要更高的比特率,以减少通信中的韶光延迟并提高实时性。通过启用比 特率切换功能,CAN-FD 可以达到更高的比特率。
另一方面,比特率越高,比特韶光越短。为了使数据域的比特韶光比发送延迟更短,引入了延迟补偿。如果没有发送延迟补偿, CAN-FD 数据相位中的比特率会受到发送延迟的限定。
2.2 比特率切换
在 CAN-FD 的帧掌握相位中,数据域和 CRC 域与每一帧的开始和结束域比较,以更高的比特率进行传输。
通过设置 CCCR 寄存器中的 BRSE 位,可以启用比特率切换功能。启用比特率切换时,我们还须要精确设置仲裁相位比特率 (arbitration phase bit rate)(启用比特率切换之前)和数据域比特率(启用比特率切换之后)。仲裁相位比特率由 NBTP 寄存 器设置,数据相位比特率由 DBTP 寄存器设置。
2.3 收发器延迟补偿
MCAN 的协议单元已实现延迟补偿机制,以补偿收发器的延迟。通过收发器延迟补偿,可以对数据位韶光短发送延迟的情形进行 配置,这在新的 ISO11898-1 中有详细先容。可以通过设置 DBTP 寄存器中的 TDC 位来启用该功能。TDCR 寄存器中的 TDCO 字段用于设置收发器延迟补偿的偏移量。偏移量定义了从 m_can_tx 到 m_can_rx 的丈量延迟与二级采样点之间的间隔。发送延 迟补偿的偏移量和二级采样点如 图 1 所示。
3 示例演示
本节简要先容了如何利用 CAN-FD 传输数据以及启用比特率切换功能和发送延迟补偿。这些基于 LPC5500 系列的 SDK mcan_interrupt_transfer 示例。
3.1 硬件环境
• 板子
— 2 块 LPCXpresso55S16 板子或者 2 快 LPCXpresso55S08 板子
• 其他
— 2 根 Micro USB 线
— 1 根 120 欧姆端接的 CAN 线
— PC
• 板子设置
以 LPC55S16 为例,CAN shield 连接到测试板。用 micro USB 线连接 PC 和测试板上的 J19,用于加载和运行 demo。这 也用于 PC 上 UART 终真个 UART 通信。板子的设置和 CAN 连接如 图 2 所示。
3.2 软件环境
• 工具链
— Keil 或 MCUXpresso11.1 或更高版本 • 软件包
— LPC55S16 SDK (2.9.0)/LPC55S08 SDK (2.9.0)或更高版本
• UART 终端程序
— PuTTY 或类似的程序
3.3 利用 CAN-FD 步骤概述
LPC500 系列 SDK 驱动程序示例:
MCAN 演示了如何利用 CAN-FD 传输数据。在此示例中,须要实行以下步骤:
• 设置系统时钟
• 设置 MCAN 时钟
— 划分 MCAN 模块的系统时钟
• 初始化 MCAN
— 启用 MCAN 时钟
— 复位 MCAN 模块
— 配置 MCAN 掌握寄存器,启用 CAN-FD 和比特率切换功能
— 设置仲裁相位比特率和数据相位比特率
— 启用发送延迟补偿
• 设置 Message RAM
• 设置 message ID 过滤器配置和参数
• 配置 Rx FIFO 和 Tx 缓冲区
• 进入 MCAN 正常模式
• 传输数据
— 配置 Tx 数据帧数并发送
— 吸收数据
在 LPC5500 系列 SDK 的 mcan_interrupt_transfer 示例中,默认利用总线上的 CAN2.0(经典 CAN)节点。须要的数据相位比特率 与仲裁相位比特率相同。它们应符合 CAN2.0 总线协议。
但是在本文的示例中,利用了总线上的 CAN-FD 节点。CAN-FD 的仲裁相位比特率设置为 1 Mbit/s,数据相位比特率设置为 5 Mbit/s。
须要启用比特率切换和发送延迟补偿功能。
以下各节会先容利用 CAN-FD 的一些关键步骤。
3.4 配置 CAN-FD 的比特率切换功能
启用 CAN-FD 比特率切换可以提高吞吐量。在本示例中,调用 MCAN_SetBaudRate()函数设置仲裁相位比特率,调用 MCAN_SetBaudRateFD()函数设置数据相位比特率。MCAN 时钟设置为 60 MHz。
3.4.1 将仲裁相位比特率设置为 1 Mbps
根据 CAN 定义规范,标称比特率是指:空想收发器在没有重新同步的情形下每秒发送的比特数。标称比特率和标称比特韶光的 关系是:标称比特韶光=1 /标称比特率。因此,如果将仲裁相位比特率设置为 1 Mbit/s,则仲裁相位的比特韶光为 1 µs。
韶光量(t_q)是 MCAN 时钟周期的固定时间单位。存在一个可编程的预分频器,其整数值的范围至少为 1 到 32。从 MCAN 时 钟周期开始,t_q 的长度为 t_q=m MCAN 时钟周期=m / MCAN 时钟,个中 m 为预分频器的值。
在 MCAN_SetBaudRate()函数中,我们须要定义一个变量,其类型为 mcan_timing_config_t,用于设置仲裁相位的比特韶光。 构造 mcan_timing_config_t 如 图 3 所示进行定义。
预分频器 m 即是(preDivider+1)。t_q 的长度为 t_q=(preDivider+1)/60MHz=(preDivider+1)/60 (µs),个中 preDivider 为构造元 素。
可以将仲裁相位的比特韶光中的 t_q 总数设置为 4 到 385 个韶光量。仲裁相位的比特韶光长度 =MCAN_TIME_QUANTA_NUM_ARBIT t_q。
在此示例中,我们将宏 MCAN_TIME_QUANTA_NUM_ARBIT 定义为 20。仲裁相位的比特韶光为 1µs,t_q 为 1/20 µs,preDivider 的值为 2。
宏 MCAN_TIME_QUANTA_NUM_ARBIT=1+(seg1+1)+(seg2+1)
构造元素 seg1 和 seg2 分别代表相位缓冲段 1 和 2 减一。在此示例中,我们将元素 seg1 设置为值 13,并将元素 seg2 设置为 4。调用更新的函数 MCAN_SetBaudRate(),我们完成将仲裁阶段的比特率设置为 1 Mbit/s。
3.4.2 将数据相位比特率设置为 5 Mbit/s
设置数据相位比特率类似于设置仲裁相位比特率。数据相位比特率在 MCAN_SetBaudRateFD()函数中设置。
差异之一是,可以在 4 到 49 个韶光粒度范围内,对数据相位的比特韶光中的 t_q 总数进行编程。 在本示例中,我们将宏 MCAN_TIME_QUANTA_NUM_DATA 定义为 12,作为数据相位的比特韶光中 t_q 的总数。
元素 seg1 为 7,元素 seg2 为 2,元素 preDivider 为 4。调用函数 MCAN_SetBaudRateFD(),将数据相位比特率设置为 5 Mbit/s,这是板载收 发器可以达到的最高比特率。
3.4.3 启用比特率切换功能
将 MCAN CCCR 寄存器的 BRSE 设置为 1,启用 CAN-FD 的比特率切换功能。在本文的示例中,CAN_FD 每帧的掌握相位、数 据相位和 CRC 相位以 5 Mbit/s 的比特率传输,而 CAN-FD 每帧的其他相位以 1 Mbit/s 的比特率传输。
3.5 配置发送延迟补偿
在本文的示例中,定义了一个函数,用于启用 CAN-FD 的发送延迟补偿。
3.5.1 MCAN_SetTransmitterDelayCompensationFD
通过将 DBTP 寄存器中的 TDC 设置为 1,可以启用发送延迟补偿。发送延迟补偿的偏移量由 TDCR 寄存器中的 TDCO 字段设置。 此函数将第二个采样点设置在 mcan_rx 比特韶光的中间。
发送延迟补偿的偏移量=MCAN_TIME_QUANTA_NUM_DATA/2
个中宏 MCAN_TIME_QUANTA_NUM_DATA 是在设置数据相位比特率的步骤中定义的,该值在 fsl_mcan.c 中定义。
3.6 步骤和结果
在此 CAN-FD demo 中,总线上有两个节点用于发送和吸收数据。一个节点当选择为 A,另一个节点当选择为 B。按下节点 A 所 在终端掌握台上的任意键以触发单次发送。节点 B 吸收该单次发送的数据,并将其发送回节点 A。节点 A 吸收数据,该单次传输 完成。
基本步骤如下:
1. 硬件设置 有关板子设置和 CAN 连接的信息,请拜会硬件环境。
2. 构建并下载
• 将该 demo 的软件包导入 MCUXpresso IDE 并进行构建。
• 利用 debugger 下载可实行文件。
3. 设置 UART 终端程序
• 在 PC 的设备管理器中查看用于 LPC-LinkII 仿真的 COM 编号。
• 在 PC 上打开两个 UART 终端程序,然后将一个测试板与一个 UART 终端程序连接。将通信协议配置为 115200+8+N+1。
4. 运行
按下每块测试板上的 SW1(reset)按钮来进行复位。一块测试板选择作为节点 A,另一块测试板选择作为节点 B。按下节点 A 所在终端掌握台上的任意键以触发单次发送。显示在节点 A 的终端上,如 图 4 所示。显示在节点 B 的终端上, 如图 5 所示。








