搞一点AutoSar--MCAL SPI-1

整理了一点SPI的资料

目录

    • 1、SPI模块简介
    • 2、SPI驱动模块API的使用方法
    • 3、SPI通信主要概念
    • 4、选择SPI通道缓存(Buffer)位置
    • 5、SPI驱动模块API调用流程

1、SPI模块简介

搞一点AutoSar--MCAL SPI-1_第1张图片

                      图1 MCAL 4个驱动组与微控制器内核和外设的映射关系

SPI属于MCAL模块中的通信驱动组,通信(communication)驱动组负责提供对ECU板载通信外设的(如SPI等)的初始化和控制功能,以及对汽车网络的通信外设(如CAN等)的初始化和控制功能;
SPI驱动提供配置片上SPI外设、通过SPI总线从外部器件读取数据、写入数据到外部器件的服务。除此之外,SPI驱动还提供访问一些特殊SPI器件(如EEPROM、看门狗、I/O专用芯片等)的服务,下图所示为不同ECU抽象层的组件通过SPI驱动访问片外器件驱动的调用关系示意。

搞一点AutoSar--MCAL SPI-1_第2张图片

                                图2 SPI驱动访问片外器件驱动的调用关系示意

2、SPI驱动模块API的使用方法

AUTOSAR MCAL根据通信方式把SPI驱动模块分为如下3个功能等级:

  • LEVEL 0:同步SPI驱动模块,以同步方式通信。
  • LEVEL 1:异步SPI驱动模块,以异步方式通信。
  • LEVEL 2:高级的SPI驱动模块,以同步或异步方式通信。

LEVEL 0:功能等级提供轻量级的SPI驱动服务,只能处理简单的同步通信。这里“简单的同步通信”可以理解为在通信过程中调用的函数是阻塞的,换句话说,其他函数在通信完成之前不能打断当前通信调用的函数。这样的通信方式通常用于简单SPI总线网络中,以及与片外高速器件通信的ECU上。

LEVEL 1:功能等级提供轻量级的SPI驱动服务,只能处理异步通信。所谓异步通信,是指通信过程调用的函数是非阻塞的,其他函数可以继续执行而无须等待通信完成。通信完成后以通知事件(Notification)告知用户,在软件上可以由中断或者轮询的方式实现。这样的通信方式通常用于具有不同优先级的SPI总线网络中,以及与片外低速器件通信的ECU上。

LEVEL 2:功能等级提供了完整的SPI驱动服务,能够处理同步通信和异步通信。这种模式通常用于有多个SPI硬件单元的MCU上,MCU需要处理多个SPI任务,既包括针对不同优先级的任务,也包括针对不同速度片外器件的任务。例如,一个SPI硬件通过同步方式与片外高速器件通信,另一个SPI硬件通过异步方式与片外低速器件通信。

3、SPI通信主要概念

AUTOSAR MCAL中SPI总线和控制器的行为包括以下几种定义:
搞一点AutoSar--MCAL SPI-1_第3张图片

                                    图3 在SPI时序中标出的SPI通道、任务、序列

通道(Channel):数据在软件上是以SPI通道为媒介进行通信的,在同一个SPI通道中传输的配置参数、数据长度、源地址、目的地地址等数据属性是相同的。

任务(Job):一个SPI任务中可以包含多个SPI通道,且应至少有一个通道,否则没意义;这些通道必须使用相同的片选信号,而且片选信号在该SPI任务中不能释放给其他任务。换句话说,一个SPI任务通常与一个SPI器件通信,这个通信过程可能会包含多个SPI帧。由于任务不可再分,因此一个任务在执行时不能被其他任务打断。

序列(Sequence):一个SPI序列包含多个连续的SPI任务,但这些任务可以根据优先级调整时序。SPI序列根据配置要求,可以选择是否可被其他序列打断。如图3所示,在SPI时序中标出了SPI通道、任务、序列的定义,有助于读者直观地理解上述3个定义。在AUTOSAR MCAL配置时,SPI通道只定义一次,但根据用户应用需求可以配置在不同的SPI任务中;同样,SPI任务只定义一次,但可以配置在不同的SPI序列中。
传输是以序列为单位,只能操作序列。接收是具体到某个通道。获取状态或者回调,Job及Sequence都可以(Level 1, Level 2)。

4、选择SPI通道缓存(Buffer)位置

为充分利用MCU本身的性能,并且允许SPI控制器从指定的内存地址发送数据(或接收数据到指定的内存地址),所有SPI功能等级(LEVEL0、LEVEL 1、LEVEL 2)都可以选择SPI通道缓存的位置,分为内部缓存(Internal Buffer,IB)的通道和外部缓存(External Buffer,EB)的通道。
内部缓存是指发送/接收数据的缓存是由SPI驱动模块分配的。有的MCU的SPI控制器内部有独立缓存,因此,设计内部缓存的通道是为了利用这类MCU本身的性能;如果MCU的SPI控制器内部没有独立缓存,则使用软件模拟。
外部缓存是指发送/接收数据的缓存是由用户指定的,这也是为了复用外部缓存空间。SPI驱动模块提供了如下表所示的API供上层软件组件调用。

搞一点AutoSar--MCAL SPI-1_第4张图片

5、SPI驱动模块API调用流程

AUTOSAR MCAL规范中给出了同步方式通信和异步方式通信下SPI驱动模块API调用流程,下图所示为内部缓存通道在异步方式通信下SPI驱动模块API调用流程。
搞一点AutoSar--MCAL SPI-1_第5张图片

                               内部缓存通道在异步方式通信下SPI驱动模块API调用流程

你可能感兴趣的:(【筑基】,AUTOSAR-MCAL入门,物联网,c语言,汽车)