电子说
首先介绍MCAL的Port Driver模块。
PortDriver模块作为一个最基本的模块主要完成MCU的Port_Pin引脚的相关功能定义和初始化。通常而言Port_Pin的主要功能是作为GPIO、ADC、CAN、ICU、PWM、SPI等功能使用。
而对于一个Port_Pin而言,具体作为什么功能使用,要结合实际的原理图进行定义。无论一个Port作为什么功能使用,在AutoSAR中大概的策略就是通过IO HardWareAbs层进行相关的控制,具体的控制逻辑如下所示。
IO HardWare Abstraction SW根据用户设置的操作结合Port Driver模块对Port不同模式的设置,发出调用命令,然后Port Driver对Port中的相关寄存器进行操作,从而达到对Port具体Pin脚输入输出的控制。
AutoSAR架构中对Port Driver模块提供了几个以下几个具体的功能:
1.配置Port_Pin的属性
对于Port_Pin属性的定义主要包括:引脚不同功能的定义,也就是我们常说的复用功能,定义Port_Pin作为GPIO使用还是作为ADC或者是CAN等特殊功能使用;引脚方向定义(输入还是输出)、引脚初始值定义、是否支持输入输出方向变化、是否支持复用模式转换功能等;作为输入时选择上拉还是下拉、作为输出时选择开漏还是推挽输出、是否支持回读功能;未使用到的Port_Pin状态的定义;定义Port_Pin在使用中的Symbol Name(常见的定义方式PORT_A_PIN_0)等。
2.版本校验
对于特定的Port Driver在AutoSAR中都有相应的版本号,对于版本号的校验通过该功能进行使能与否,一旦使能,可以通过相应的API来核对版本号。
3.开发中相关错误的追溯
对Port Driver在实际开发中出现的相关错误进行定义,在开发阶段可以结合Det模块对Port Driver常见的错误进行追溯,快速定位开发中因为考虑不全或者粗心产生的错误。AutoSAR提供的Det功能可以快速定位相关错误。然后,根据具体的错误去修改相应的配置和进行代码优化。
4.常用的API
Port Driver模块主要做一些基础的初始化配置使用,因此用的API相对较少,主要包括Port_Init、Port_SetPinDirection、Port_RefreshPortDirection 、Port_GetVersionInfo、 Port_SetPinMode 等,具体的函数功能结合API的名字一般能猜到,具体的使用请参考AutoSAR的标准文档。在Port模块这些函数可以直接调用。
对于Port Driver这个模块在工具中的配置,AutoSAR标准文件也提供了详细的说明。下面图片展示了相关的配置内容。ETAS、Vector、EB等配置工具都是基于AutoSAR标准提供的参考进行定义的。
无论是基于工具的配置,还是手写功能对于Port层面的设计按照以上图中包含的内容进行设计基本上能满足大多数要求,但是有一些额外的设置可以根据具体的芯片型号结合配置工具实现。
下面结合本人在使用的时候出现的问题总结了几点经验:
1.在使用该模块的时候一定要结合具体的硬件进行选择相应的Port_Pin的模式,如果在使用的时候用到了模式切换的功能,一定要添加所有切换的模式状态,同时使能模式切换相关的API。
2.在选择输入输出方式的时候要考虑硬件的外部电路,据具体的电路和芯片相关的要求选择。
3.对于PartionRef功能的使用可能要结合具体的功能安全需求以及整个系统的Partion区分做选择。
4.对于没有使用的Port一定要根据要求配置,多数情况下默认状态就可以,但是也要具体问题具体分析。
5.对于支持方向变化的Port_Pin,作为方向切换使用时,一定要注意配置的端口的属性,防止使用的时候因为配置原因导致读出或者写入的电平出现不一致。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !