CAN Driver
前言:CAN驱动针对的是微控制器内部的CAN控制器,它可以实现以下功能:
对CAN控制器进行初始化;
发送和接收报文;
对报文的数据和功能进行通知(对接收报文的指示、对发送报文的确认);
溢出和错误处理;
唤醒检测。
此外,CAN驱动还具有以下特性:单个或多个CAN通道、CAN驱动的多重实例化、对接收报文的中断/轮询模式。
CAN驱动是MCAL的一部分,可以执行硬件访问、向上层提供独立于硬件的API,而仅有的能够访问CAN驱动的上层是CAN接口(CAN Interface)。CAN驱动也可以为数据传输的初始化和通知接收事件的回调函数提供服务,该服务也是独立于硬件的。除此之外,CAN驱动也可以控制从属于同一个CAN硬件单元的CAN控制器的行为和状态。
在工具EB tresos studio(下文称EB)下,以“simple_demo_can_rte “工程为例,该工程所用MCU型号为S32K144(pin100),工程在EB工具下打开页面如图1,配置AUTOSAR MCAL的CAN驱动配置,涉及CAN、PORT、MCU模块相关内容。
图1:EB工程概览
1. PORT模块配置CAN
1.1 CAN PORT 容器
如图2左下角outline窗口所示,在PortContainer的实例PortContainer_0中有PortNumberOfPortPins和PortPin两项,前者是PortPin数量后者为Port具体配置项。
图2:PortPin配置
1.2 CAN PORT 配置
如添加配置CAN0,如图2中在红框1处PortNumberOfPortPins加2,红框2处,点击添加Port配置实例。双击打开新增实例,一般需要配置下列四处红框标识处即可,其中
PortPin Pcr这个的值就是当前你所使用的引脚的MSCR number,在芯片的用户手册附件可查(图4),每一个引脚都有对应的值。选择正确的PCR值后PortPin Mode的枚举中就会有对应的选项出现。图4为CAN0_TX脚配置,CAN0_RX按照同样逻辑配置。
图3:CAN PortPin配置
图4:IO Signal Table
2. 设置CAN模块
图5:CAN 控制器配置
2.1 添加CAN控制器实例
点击图5所示outline窗口的CanConfigSet->CanController,如图所示主窗口点击箭头所指的加号添加控制器实例,双击实例进入配置页面。
图6:CAN控制器配置页面1
图7:CAN控制器配置页面2
2.2 一般配置项
如图6主要需要设置的项有硬件CAN通道选择,收、发、busoff工作方式选择,图7红框1处CAN波特率配置,红框2处CAN时钟配置。
2.3 波特率配置方式
图8:CAN波特率配置1
图9:CAN波特率配置2
图10:CAN波特率配置3
按照计划的波特率填入prop_seg、seg1、seg2等值。
-
- CAN时钟源参考点配置
CAN时钟源可选择项在MCU模块的McuClockReferenePoint下选择,路径和添加步骤如图11所示,可以直接选择合适的时钟频率或者重新添加。点击图11的2处并双击进入图12所示页面,选择1处时钟源后点击2处图标会自动显示该时钟源大小。
图11:CAN时钟配置1
图12:CAN时钟配置2
-
- 引用配置实例
上述配置完成后,回到CAN控制器配置处,点击图13箭头所示图标,点击List referenceable nodes工具会列出可选项,从中选择需要的即可。
图13:左侧图标功能菜单
-
- mailbox设置
按照图14添加mailbox实例并双击进入如图15所示配置页面,一般所需配置项如图红框所示,收、发、CANID过滤配置,CAN控制器配置如图13所示同样的方法,索引到合适的CAN控制器配置。
图14:mailbox设置路径
图15:mailbox配置