Autosar MCAL-S32K324 CAN-FD配置及使用

文章目录

    • 前言
    • 配置MCAL CAN
      • CAN Controller
      • 配置CAN FD波特率
      • 配置Ram block
      • 关于MailBox
    • 代码中使用CAN FD报文发送和接收
      • CAN FD报文接收
      • CAN FD报文发送
    • 总结

前言

在之前的文章中,介绍了标准CAN的MCAL配置,在此基础上,扩展为CAN-FD就会容易很多了。最近项目调试需要用到CAN-FD,下面介绍基于S32K324芯片,EB配置CAN FD,及在代码中如何发送和接收CAN FD报文(非Autosar软件)

配置MCAL CAN

对于之前已经配置好的标准CAN模块,扩展为CAN FD只需要配置如下即可

CAN Controller

勾选支持CAN FD ISO

配置CAN FD波特率

CAN Baudrate Type Suport选择为ENHANCE_CBT
Autosar MCAL-S32K324 CAN-FD配置及使用_第1张图片
配置CAN FD波特率,此处波特率为2M,CNA BUS时钟为16M,计算公式为 16/1/(1+1+4+2)=2M
Autosar MCAL-S32K324 CAN-FD配置及使用_第2张图片
注意配置项CAN FD Prescaler一定要打开,如果是灰色的话会有问题。

配置Ram block

使能CanRamBlock,选择PATLOAD为64
Autosar MCAL-S32K324 CAN-FD配置及使用_第3张图片

关于MailBox

对于MailBox来说,没有关于CAN FD的配置,只有标准帧还是扩展帧的选择,过滤器也不能配置关于CAN FD的位,也就是说过滤器不能过滤CAN还是CAN FD报文,所以实际使用时,需要在上层判断是CAN message还是CAN FD message

代码中使用CAN FD报文发送和接收

CAN FD报文接收

对于接收报文,需要判断接收到的ID的CAN FD指示位是否为1,在S32K324的MCAL中定义如下:

#define CAN_FD_FRAME_U32        ((uint32)0x40000000U)

例如,当接收到的报文为0x11时,实际传到callback函数中的ID值为0x40000011,当接收到该值时,即可开始处理接收到的数据

需要注意的是,如果是扩展帧报文,还需要加入扩展帧位的,和CAN FD位同理,定义如下:

#define CAN_EXTENDED_ID_U32     ((uint32)0x80000000U)

CAN FD报文发送

发送报文和接收类似,在发送之前,将CAN FD位加入即可

Can_PduType CanFD_CreatePduInfo(Can_IdType id, PduIdType swPduHandle, uint8 length, uint8* sdu)
{
    Can_PduType PduInfo;
    
    PduInfo.id = id | CAN_FD_FRAME_U32;
    PduInfo.swPduHandle = swPduHandle;
    PduInfo.length = length;
    PduInfo.sdu = sdu;
    
    return PduInfo;
}

总结

现在越来越多的车辆使用了CAN FD,从CAN到CAN FD的扩展也是必然的趋势了。对于S32K324来说,从CAN到CAN FD还是非常方便的。

你可能感兴趣的:(Autosar笔记,S32K3学习笔记,Autosar,mcal)