【使用C++开发MCU】05-CAN实例之NXP S32K1 FlexCAN模块

本文详细介绍了NXP S32K1系列MCU的FlexCAN模块,包括协议引擎、控制器主机接口和总线接口单元的结构,以及操作模式、MBs结构、Rx FIFO、发送和接收过程。FlexCAN遵循ISO 11898-1和CAN 2.0 B协议,适用于高效开发CAN/CAN FD应用。
摘要由CSDN通过智能技术生成

C++开发MCU 博客专栏

概述

本文总结归纳NXP S32K1系列的FlexCAN模块,概括其特征,讲解其MBs(message buffers)及其他处理、配置过程,以便更高效的开发CAN、CAN FD相关应用。

FlexCAN是NXP实现了ISO 11898-1 standard and CAN 2.0 B 协议的CAN控制器模块IP,不仅存在于S32K1系列MCU上,也存在于S32K3等MCU上,不同型号含有不同数量的FlexCAN实例数,其MailBox数量也不同。S32K1一般含有1-3个FlexCAN,不全支持CAN FD(up to 8 Mb/s),一般含有16,32或54个消息邮箱。

FlexCAN模块框图

FlexCAN Block

协议引擎Protocol Engine (PE)

PE用于管理CAN总线上的串行通讯: 请求RAM访问用于接收、发送消息帧;验证接收的消息; 运行错误处理; 探测CAN FD帧。

控制器主机接口Controller Host Interface (CHI)

CHI用于管理接收、发送的消息缓存( message buffer),负责仲裁和ID匹配。

总线接口单元Bus Interface Unit (BIU)

BIU用于控制访问内部总线,建立与CPU和其他模块的联系。包括时钟、寻址、数据总线、中断、DMA的访问都是通过BIU.

操作模式

  • Normal mode
  • Freeze mode
    配置其他寄存器时常需要进入此模式,此时,没有发送、接收,总线同步丢失。
  • Loop-Back mode
    用于自发自收。RX pin输入被忽略,TX pin隐性。
  • Listen-Only mode
    发送失能,错误计数器冻结,模块处于CAN Error Passive mode。
  • CAN FD Active mode
    FD没有RX FIFO、Rx FIFO DMA和Pretended network support。
  • Stop mode
    模块自生处于 inactive state,时钟可断掉。
  • Pretended Network mode
    CHI 时钟断掉,PE时钟保持,Rx接收处理依旧可以过滤将到来的消息。

MBs结构

寄存器占128Bytes, 地址偏移从0x80 to 0x27F 分配给32个128位(4字)的MBs消息邮箱。
64个数据的MB结构
上图是含有64个载荷数据时的MS结构。头部固定8Bytes,根据CAN消息的载荷 8, 16, 32, or 64,每个消息邮箱被分配组织为 16, 24, 40, or 72 bytes。

地址偏移从0x80 to 0x27F 分配给32个128位(4字)的MBs消息邮箱–>对于8bytes载荷的CAN帧,正好有32个MBs,载荷增多,MBs个数也就减少了。

载荷 MBs个数
8 32
16 21
32 12
64 7

Rx FIFO结构

当FIFO使能时࿰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值