基于瑞萨RH850/F1L芯片的CAN通信说明

文摘   2024-11-22 07:21   上海  
本文将先介绍CAN总线通信的相关概念,基于瑞萨RH850/F1L芯片,再介绍CAN通信的相关控制寄存器、初始化配置流程和CAN接收数据流程。
source: RH850 车用MCU | Renesas 瑞萨电子

1.CAN总线简介    

先来了解CAN总线的概念和协议等基础理论知识。
1.1 CAN的定义
CAN,即控制器局域网,是国际上应用最广泛的现场总线之一。CAN 被设计作为汽车的微控制器通讯,在车载各ECU 之间进行信息交互,形成汽车电子网络拓扑。比如发动机管理系统、变速箱控制器和仪表装备等。
1.2 CAN的特点
CAN 具有十分优越的特点,包括:
  • (1)低成本;
  • (2)极高的总线利用率;
  • (3)很远的数据传输距离(长达10Km);
  • (4)高速的数据传输速率(高达1Mbit/s);
  • (5)可根据报文的 ID 决定接收或屏蔽该报文;
  • (6)可靠的错误处理和检错机制;
  • (7)发送的信息遭到破坏后,可自动重发 ;
  • (8)节点在错误严重的情况下具有自动退出总线的功能;
  • (9)报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息 。
1.3 CAN报文帧类型
通过5种类型的帧进行通信,分别是:数据帧、遥控帧、错误帧、过载帧、帧间隔。各种帧的用途如下表所示:
帧类型
帧用途
数据帧
用于发送单元向接收单元传送数据的帧
遥控帧
用于接收单元向具有相同R的发送单元请求数据的帧
错误帧
用于当检测出错误时向其它单元通知错误的帧
过载帧
用于接收单元通知其尚未做好接收准备的帧
帧间隔
用于将数据帧及遥控帧与前面的帧分离开来的帧
下面将对这几种帧进行详细介绍。    
1.3.1 数据帧
数据帧的构成如下图所示:
图1 数据帧的构成
(1)帧起始(标准、扩展格式相同),表示帧开始的段。一个位的显性位。
(2)仲裁段,表示数据的优先级的的段。标准格式和拓展格式在此的构成有所不同。
  • 标准格式的ID有11个位。从ID28到ID18被依次发送。禁止高7位都为隐性(禁止设定:ID=1111111XXXX)
  • 扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性。(禁止设定:基本 ID=1111111XXXX)
(3)控制段,控制段由6个位构成,表示数据段的字节数。标准格式和拓展格式的构成有所不同。
(4)数据段(标准、拓展格式相同),数据段可包含0到8个字节的数据。从MSB(最高位)开始输出。
(5)CRC段(标准/拓展格式相同),CRC段是检查帧传输错误的帧。由15个位的CRC顺序和1个位的CRC界定符(用于分隔的位)构成。其中CRC 顺序是根据多项式生成的CRC值,CRC的计算范围包括帧起始、仲裁段、控制段以及数据段。接收方以同样的算法计算CRC值并进行比较,不一致时会通报错误。    
(6)ACK段

ACK段用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位构成。

其中发送单元在 ACK 段发送 2 个位的隐性位;接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发送 ACK”或者“返回 ACK”。
(7)帧结束
帧结束是表示该帧的结束的段。由7个位的隐性位构成。

1.3.2 遥控帧
接收单元向发送单元请求发送数据所用的帧。与数据帧相比该帧缺少数据段。

 

  • 数据帧和遥控帧的不同:遥控帧的RTR位为隐性位,没有数据段。没有数据段的数据帧和遥控帧可通过RTR位区别开来。

  • 遥控帧的数据长度码以所请求数据帧的数据长度码表示。    


1.3.3错误帧         

 

错误帧由错误标志和错误界定符构成。
(1)错误标志,错误标志包括主动错误标志和被动错误标志两种。主动错误标志: 6 个位的显性位。被动错误标志: 6 个位的隐性位。
(2)错误界定符,错误界定符由8个位的隐性位构成 
  • 主动错误标志:处于主动错误状态的单元检测出错误时输出的错误标志。
  • 被动错误标志:处于被动错误状态的单元检测出错误时输出的错误标志。

