RL78/F24新一代超低功耗汽车微控制器,非常适用于实现未来高可靠性的智能执行器和传感器,是低端车身ECU的理想之选。作为对现有RL78/F1x MCU的创新扩展,RL78/F24可满足未来市场的多种需求。RL78/F24具有更高的CPU性能、耐高温能力和更强的外设功能,非常适合各种应用。为了响应E/E汽车架构的新趋势,RL78/F24配备了CAN FD接口。
目前在官网上对于CANFD模块,提供了所使用的RL78/F24 RS-CANFD lite Module Software Integration System和相关介绍文档。本篇文章主要介绍如何使用该Middleware在e2 studio中完成CANFD参考例程,并使用RL78/F24 Target Board(RTK7F124FPC01000BJ)配合PCAN进行测试。
1. 所使用的硬件
瑞萨官方RL78/F24 (R7F124FPJ) Target Board,需要用户焊接CN5(CANFD接口),如果需要外部供电,还需要焊接TP1(VDD)和TP2(GND)。
另外,RL78/F24 Target Board上,CANFD部分电路没有终端电阻,针对本测试系统,需要在CANH和CANL之间焊上120Ω电阻。
调试器:瑞萨官方调试器E2或者E2 Lite(需要注意,E2 Lite只能提供3.3V供电,E2可以提供5V或者3.3V供电)。
辅助设备:使用CANFD其他器件用于测试发送和接收结果,这里使用PCAN(包括硬件和软件,硬件上设置有终端电阻)。
PCAN上设置波特率、采样点和过滤规则:
2. 软件开发环境
e2 studio:v2024-01(因为IAR需要License,所以没有使用官网给出的IAR参考例程)
Renesas CC-RL Compiler v1.13.00(RSCANFD驱动只能用于CC-RL编译器)
Smart Configurator中
Board Support Packages. -v1.62 (r_bsp)
Ports v 1.4.0
RS-CANFD lite Module Software Integration System (r_rscanfd_rl78) v1.00
注意,用户需要自己添加RS-CANFD lite Module Software Integration System (r_rscanfd_rl78)。
可以使用下面两种方法的其中之一进行添加:
• 打开SC,选择“Components”,点击“Add Component”,点击“Download RL78 Software Integration System modules”。
选择相应的模块进行下载。
• 将“r01an6334xx0100-rl78f24-sis”中内容,拷贝到Module Download文件夹。
3. 时钟和模块设置
1
根据文档“r01an6982ed0090-rl78f24”中内容,需要根据实际板子需求配置时钟。
在这种情况下,CANFD模块的属性设置中DLC时钟选择Internal clock。
2
RL78的Smart Configurator中对于波特率的设置,需要手动设置。
本测试代码中以fCAN=20MHz、nominal Baud Rate = 500kbps、data Baud Rate = 2Mbps为例。
波特率
500kbps
2Mbps
Prescaler
0
0
Time Segment 1
29
7
Time Segment 2
10
2
SJW
1
1
Sample Point (%)
75.00
80.00
4. 调试配置
1由于CANFD收发器需要5V供电,所以需要外部电源给板子提供5V供电。
RL78/F24 (R7F124FPJ) Target Board上有VDD和EVDD,可以分别供电,比如可以VDD使用3.3V供电,EVDD使用5V供电。但是此Target Board默认将VDD和EVDD连接在一起,所以一起用外部电源提供5V电源,此时,外部调试器选择不供电。
2由于系统使用外部主时钟,所以调试器的配置需要做相应修改。
5. 软件流程
参考文档“RL78/F24 RS-CANFD lite Module Software Integration System Rev.1.00”(r01an6334ej0100-rl78f24)中内容。
Application Note:RL78/F24 RS-CANFD lite Module Software Integration System Rev.1.00
1设置P12:输出模式,输出低电平,以保证CANFD收发器处于Normal模式。
2添加RSCANFD组件,并设置属性(属性的详细内容请参考文章后附上的参考工程)。
3
添加相应的中断函数
4在主函数中添加CAN相关头文件、R_CAN_Create函数和R_CAN_SetConfig函数,并等待通信就绪。
左右滑动查看完整内容
长按可保存查看大图
5配置帧属性,准备将要发送的数据,然后发送CANFD数据。
左右滑动查看完整内容
长按可保存查看大图
本测试代码中,发送帧为标准数据帧,ID为0x7FE,数据长度为8,数据内容为0x11、0x22、0x33、0x44、0x55、0x66、0x77、0x88。
从PCAN中可以接收到RL78/F24发送的CANFD数据。
可以看出,数据类型为FD,并且切换波特率。
通过逻辑分析仪观察CTX和CRX波形,可以看到Nominal段和Data段波特率不一样。
6设置接收filter功能
在R_CAN_SetConfig()函数后,添加接收规则。
左右滑动查看完整内容
长按可保存查看大图
接收标准帧、ID为0x700的数据、将数据接收到RXBUF0中。
7接收CANFD数据
在中断函数RSCFD_A_GlobalMBReceiveIRQ中添加接收代码。
左右滑动查看完整内容
长按可保存查看大图
使用PCAN发送以下ID(0x700)和数据,注意要勾选“CAN FD”和“Bit Rate Switch”。
MCU可以正常接收,可以看到FDF和BRS的值都为1。
左右滑动查看完整内容
长按可保存查看大图
验证如果PCAN发送的ID为0x701(除0x700以外的ID,此处以0x701为例),MCU不会进入中断。
6. 需要注意的问题
1在接收中断中,需要使用R_CAN_ReadRXMBInHandler,而并非R_CAN_ReadRXMB。
R_CAN_ReadRXMB
从RX消息缓冲区读取接收到的数据。
R_CAN_ReadRXMBInHandler
从RX消息缓冲区读取接收到的数据。(在中断处理进程中)
2发送FD数据,需要注意以下发送帧类型。
s_tx_frame.Head.Bits.FDCTR
可从以下几种类型中进行选择
左右滑动查看完整内容
/* for FDCTR (st_can_tx_frame_t) (ESI is effective when ESIC=1 and not error passive) */ #define CAN_FDCTR_CLASSICAL (0x00u) /* Classical Frame */ #define CAN_FDCTR_FD (0x06u) /* FD Frame (use Data Baud Rate) */ #define CAN_FDCTR_FD_NMNL (0x04u) /* FD Frame (only Nominal Baud Rate) */ #define CAN_FDCTR_FD_ESI (0x07u) /* FD Frame (use Data Baud Rate and ESI) */ #define CAN_FDCTR_FD_NMNL_ESI (0x05u) /* FD Frame (only Nominal Baud Rate, use ESI)
3发送FD数据时,需要根据所用CANFD收发器的特性和所用波特率设置TDC(收发器延迟补偿)。
原因:如果数据阶段使用高波特率(例如5 Mbps),则发送器延迟可能会大于 TSEG1。在这种情况下,发送器将始终检测到CAN-FD帧的数据阶段中的位错误。TDC(收发器延迟补偿)可补偿发送器无法在该位的采样点接收其自身发送的位。(详情请参考RL78/F24硬件手册中的“18.15.1.5 CAN Transmitter Delay Compensation”)。
RL78/F24硬件手册
基于TDC原理和板上使用的高速CAN收发器。
对于此收发器,当波特率为2M时,应将TDC设置为Disabled。
通过计算(1/(140+140)*10^9=3.57M),当使用的波特率超过3.57M时,请考虑使用TDC。
至此,使用RL78/F24进行CANFD发送和接收的参考例程已完成,参考例程请从Gitee上下载。用户可以在此例程的基础上,针对用户板进行配置上的修改,也可以调整发送数据类型。