Aurix TC3xx系列MCU中的MCMCAN模块是基于Bosch的M_CAN的IP实现的,本文主要介绍MCMCAN的一些基本信息。如下图,每个MCU有3个MCMCAN模块,每个模块有4个Can nodes,也就是4个CAN控制器,总共有12个CAN控制器。
MCMCAN硬件单元中有一段RAM区域来作为发送和接收报文数据的缓存区,下面是每个Controller的RAM区地址空间分配图。
发送缓存区每个element支持3种模式:Tx Dedicated Buffer,Tx FIFO Buffer和Tx Queue Buffer,只支持一个Tx FIFO。每个CAN Controller最大支持32个Tx Buffers,这些缓冲区可支持下面5中配置方式:
接收缓存区每个element支持2种模式:Rx FIFO和Dedicated Rx Buffer,最多支持两个Rx FIFO。
邮箱。软件与硬件信息交互的接口,在Autosar规范中,定义为一个struct数据类型,Can_HwType,包含CanId,Hoh,ControllerId三个信息。
在Autosar的架构中,为了实现软硬件之间的解耦,一般来说,CanIf层不直接访问驱动层,而是抽象出一个struct数据类型,用于软件与底层驱动信息的交互。MailBox会用在CanIf-RxIndication接口中,第一个参数就是MailBox,CanIf通过MailBox->Hoh把接收到的数据传递给上层模块。
硬件对象。一个HW object可以理解是CAN硬件单元的RAM区中的一个PDU缓存区。
硬件接受句柄。一般来说,每个HRH表示一个Hardware Object,由驱动层CanDrv定义。通俗来说,HRH就是一个指向某个Hardware Receive Object的一个变量,通过这个变量可以直接访问到关联Hardware Object。
硬件发送句柄。HTH同样由CanDrv定义。一般来说,每个HTH表示一个或多个Hardware Object,具体使用几个Hardware Object,取决于RAM区域的配置。
HTH常用于Can_Write()接口中,将要发送数据传递给驱动层,HTH作为接口的第一个参数,指定使用哪一个HTH来缓存发送数据。同样,HTH也可以理解成指向某个Hardware Transmit Object的一个变量。