1.3.4过载帧
过载帧由过载标志和过载界定符构成,如下图所示。
(1)过载标志     
6个位的显性位。过载标志的构成与主动错误标志的构成相同。
(2)过载界定符
8个位的隐性位。过载界定符的构成与错误界定符的构成相同。  
 
1.3.5帧间隔         

 

帧间隔是用于分隔数据帧和遥控帧的帧,如下图所示。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。但需要注意在过载帧和错误帧前不能插入帧间隔。
  
(1)间隔:3个位的隐性位
(2)总线空闲:隐性电平,无长度限制(0亦可)。

1.4 CAN总线协议及标准规格
CAN协议经ISO标准化后有ISO11898标准和ISO11519-2标准两种。ISO11898和IS011519-2标准对于数据链路层的定义相同,但物理层不同。
  • (1)关于ISO11898,ISO11898是通信速度为125kbps-1Mbps 的CAN高速通信标准。目前,ISO1 1898追加新规约后,成为ISO11898-1新标准。
  • (2)关于ISO11519,ISO11519是通信速度为125kbps 以下的CAN低速通信标准。ISO11519-2是ISO11519-1追加新规约后的版本。    
下图表示CAN协议和ISO11898及ISO1 1519-2标准的范围。   
2.CAN配置    
基于瑞萨RH850/F1L芯片,下面介绍CAN通信过程中所用到的相关寄存器,以及结合寄存器来说明了通信过程。
2.1 相关寄存器介绍
先介绍CAN初始化配置、发送数据和接收数据中所用到的相关寄存器。
2.1.1 初始化寄存器
1)PROTCMDn 是保护命令寄存器,该寄存器用于启动写保护寄存器的写保护解锁序列,其位图如下所示。
各位功能见表下面PROTCMDn寄存器内容表
位名
功能
31到18
保留
当写入这些位时,写0
7到0
PCMDn[7:0]
保护命令寄存器位,只允许写入控制保护群集的保护目标寄存器
2)CKSC_ICANOSCD_CTL 是C_ISO_CANOSC时钟分频选择寄存器,要更新此寄存器,需要使用PROTCMD1寄存器的正确写入顺序,其位图如下图所示。    
各位功能见下表CKSC_ICANOSCD_CTL寄存器内容表
位名
功能
31到2
保留
读取时,返回复位后的值。写入时,写入复位后的值
1到0
ICANOSCD
CSID[1:0]
C_ISO_CANOSC 时钟分频设置:
(00)B:禁用(默认)
(01)B:MainOSC/1
(10)B:MainOSC/2
(11)B:禁止设置
3)RSCAN0GCTR 为全局控制寄存器,其位图如下图所示:  
各位功能见下表RSCAN0GCTR寄存器内容表
位名
功能
31到17
保留
读取时,返回复位后的值。写入时,写入复位后的值
16
TSRST
时间戳计数器重置:
将TSRST位设置为1将重置时间戳计数器。此位始终读取为0
15到11        
保留
读取时,返回复位后的值。写入时,写入复位后的值
10
THLEIE
传输历史缓冲区溢出中断启用:
0:禁止传输历史缓冲区溢出中断。
1:启用传输历史缓冲区溢出中断。
9
MEIE
FIFO消息丢失中断启用0:禁止FIFO消息丢失中断。
1:启用FIFO消息丢失中断
8
DEIE
DLC错误中断启用:
0:禁止DLC错误中断。
1:启用DLC错误中断。
7到3
保留
读取时,返回复位后的值。写入时,写入复位后的值
2
GSLPR
全局停止模式:
0:其他模式
1:全局停止模式
1到0
GMDC[1:0]
全局模式选择:
00:全局操作模式
01:全局复位模式
10:全局测试模式
11:禁止设置
注意:GSLPR为全局停止模式控制位,将此位设置为1可使RS-CAN模块进入全局停止模式。将该位清除为0可使RS-CAN模块退出全局停止模式。在全局操作模式或全局测试模式下,不应修改此位。
4)RSCAN0CmCTR 为信道控制寄存器,其位图下图所示:   
各位功能见下表RSCAN0CmCTR寄存器内容表    
位名
功能
31到27
保留
读取时,返回复位后的值。写入时,写入复位后的值
26到25
CTMS[1:0]
通信测试模式启用
0:禁止通信测试模式
1:启动通信测试模式
24
保留
读取时,返回复位后的值。写入时,写入复位后的值
23
ERRD
错误显示模式选择:
0:RSCAN0CmERFL中的第14位到第8位全部清除后,仅为第一个错误信息显示错误标志
1:显示所有错误信息的错误标志
22到21
 BOM[1:0]
