AUTOSAR 架构下的SPI模块的理解

一、简介

本文主要介绍AUTOSAR 架构下的SPI模块。分析Spi的运行机制以及基于Davinci Configuration Pro配置SPI模块,完成SPI通信。

二、SPI模块

一、模块简介

SPI处理程序/驱动程序为单片SPI [串行外设接口]处理程序/驱动程序提供功能和API。该软件模块包括处理和驱动功能。这种单片SPI处理器/驱动器的主要目标是充分利用每个微控制器的功能,并根据静态配置实现优化,以尽可能地满足ECU的需求。

因此,该规范定义了可选择的功能级别和可配置特征,以允许设计利用微控制器特性的高可扩展模块。

SPI处理程序/驱动程序是微控制器抽象层(MCAL)的一部分。它提供读取和写入通过SPI总线连接的设备的服务。它还提供了配置片上SPI外设所需的机制。

SPI具有4线同步串行接口。使用片选线(CS)启用SPI通信。SPI通信由3线接口执行,包括用于串行数据主线 - 输出 - 从 - 输入(MOSI),串行数据主 - 输入 - 从 - 输出(MISO)和串行时钟(CLK)的线。

SPI外设可能取决于系统时钟,预分频器和PLL。因此,系统时钟的变化(例如,PLL开启 - > PLL关闭)也可能影响SPI硬件的时钟设置。

SPI处理程序/驱动程序模块不会在初始化函数中设置用于配置时钟,预分频器和PLL的寄存器。这必须由MCU模块完成。

根据微控制器,SPI外设可以与其他外设共享寄存器。在这种典型情况下,SPI处理程序/驱动程序与MCU模块有关系,用于初始化和取消初始化这些寄存器。

根据所选的功能级别,SPI处理程序/驱动程序的一般行为可以是异步或同步的调用方式。

二、Channel Job Sequence

AUTOSAR 提供了三种SPI的抽象。Channel Job Sequence。

一张图可以说明三者的关系。

 

一个Job 代表了一次完整的SPI通信,一个Job可以由一个或者多个Channel组成,Channel用来装载SPI的发送与接收数据。

一个Sequence可以由一个或者多个Job,可以将一个操作序列抽象成一个Sequence。

SPI传输的最小单元是由连续的Job组成的Sequence,依据Job的优先级将Job 依次发送出去。

 

三、同步调用与异步调用

AUTOSAR 为SPI 提供了两种方式通信的接口。

  1. 同步调用    Spi_SyncTransmit
  2. 异步调用 Spi_AsyncTransmit

 

同步调用,是需要等待返回调用结果,而异步调用这是发起任务,一般可以通过回调函数来告知调用结果。

对于同步调用接口 Spi_SyncTransmit() Sequence状态的切换都是在接口函数中完成的。

将Sequence 状态置为PENDING。

                                

Sequence处理完成 立即置为OK

                  

 

对于异步接口Spi_AsyncTransmit(),会把Sequence中的Job按照顺序加载到Job的调度表中,同时将Sequence的状态置为PENDING。由Spi_ScheduleJob函数通过DMA加载到硬件。从机返回数据通过DMA加载到对应的Channel的DestBuf中,此时Sequence并没有置为OK,而是通过Spi_Dspi_IsrDmaRx 函数去查询DMA是否传输完成,然后在重新将Sequence的状态置为OK。

这里有两种方式来调用Spi_Dspi_IsrDmaRx()。一种是在SPI的Rx中断中,一种是在MainFunction中。因此只要使用异步调用接口办法直接通过接口返回值来判断数据是否发生完成,也无法判断Slave是否有返回数据。

  

 

这里有三种方式来解决这个问题。

  1. 将同步调用接口 增加Sequence等待检查,抽象成同步方式;即等待中断服务函数将Sequence的状态切换为OK。
  2. 调用异步接口之后不管,在下一次发送相同Sequence时检查Sequence的状态,如果是非OK 就调用Spi_Cancel 函数取消上次Sequence的发送。
  3. 使能DMA Rx的Notificaion 功能,通过Call Back函数来告知调用方已经完成传输   

  以上三种方式,我采用了第二种。我认为第三种方式使用于大量数据传输,菊花链的数据量并不是很大。


 三、配置项与关联

一、SPI配置

SPI的配置项只有在使用DMA功能是才与MCL模块相关联。

在SpiPhyUnits的配置项中,直接关联到硬件的SPI

                      

 

SpiExternalDevice 中通过HW Uint关联到SpiPhyUints

 

   

SpiJob 中通过Device Assignment 关联到Device,通过ChannelList 关联到Channel

            

 

二、MCL配置

MPC5746R有64个DMA通道,可以通过手册查到应对的DmaMux。

 

SPI(Serial Peripheral Interface)是一种串行外设接口,用于在微控制器、存储器和其他外设之间进行通信。AUTOSAR(Automotive Open System Architecture)是一种在汽车电子系统中广泛应用的标准化软件架构AUTOSAR SPI传输是指在AUTOSAR架构中使用SPI接口进行数据传输。SPI传输在汽车电子系统中具有重要作用,可用于连接各种外设,如传感器、执行器和存储器等。SPI接口通过主从模式进行通信,其中一个设备作为主设备控制通信过程,而其他设备则作为从设备接收和发送数据。 在AUTOSAR架构中,SPI传输通常是通过驱动程序来实现的。驱动程序负责配置和控制SPI接口的各种参数,如时钟频率、传输位数和传输模式等。SPI传输的数据可以是单向的,主设备向从设备发送数据,也可以是双向的,主设备和从设备之间进行数据的双向传输。 AUTOSAR SPI传输的主要优点包括高速传输、可靠性和灵活性。SPI接口可以以高速率进行数据传输,适用于对实时性要求较高的应用场景。此外,SPI传输也具有较低的传输延迟和较小的系统开销。AUTOSAR架构还允许SPI接口的配置和扩展,以满足不同外设的需求。 然而,AUTOSAR SPI传输也面临一些挑战。首先,SPI接口不具备数据包传输机制,需要在协议层上进行数据包的封装和解析。其次,SPI传输的线路长度受限,通常适用于近距离的设备连接。最后,SPI传输也存在数据安全性和冲突的问题,需要在设计阶段进行充分考虑。 总之,AUTOSAR SPI传输是一种在AUTOSAR架构中使用SPI接口进行数据传输的方法。它可以实现高速、可靠和灵活的数据传输,广泛应用于汽车电子系统中。对于开发人员来说,了解和理解SPI传输的原理和使用方法,对于设计和实现汽车电子系统具有重要意义。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值