应用场景
最近接触到汽车BMS产品。需要验证硬件开发板CAN&CANFD通信部分,CAN收发器使用TJA1463,本章将基于S32K358介绍 CAN 相关配置。CAN FD的也基本差不多的配置,相关参数打开即可。
原理介绍
CAN
S32K358提供8组CAN实例,FLEXCAN0~FLEXCAN7。每组都支持CANFD协议,通过配置可实现CAN通信或CANFD通信。CANFD支持一帧报文64字节的数据传送。CANFD除了设置仲裁段波特率还有一个数据段波特率。以往经验汽车网关中经常将前者设置为500kbps,后者设置为2Mbps。
CAN的时钟可以选择由芯片内部时钟提供或者外部时钟提供。一般建议使用外部时钟,因为内部时钟可能不稳定增加CAN通信不稳定的因素。
CANTJA1463对应的驱动也需要配置好,才能使用CANoe建立起链路,从而调试CAN通信。目前一般的CAN收发器驱动代码比较简单。S32K358的Demo板上用的是TJA1153(带功能安全的CAN收发器),这款收发器的驱动代码比较复杂一些,需要配置CAN报文并且发送指定的报文内容才可以驱动TJA1153工作。后续补上TJA1153的代码。
CAN的采样率设置一般可配置成75%,80%等。采样率由seg1(相位段1),seg2(相位段2),propseg(传输段),syncseg(同步段)这几个参数决定。其中同步段参数固定为1.
采样率=(同步段+相位段1+传输段)/ (同步段+相位段1+相位段2+传输段)
例如 seg1 = 3, seg2 = 2 , propseg = 2 , syncseg = 1
则采样率 = (1+2+3)/(1+2+3+2) = 75%
CAN通信的Block Diagram:
配置工具
工具:S32KDS3.5 。如果不知道如何使用该工具请自行查阅相关指导说明,以下内容默认读者对该软件具有一定的使用经验,比如如何导入例程等。
软件版本:导入NXP的官方例程(S32K358对应版本),由于汽车行业目前使用EB配置MCAL的居多,可以选择带Autosar封装版本的Demo。导入Autosar接口封装的版本好处在于大部分配置项和EB差不多。NXP也提供了EB版本,但是由于时间有限,后期会在EB上配置该工程并验证。
配置步骤
CAN 配置
第一步:导入官方例程,带Autosar封装的版本。配置相关引脚,包含从TJA1463获取状态的引脚以及控制TJA1463相关的引脚。
第二步:配置CAN时钟
第三步:添加CANIF组件
第四步:配置CAN组件,CAN General
第五步:配置CAN Controller
第六步:配置CAN HardwareObject 一个CAN controller对应两个CAN HardwareObject(接收和发送)。
第七步:代码部分(配置了CAN0和ADC6)。以下代码为多张图片,代码是部分截图。
以上就是配置CAN的全部。
代码详解
硬件接通好CANoe之后可测试通信(一般会接一个外围电阻120欧姆)。进Read函数,找到对应的buffer数组,可查看CANoe发送的报文。mcu往外发的报文也可通过CANoe观察到。
使用CANFD时,除了配置里打开相信的CANFD配置,代码里面的报文属性里,有一个是是否使能CANFD。需要将该结构体变量置位1,即使能。
注意事项
在添加多个CAN 控制器时,添加CAN HardwareObject时,接收类型的Object要连续放在一起,不然CAN接收无法正常通信。
If u think it's good , pls give a like。 Thanks a lot!