总线断开恢复模式选择:
00:ISO11898-1兼容
01:在总线断开入口时自动进入通道停止模式
10:在总线断开端自动进入通道停止模式
11:通过程序请求进入通道停止模式(总线关闭状态)
20到17
保留
读取时,返回复位后的值。
写入时,写入复位后的值
16
TAIE
传输中止中断启用:
0:禁止传输中止中断
1:启用传输中止中断
15
 ALIE
仲裁丢失中断启用
0:禁止仲裁丢失中断
1:启用仲裁丢失中断
14
BLIE
总线锁定中断启用:
0:禁止总线锁定中断
1:启用总线锁定中断
13
OLIE
过载帧传输中断启用:
0:禁止过载帧传输中断
1:启用过载帧传输中断
12        
BORIE
总线断开恢复中断启用:
0:禁止总线断开恢复中断
1:启用总线断开恢复中断
11
BOEIE
总线关闭进入中断启用:
0:禁止总线关闭进入中断
1:启用总线断开输入中断
10
EPIE
错误被动中断启用:
0:禁止错误被动中断
1:启用错误被动中断
9
EWIE
错误警告中断启用:
0:禁止错误警告中断
1:启用错误警告中断
8
BEIE
总线错误中断启用:
0:禁止总线错误中断
1:启用总线错误中断
7到4
保留
读取时,返回复位后的值。写入时,写入复位后的值
3
RTBO
从总线关闭强制恢复:
当该位设置为1时,从总线关闭状态强制恢复。此位始终读取为0。
2
CSLPR
信道停止模式:
0:其他模式
1:信道停止模式
1到0
CHMDC[1:0]
模式选择:
00:信道通信模式
01:信道复位模式
10:信道暂停模式
11:禁止设置
5)RSCAN0GCFG全局配置寄存器,其位图如图3.5所示:      
各位功能见下表RSCAN0GCFG寄存器内容表
位名
功能
31到16
ITRCP[15:0]
当这些位设置为M时,pclk除以M。使用间隔计时器时禁止设置0000H
15到13
TSBTCS[2:0]
时间戳时钟源选择:
000:通道0位时钟;001:通道1位时钟
010:通道2位时钟;011:通道3位时钟
100:通道4位时钟;101:通道5位时钟
110:禁止设置;111:禁止设置
12
TSSS
时间戳源选择:
0:pclk/2*1
1:位Bit时钟
11到8
TSP[3:0]
时间戳时钟源划分:
0000:不除;0001:除以2
00010:除以4;0011:除以8
0100:除以16;0101:除以32
0110:除以64;01111:除以128
1000:除以256;1001:除以512
1010:除以1024;1011:除以2048
1100:除以4096;1101:除以8192
1110:除以16384;1111:除以32768
7到5
保留
读取时,返回复位后的值。写入时,写入复位后的值
4
DCS
CAN时钟源选择:0:clkc;1:clk_xincan
3
 MME
镜像功能启用:
0:启动镜像功能
1:禁止镜像功能
2        
 DRE
DLC更换启用:
0:禁止DLC更换
1:启动DLC更换
1
DCE
DLC检查启用
0:DLC检查已禁用
1:DLC检查已启
0
TPRI
传输优先级选择
0:ID优先级
1:传输缓冲区编号优先级
6)RSCAN0CmCFG 为信道配置寄存器,其位图如下图所示:  
各位功能见下表RSCAN0CmCFG寄存器内容表
位名
功能
31到26
保留
读取时,返回复位后的值。写入时,写入复位后的值
25到24
 SJW[1:0]
重新同步跳转宽度控制:
00:1Tq ;01:2Tq ;10:3Tq ;11:4Tq
23
保留
读取时,返回复位后的值。写入时,写入复位后的值
22到20
TSEG2[2:0]
时间段2控制:
000:禁止设置;001:2Tq
010:3Tq ;011:4 Tq
100:5Tq ;101:6Tq
110:7 Tq ;111:8 Tq
19到16
 TSEG1[3:0] 
