AutoSAR系列讲解(入门篇)4.2-BSW的I/O功能

一、架构与术语解释


这里主要是说I/O的功能,而其中会用到一些模块,下面途中我将用到的模块都高亮显示了,并且放大到了右边的途中展示其中的子模块(该子模块就是BSW中最小的单位了,如其中的ADC子模块)。这里要强调的一点是:I/O并非是我们经常说的GPIO,这里的I/O包括了DIO(数字输入输出,就等同于单片机上的GPIO)、ADCPWM

下面我将详细解释上图子模块的功能:

  • I/O Signal Interface: 对输入数据的初步处理,比如输入消抖
  • Driver for ext. ADC ASIC:外置ADC的驱动,比如当有外部ADC采样芯片的时候,通过SPI通信,将数据传入主芯片。这里就需要有对外部ADC处理的驱动模块
  • Driver for ext. I/O ASIC: 同上,只不过这里是I/O
  • SPI Handler:SPI处理驱动,将硬件中的SPI封装成API供上层调用(有的使用的是I2C,这里就不单独列出来了,大家把图中的SPI改成I2C就行了)
  • ADC PWM DIO:MCAL中的驱动,将硬件中的ADC、PWM、DIO分别封装成API供上层调用
  • SPI ADC PWM DIO(Hardware): 就是指芯片中的这些功能模块

值得一提的是,I/OHwAb是需要手写代码的(当然也可以Matlab生成,这里的手写是指非AutoSAR的代码,需要我们自己添加),在DaVinci中可以申请一个SWC声明为IOHwAb,来作为一个c文件,在其中添加代码(说白了就是当成SWC使用)。

二、举个例子


比如:汽车车内温度传感器传入温度数据并被ECU处理的流程


上图中:

  • Adc_ReadGroup是MCAL对上层开放的API函数,Read到的是ADC采样值(比如12位精度最大就是4095)
  • Get_SensorValue是一个服务函数,是写在了IoHwAb中的,Sensor

        SWC和IoHwAb是通过C/S相连的,Sensor
        SWC就可以通过 Rte_Call_Get_<port>_SensorValue 来调用整个函数。这个函数的主要作用就是通过ADC采样值计算出实际的传感器阻值(多少欧姆)

  • Send_Temperature就是将Sensor SWC中的树传递给App SWC,在Sensor

        SWC中可以将欧姆值计算成实际的温度值。这样一来,最终App
        SWC拿到的就是实际的温度值

猜你喜欢

转载自blog.csdn.net/qq_42700289/article/details/131474363