RH850-F1KMS1-CANFD通信

CANFD简介

随着汽车电子系统日益复杂,CANFD(Controller Area Network Flexible Data-Rate)通信协议因其更高的数据传输速率和带宽而成为车辆网络通信的关键技术。在本篇文章中,我们将探讨RH850微控制器如何高效实现CANFD通信。

什么是CAN(Controller Area Network)?

CAN(Controller Area Network,控制器局域网络)是一种用于车辆和工业自动化系统中的高效、可靠的通信协议。最初由德国公司博世(Bosch)在20世纪80年代开发,CAN协议旨在解决车辆电子系统之间的通信问题。它允许多个微控制器和设备在没有主机计算机的情况下相互通信,从而提高了系统的灵活性和可靠性。

image-20240814115549935

CAN网络是一种多主总线系统,任何节点都可以在总线上发送和接收消息。它采用差分信号传输方式,抗干扰能力强,适合在噪声环境中使用。CAN协议的主要特点包括:

  • 高可靠性:通过CRC校验和确认机制,确保数据传输的完整性。
  • 实时性:优先级机制保证了高优先级消息能够及时传输。
  • 灵活性:支持多种数据速率和拓扑结构,适应不同应用需求。

CAN与CANFD的区别

CANFD(CAN with Flexible Data-rate,灵活数据速率的CAN)是CAN协议的增强版本,由博世公司在2012年推出。CANFD在保持原有CAN协议优点的基础上,针对现代应用的需求进行了多项改进,主要区别如下:

  1. 数据速率
    • CAN:传统CAN协议的数据速率最高为1 Mbps。
    • CANFD:在数据阶段,CANFD允许更高的数据速率,最高可达8 Mbps,提高了数据传输效率。
  2. 数据帧长度
    • CAN:每个数据帧最多只能传输8字节的数据。
    • CANFD:每个数据帧最多可以传输64字节的数据,减少了传输延迟。
  3. 协议灵活性
    • CAN:固定的数据速率和帧结构,灵活性较低。
    • CANFD:引入了灵活的数据速率和更大的数据帧,适应更多样化的应用需求。
  4. 兼容性
    • CAN:传统CAN节点无法直接与CANFD节点通信。
    • CANFD:设计上考虑了向下兼容,CANFD控制器可以兼容传统CAN协议,但需要注意的是,CANFD帧在传统CAN网络中无法被识别。
  5. 错误检测和处理
    • CAN:采用CRC(循环冗余校验)和确认机制来保证数据传输的可靠性。
    • CANFD:在错误检测和处理机制上进行了增强,提高了数据传输的可靠性和安全性。

img

数据帧

在CANFD协议中,数据帧由7个主要段构成:

图

  1. 帧起始段(Start of Frame, SOF)
    • 表示帧的开始,通常是一个显性位(dominant bit)。
  2. 仲裁段(Arbitration Field)
    • 包含标识符(Identifier)和远程请求位(RTR bit),用于确定总线上消息的优先级。
  3. 控制段(Control Field)
    • 包含数据长度码(DLC),指示数据段的字节数,以及其他控制位。
  4. 数据段(Data Field)
    • 包含实际传输的数据。在CANFD中,数据段的长度可以达到64字节,而传统CAN最多只能传输8字节。
  5. CRC段(Cyclic Redundancy Check Field)
    • 包含CRC序列,用于检测数据传输过程中是否出现错误。
  6. 确认段(Acknowledge Field, ACK)
    • 包含ACK位和ACK分隔符,用于接收节点确认是否正确接收到数据。
  7. 帧结束段(End of Frame, EOF)
    • 表示帧的结束,通常是7个隐性位(recessive bits)。

使用RH850-F1KMS1进行CANFD通信

本章节我们将会使用RH850-F1KMS1进行CANFD 回显通信实验。

image-20240814170849304

本次实验的平台是 霆宝科技 开发的RH850F1KM 评估板,TPD-R7F7016843AFP_v1.0.0。

功能设计

  1. 开发板上电后,通过CANFD发送一帧数据;
  2. 数据回显,上位机向开发板发送CANFD数据,开发板收到数据后将该数据重新转发到上位机。

硬件连接

image-20240814173238641

本次实验,将使用CAN0通道完成,按照原理图连接好跳线、仿真器、调试工具。

image-20240814173836799

软件设计

本次实验的开发环境为CS+ for CC V8.11,可以拷贝一份我们提供的空白工程,然后使用Smart Configurator进行配置;

RH850-F1KMS1有多种通信模式,本次实验使用FIFO的方式收发数据;

配置完毕后,导入CANFD库进行应用开发,以下是详细说明。