时间段1控制:
0000:禁止设置;0001:禁止设置        
0010:禁止设置;0011:4Tq
0100:5Tq ;0101:6Tq
0110:7Tq ;0111:8 Tq
1000:9Tq ;1001:10 Tq
1010:11Tq;1011:12 Tq
1100:13Tq;1101:14 Tq
1110:15Tq;1111:16 Tq
15到10
保留
读取时,返回复位后的值。写入时,写入复位后的值
9到0
BRP[9:0]
预分频器分频比设置:当这些位设置为P(0到1023)时,波特率预分频器将fCAN除以P+1
7)RSCAN0GAFLCFG0 为接收规则配置寄存器0,其位图如下图所示:   
各位功能见下表RSCAN0GAFLCFG0寄存器内容表
位名
功能
31到24
RNC0[7:0]
信道0的规则数:只设置信道0的接收规则数
23到16
RNC1[7:0]
信道1的规则数:只设置信道1的接收规则数
15到8
RNC2[7:0]
信道2的规则数:只设置信道2的接收规则数
7到0
RNC3[7:0]
信道3的规则数:只设置信道3的接收规则数
8)RSCAN0GAFLIDj为接收规则ID寄存器,其位图如图3.8所示:    
各位功能见下表RSCAN0GAFLIDj寄存器内容表
位名
功能
31
GAFLIDE
IDE选择:0:标准ID 1:扩展ID
30
GAFLRTR
RTR选择:
0:数据帧1:远程帧
29
GAFLLB
接收规则目标消息选择:
0:当接收到从另一个CAN节点发送的消息时
1:当接收到自己发送的消息时
28到0
GAFLID[28:0]
ID
设置接收规则的ID:
对于标准标识,将位b10到b0设置为ID,并将位b28设置为b11到0

9)RSCAN0RMNB 为接收缓冲区编号寄存器,其位图如下图所示:  

各位功能见下表SCAN0RMNB寄存器内容表    
位名
功能
31到8
保留
读取时,返回复位后的值。写入时,写入复位后的值
7到0
NRXMB[7:0]
接收缓冲区编号配置
设置接收缓冲区的数量。将值设置为0到96。
2.1.2 发送寄存器
1)RSCAN0TMSTSp 为传输缓冲器状态寄存器,其位图如下图所示:  
各位功能见下表RSCAN0TMSTSp寄存器内容表
位名
功能
7到5
保留
读取时,返回复位后的值。写入时,写入复位后的值
4
TMTARM
传输缓冲区传输中止请求状态标志
0:不存在传输中止请求
1:传输中止请求存在
3
TMTRM 
传输缓冲区传输请求状态标志
0:不存在传输请求
1:存在传输请求
2到1
TMTRF[1:0]
传输缓冲器传输结果状态标志:
00:传输正在进行或不存在传输请求
01:传输中止已完成
10:传输已完成(无传输中止请求)
11:传输已完成(发送中止请求)
0
TMTSTS
传输缓冲区传输状态标志
0:传输未进行
1:正在传输
注意:对于TMTSTS,传输缓冲区的传输开始时,该位置1,当传输完成或由于总线错误或仲裁丢失而终止传输时,该位被清0。    
2)RSCAN0TMCp 为发送缓冲器控制寄存器,其位图如下图所示:
各位功能见下表RSCAN0TMCp寄存器内容表
位名
功能
7到3
保留
读取时,返回复位后的值。
写入时,写入复位后的值
2
TMOM
单次传输启用:
0:禁用单次传输
1:启用单次传输
1
TMTAR
传输中止请求:
0:未请求传输中止
1:请求传输中止
0
 TMTR
传输请求:
0:未请求传输
1:请求传输
注意:对于TMTR位,将该位设置为1将传输存储在传输缓冲区中的消息。
当满足以下任何条件时,TMTR位被清除为0,但不能被写入0的程序清除。
  • 1、传输完成;
  • 2、在TMTAR位被设置为1之后,传输已被中止;
  • 3、当TMOM位设置为1时,检测到错误或仲裁丢失。
当RSCAN0TMSTSp寄存器中的TMTRF[1:0]标志的值为(00)B时,TMTR位将被置1。
3)RSCAN0TMIDp 为传输缓冲区ID寄存器,其位图如下图所示:    
各位功能见下表RSCAN0TMIDp寄存器内容表
位名
功能
31
 TMIDE
传输缓冲区IDE
0:标准ID
1:扩展ID
30
TMRTR
传输缓冲器RTR
0:数据帧1:远程帧
29
THLEN
传输历史数据存储启用
0:传输历史数据未存储在缓冲区中
1:传输历史数据存储在缓冲器中
28到0
TMID[28:0]
传输缓冲区ID数据;
设置标准ID或扩展ID;
对于标准ID,将ID写入位10至0,将0写入位28至11。
注意:当相应RSCAN0TMSTSp寄存器中的TMTRM位被设置为0(没有发送请求)时,该寄存器值被修改。如果这个寄存器连接到发送/接收FIFO缓冲区(transmit/receive FIFO buffer),则禁止数据写入该寄存器。当寄存器被分配给传输队列时,将数据写入相应通道的传输缓冲区p (p = m×16 + 15)。
2.1.3 接收寄存器
1)RSCAN0RMNDy 为接收缓冲区新数据寄存器,其位图如下图所示:      
各位功能见下表RSCAN0RMNDy寄存器内容表
位名
功能
31到16
 RMNSq
接收缓冲区接收完成标志q(q=y×32+31 to y×32+16)
0:接收缓冲区q没有新消息
1:接收缓冲区q有一个新消息
15到0
RMNSq
接收缓冲区接收完成标志q(q=y×32+15 to y×32+0)
0:接收缓冲区q没有新消息
1:接收缓冲区q有一个新消息
2.2 CAN初始化配置流程
CAN初始化配置流程如下图所示,在瑞萨CAN的初始化中,需要配置CAN总线时钟源、IO口、波特率和接收规则。
  • 首先需要配置CKSC_ICANOSCD_CTL寄存器0位为1,把C_ISO_CANOSC时钟选择为MAINOSC/1。
  • 然后配置P1_1为CAN的使能口,P1_2和P1_3为CAN的收发IO口。
  • 接着配置GCTR 和C3CTR寄存器第2位为0,其他位保持不变,让CAN和通道从全局停止模式退出。
  • 之后需要配置GCFG寄存器第4位为1,选择clk_xincan作为CAN的时钟源。
  • 配置C3CFG寄存器,设置SJW、TSEG1、TSEG2、BRP,通过这些参数计算出波特率。
  • 计算公式如下:Baudrate = fCAN/(BRP+1)/(1+TSEG1+TSEG2)。
接着需要配置相应的接收规则,只接收指定ID的数据帧。
  • 首先配置GAFLCFG0寄存器最后一位是1,选择通道3的接收规则数量为6。
  • 然后设置GAFLECTR寄存器第8位为1,使能接收规则,接着就可以开始配置GAFLID0、GAFLM、GAFLP0、GAFLP1寄存器,写入接收规则。
  • 最后只需要配置RMNB寄存器第4位为1,设置为有16个接受数组,然后配置GCTR寄存器第10、 9 、8位都为0。    
2.3 CAN发送数据流程
CAN发送数据流程图如下图所示:  通过读取RSCAN0TMSTSp寄存器的最低位TMTSTS判断Txbuffer是否正在传输数据,若传输正在进行中函数返回CAN_RTN_ERR;若传输没有进行则清零寄存器RSCAN0TMSTSp所有状态,并读取CAN数据到Txbuffer中。最后通过将寄存器RSCAN0TMCp的TMTR位置1来请求传输数据且函数返回CAN_RTN_OK表示数据传输结束。
2.4 CAN接收数据流程
CAN接收数据流程图如下图所示:
  • 首先通过读取RMND0、RMND1、RMND2三个寄存器来判断是否有接收到数据,如果有接收到新数据,就把新的数据存入到临时数组中。
  • 紧接着清除接受标志位,把数据从临时数组中写入接受数组。
  • 最后检测是否有消息覆盖,没有则返回CAN_RTN_OK。


创作不易,欢迎关注点赞再看收藏

汽车研发交流群,有兴趣的朋友请添加群主:prOmiseyes,备注:公司+职务入群。仅限汽车从业人员。

谦益行
分享汽车研发日常,助力你我共同成长。
 最新文章