Smart Configurator配置

我们提供的工程已经配置好时钟,需要注意,RS-CANFD时钟需要设置成80MHz。

image-20240814175742597

然后配置CANFD通道引脚,

image-20240814175936511

配置中断,

image-20240814185957497

开启中断时,需要更改Interrupt Handler的函数名,最后往开发环境导入CANFD库文件,至此开发的准备工作已完成。

image-20240814180048106

CANFD库介绍

该库由霆宝科技开发,旨在降低CANFD的开发难度,缩短开发周期,以下是配置文件的功能介绍:

  • cfg_开头的文件是使用时需要配置的文件
  • cfg_canfd_test.c:canfd测试文件,本次实验将在该文件上完成
  • cfg_canfd0.c:canfd的全局配置文件
  • cfg_canfd0_ch0:canfd 通道0的配置文件,如需其他通道,也可以按照代码格式移植
  • cfg_canfd0_common_fifo.c:common fifo的配置文件,也称为 Transmit/receive FIFO
  • cfg_canfd0_receive_fifo.c:receive FIFO的配置文件
  • cfg_canfd0_transmit_buffer.c:发送缓冲区的配置文件

使用该库的顺序一般为:

  • 移植所需通道
  • 配置CANFD全局设定
  • 配置通道设定
  • 配置通道规则表
  • 配置所需的缓冲区

全局设定

首先找到cfg_canfd0_init函数,按照项目需求填写全局配置,一般保持默认。

image-20240814182642301

其中,如果需要使用接收缓冲区,则需要将NRXMB设置成需要使用的缓冲区数量。

image-20240814182847299

通道配置

本次实验的通道配置在cfg_canfd0_channel_init_ch0函数内部,本次实验使用的波特率是 500Kbps ,寄存器的值可以根据数据手册的计算方法计算。

image-20240814183100943

计算方法如下:

image-20240814183946324

然后配置通道的接收规则(过滤器),

image-20240814184343458

规则表配置项如下:

配置项描述
id想要接收的id
GAFLLB接收规则目标消息选择(自身或者其他设备)
frame_type想要接收到的帧类型
id_mode想要接收到的id模式(标准id或拓展id)
id_mask需要屏蔽检查id的哪几位
frame_type_enableframe_type 是否起作用
id_mode_enableid_mode 是否起作用
minimum_dlc最小的接收数据长度(0为不检查)
buffer_index接收此规则消息的receive缓冲区
receive_buffer_enable接收缓冲区使能
fifo_select_flags接收此规则接受的消息的RX FIFO

默认使用0x20作为接收ID,为了调试方便,掩码部分将全部关闭,接收使用 CANFD_RX_FIFO_0

配置接收FIFO

由于接收使用了CANFD_RX_FIFO_0,所以需要对该FIFO进行配置,

image-20240814185747214

注意,需要使能FIFO的中断,不然会导致无法接收。

配置发送缓冲区

image-20240814190134980

配置中断向量

image-20240814190250055

这部分是r_smc_intprg.c文件中的代码,由Smart Configurator生成,只需要在中断服务函数调用CANFD库对应的中断服务函数即可。

编写应用代码

首先编写上电发送部分,发送CANFD数据之前,需要构建一帧数据,cfg_canfd_test.c文件里有发送帧数据的模板,

image-20240814190608034

默认使用的ID是0x18,发送一帧CANFD的数据帧,数据长度是64,然后在DB处填入需要发送的数据,

然后调用canfd0_transmit_by_buffer函数,将数据发送出去。

image-20240814190933855

对于接收到的数据,应该先缓存到变量内,因此,可以在接收中断函数里面编写,

image-20240814191121206

最后,完成代码,下载调试,

image-20240814191203459

调试

将调试工具连接电脑和开发板,启动设备,

image-20240814191306436

开启之后,需要重启开发板,上位机将会收到以下数据,

image-20240814191347647

可以看到,接收到的帧ID、数据长度、数据等内容,于我们配置的一致,这时候可以启动上位机的发送功能,

image-20240814191626927

调试

将调试工具连接电脑和开发板,启动设备,请添加图片描述

开启之后,需要重启开发板,上位机将会收到以下数据,

请添加图片描述

可以看到,接收到的帧ID、数据长度、数据等内容,于我们配置的一致,这时候可以启动上位机的发送功能,

请添加图片描述

设置好发送的数据之后,点击发送,可以看到开发板返回了刚刚通过上位机发出的数据,至此实验完成。

联系方式

如有需求请联系霆宝科技销售团队,邮件至sales@teampo.com,或致电0755-83187999。

请添加图片描述

  • 21
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值