CP AUTOSAR之SPI Handler/Driver详细说明

本文遵循autosar标准:R22-11

1 简介及功能概述

  SPI 提供对通过 SPI 总线连接的设备进行读取和写入的服务。它为多个用户提供对 SPI 通信的访问(例如 EEPROM、看门狗、I/O ASIC)。它还提供配置片上 SPI 外设所需的机制。
  该规范描述了单片 SPI 的 API。该软件模块包括处理和驱动功能。该单片 SPI 的主要目标是充分利用每个微控制器的功能,并允许根据静态配置进行实现优化,以尽可能 满足 ECU 的需求。因此,该规范定义了可选择的功能级别和可配置特性,以允许设计利用微控制器特性的高可扩展模块。
  要配置 SPI ,应遵循以下步骤:

  • 应选择 SPI 功能级别并配置可选功能。
  • SPI 通道应根据数据使用情况进行定义,它们可以在 SPI (IB) 内部缓冲或由用户 (EB) 提供。
  • SPI 作业应根据硬件属性 (CS) 进行定义,并且它们将包含使用这些属性的通道列表。
  • 作为最后一步,应定义作业序列,以便以排序方式(按优先级排序)传输数据。

  SPI可以根据调用的API函数和选择的功能级别以异步或同步方式传输数据帧。该规范涵盖了合并在一个模块中的处理程序/驱动程序功能。一是 SPI 处理部分,用于处理对可能位于ECU 抽象层的总线的多次访问。另一部分是直接访问微控制器硬件的 SPI 驱动程序,该驱动程序可能位 于微控制器抽象层中。

2 首字母缩写词和缩写词

在这里插入图片描述

3 相关文档

3.1 输入文件

[1]分层软件架构:AUTOSAR_EXP_LayeredSoftwareArchitecture.pdf
[2] SPAL需求:AUTOSAR_SRS_SPALGeneral.pdf
[3]基础软件模块总体要求:AUTOSAR_SRS_BSWGeneral.pdf
[4] 默认错误跟踪器:AUTOSAR_SWS_DefaultErrorTracer.pdf
[5] ECU配置规格:AUTOSAR_TPS_ECUConfiguration.pdf
[6] SPI 处理程序/驱动程序的要求:AUTOSAR_SRS_SPIHandlerDriver.pdf
[7] 诊断事件管理器文档:AUTOSAR_SWS_DiagnosticEventManager.pdf
[8]术语表:AUTOSAR_TR_Glossary.pdf
[9] MCU驱动文档:AUTOSAR_SWS_MCUDriver.pdf
[10] PORT驱动文档:AUTOSAR_SWS_PORTDriver.pdf
[11]基本软件模块描述模板:AUTOSAR_TPS_BSWModuleDescriptionTemplate.pdf
[12]基础软件模块列表:AUTOSAR_TR_BSWModuleList
[13]标准类型文档:AUTOSAR_SWS_StandardTypes.pdf
[14]基础软件模块通用文档:AUTOSAR_SWS_BSWGeneral.pdf

3.2 相关文档

  AUTOSAR 提供了基本软件模块的通用 文档 [14](SWS BSW General), 本文档对于 SPI 处理程序驱动程序也有效。SWS BSW General 文档应被视为 SPI 处理程序驱动程序的附加且必需的 文档。

4 约束

4.1 限制

  SPI 处理程序/驱动程序仅处理主模式。 SPI 处理程序/驱动程序仅支持全双工模式。

4.2 汽车领域的适用性

无。

5 对其他模块的依赖

   SPI Handler/Driver模块不负责在其 init 函数中设置配置时钟、预分频器和 PLL 的寄存器。这必须由 MCU 模块完成。注意,SPI 外设可能取决于系统时钟、预分频器和 PLL。因此,系统时钟的任何变化(例如PLL打开/PLL关闭/ 时钟分频器)也可能影响SPI硬件的时钟设置。根据微控制器的不同,SPI 外设可以与其他外设共享寄存器。在这种典型情况下,SPI Handler/Driver与 MCU 模块有关系,用于初始化和取消初始化这些寄存器。 如果使用微控制器引脚完成片选,则 SPI Handler/Driver与端口模块存在关系。在这种情况下,本文档假设这些微控制器引脚由 SPI Handler/Driver直接访问,而不使用 DIO 模块的 API。无论如何,SPI 取决于 ECU 硬件设计,因此它可能取决于其他模块。

6 溯源

7 功能

  SPI(串行外设接口)具有 4 线同步串行接口。数据通信通过片选线 (CS) 启用。数据传输采用3线接口由串行数据输出 (MOSI)、串行数据输入 (MI‑SO) 和串行时钟 (CLOCK) 线组成。

7.1 功能和特性

  本文档基于以前的文档经验,也基于已确定的案例。本节的目的是总结SPI Handler/Driver 的可扩展性如何允许从满足简单需求的简单软件模块到满足增强需求的软件模块。
在这里插入图片描述

  本文档规定了 SPI 的以下 3 个可扩展功能级别:

  • LEVEL 0,简单同步 SPI Handler/Driver:通信是基于同步处理(使用轮询机制)并使用 FIFO 策略来处理多次访问。缓冲区使用可配置以优化和/或利 用硬件功能。
  • LEVEL 1,基本异步 SPI Handler/Driver:通信是基于异步行为 (使用执行期间可选择的中断或轮询机制)并使用优先级策略来处理多个访问。缓冲区使用可按照 “简单同步”级别进行配置。
  • LEVEL 2,增强型(同步/异步)SPI Handler/Driver:通信基于异步行为(使用执行期间可选择的中 断或轮询机制)或同步处理,并使用优先级策略来处理多个访问。与其他级别一样,缓冲区的使用是可配置的。

  即使为同步传输中使用的作业和/或序列指定了通知函数,在 LEVEL0 的情况下也不会调用这些函数。SPI Handler/Driver的可扩展功能级别应始终是静态可配置的,即在预编译时配 置以实现最佳源代码优化。SpiLevelDelivered 参数应根据所描述的级别(0、1 或 2)配置为 3 个值之一,以允许选择 SPI Handler/Driver的可扩展功能级别。为了提高可扩展性,每个级别都有可配置(开/关)或可选择的可选功能。这些在专门章节中有详细描述。

7.2 一般行为

  本章一方面介绍了所有级别的常见行为和配置。另一方面,它指定每个级别的行为以及允许的可选功能。 SPI Handler/Driver接口配置应基于本文档中定义的通道、作业和序列(第 2 章)。 SPI Handler/Driver应支持一个或多个通道,
以便驱动所有类型 SPI 兼容硬件设备的作业和序列。数据传输应根据 Channels、Job 和 Sequences 配置参数进行。
  片选(CS)附在作业定义中。片选应在作业传输期间处理,并应在作业传输结束时释放。此片选处理应根据作业配置参数完成。 可以定义片选处理是否由硬件外设自主管理,无需驱动程序显式片选控制,或者 SPI 驱动程序应将片选线显式驱动为 DIO。
  当 SpiCsSelection = CS_VIA_GPIO 时,由实现决定配置到 SpiCsBehavior 中的片选行为是否适用。
  CS 处理示例:在 Job 传输开始时将 CS 设置为活动状态;保持它直到属于该作业的所有通道的传输结束,然 后将CS设置为非活动状态。一个通道被定义一次,但根据用户需求和本软件 文档,它可以属于多个作业。一项作业应至少包含一个通道。
  每个通道应有一个关联的索引,用于指定 Job中 Channel 的顺序,如果一个Job包含多个Channel,则包含的所有Channel在传输过程中具有相同的 Job属性,并且应静态链接在一起。 一项作业被定义一次,但根据用户需求和本软件文档,它可以属于多个序列。一个序列应至少包含一个作业。
  如果它包含多个,则包含的所有作业在传输过程中具有相同的序列属性,并且应静态链接在一起。用于传输的通道应该配置其参数,但允许传递空指针作为源和目标指针以生成虚拟传输。
在这里插入图片描述

  注:上图对应SpiCsBehavior=CS_KEEP_ASSERTED的配置。
  通道数据可能与处理的硬件和用户(客户端应用程序)给出的不同。在客户端,数据基于 SpiDataWidth 以 8、16 或 32 位模式处理(第 8.2.5 章)。在微控制器方面,硬件可以处理 1 到 32 位之间的数据,也可以 处理固定值(8 或 16 位),并且该宽度对于每个通道都是可配置的(SpiDataWidth)。SPI Handler/Driver应注意通道帧宽度 (SpiDataWidth) 和数据访问数据类型之间的差异。
  如果数据宽度 (SpiDataWidth) 完全相同(8 或 16 或 32 位),SPI 处理程序/驱动 程序可以直接发送和接收数据,而无需任何位更改。如果数据访问转换类型优于数据宽度(例如 SpiDataWidth = 12 位,数据访问为16 位),则通过 SPI Handler/Driver传输的数据应发送较低部分,忽略较高部分。接收下半部分,用零扩展。这确保用户始终获得相同的界面。
  根据独立于 Spi_DataBufferType 的 SpiDataWidth,将数据缓冲区作为 uint8、uint16 或 uint32 进行访问。数据访问将使用以下转换:uint8 代表 SpiDataWidth < 9、uint16 代表 9 =< SpiDataWidth < 17、uint32 代表 17 =< SpiDataWidth。

7.2.1 通用可配置功能:允许的通道缓冲区

  为了允许利用所有微控制器功能,同时也允许向专用存储位置发送数据或从专用存储位置接收数据,所有级别都具有与通道缓冲区位置相关的可选功能。因此,可以通过配置使用两种主要类型的通道缓冲:

  • 内部缓冲通道(IB):提供传输/接收数据的缓冲区由处理程序/驱动程序编辑。
  • 外部缓冲通道(EB):提供发送/接收的缓冲区由用户(静态和/或动态)。

  根据下面描述的3个用例,可以使用两种通道缓冲方法:

  • 方法0: SPI Handler/Driver仅管理内部缓冲区。
  • 方法1: SPI Handler/Driver仅管理外部缓冲区。
  • 方法2: SPI Handler/Driver管理两种缓冲区类型。

  SpiChannelBuffersAllowed参数应根据描述的使用情况配置为3个授权值(0、1或2)之一。
  应配置SpiChannelBuffersAllowed参数选择 SPI Handler/Driver管理的通道缓冲区。

7.2.1.1 IB 通道的行为

  内部缓冲区通道的目的是通过硬件利用包含此功能的微控制器。否则,应通过软件模拟此功能。
  对于IB通道,处理程序/驱动程序应提供缓冲,但它无法照顾传输过程中缓冲区中数据的一致性。Channel缓冲区的大小是固定的。接收到的通道数据应按通道存储在1个条目的内部缓冲区中。 SPI Handler/Driver不应处理同一通道上的另一个传输对这些“接收”缓冲区的覆盖。
  要传输的通道数据应按通道深度内部缓冲区复制在1个条目中。 SPI Handler/Driver无法防止用户在传输过程中覆盖这些缓冲区。处理程序/驱动程序应为接收和发送提供单独的缓冲区以确保发送的数据不会被接收的数据覆盖。

7.2.1.2 EB 通道的行为

  外部缓冲区通道的目的是重用位于外部的现有缓冲区。这意味着 SPI Handler/Driver不会监视它们。对于EB通道,应用程序应提供缓冲,并应在传输期间注意缓冲区中数据的一致性。Channel缓冲区的大小可以是固定的,也可以是可变的。通道缓冲区的最大大小应由配置定义。
  应用程序为SPI处理程序驱动器提供的缓冲区呃可能有不同的size。

7.2.1.3 缓冲通道使用

  下面提供了有关通道特征的信息:

IB Channels提供:更抽象的概念(隐藏缓冲机制)、实际和未来的最佳实施受益于硬件缓冲区设施(给定的256字节大小满足当今的要求)。
IB Channels建议使用:Daisy-chain、小型数据传输设备(最多10字节)。
EB Channels提供:支持大数据流通信的高效机制、从ROM表和备用RAM大小中发送常量数据、为不同的设备发送各种数据表(具有多个集成外围设备的高度复杂的ASICS,也是混合信号类型,可能超过IB硬件缓冲区大小)。
EB Channels建议使用:大数据流、EEPROM通信、复杂硬件芯片的控制。

  对于每个通道,如果当前通道选择IB,则用户配置IB缓冲区的数量(至少1);如果当前通道选择EB,则用户配置EB缓冲区的最大数据量。

7.2.2 级别 0,简单同步行为

  此功能级别的目的是为处理程序/驱动程序提供一组减少的服务,以仅处理简单的同步传输。对于包括简单SPI网络的ECU以及使用高速外部设备的ECU来说,通常都是这种情况。简单的同步传输意味着调用传输服务的函数在传输过程中被阻塞,直到传输完成。LEVEL 0条件下 SPI Handler/Driver应提供同步SPI总线传输服务。
  对于工作在LEVEL 0的 SPI Handler/Driver,当没有正在进行的序列传输时, SPI Handler/Driver应处于空闲状态SPI_IDLE。这个单片 SPI Handler/Driver能够处理一对n根据所使用的微控制器的SPI总线。然后SPI总线被分配给作业而不是序列。因此,不同SPI总线上的作业可能属于同一序列。
  所以:如果要传输的序列使用不同的总线并且启用了参数SPI_SUPPORT_CONCURRENT_SYNC_TRANSMIT,则LEVEL 0 SPI Handler/Driver应接受并发Spi_SyncTransmit。默认情况下应禁用此功能。这意味着在一个序列正在进行的传输期间,所有传输另一个序列的请求都将被拒绝。
  LEVEL 0 SPI Handler/Driver行为应包括共同特征:选中Allowed Channel Buffers。如果不同的作业(以及序列)具有公共通道,则 SPI Handler/Driver环境应确保读取和/或传输过程中不会调用写入函数。当检测到硬件错误时, SPI Handler/Driver应停止当前序列,按照配置向DEM报告错误,并将作业状态设置为SPI_JOB_FAILED,将序列状态设置为SPI_SEQ_FAILED。
  Channel数据传输时,读写功能不能保证数据的完整性。

7.2.3 第 1 级,基本异步行为

  此功能级别的目的是为处理程序/驱动程序提供一组减少的服务,以仅处理异步传输。对于具有与具有不同优先级的SPI网络相关的功能的ECU以及使用低速外部设备的ECU来说,通常都是这种情况。异步传输是指在传输过程中,调用传输服务的用户不会被阻塞。此外,可以在传输结束时通知用户。通常,根据软件设计,可以通过轮询或中断机制来检测异步结束传输。此级别的功能提出了在执行期间可选择的两种机制。
  轮询机制和中断机制模式SPI总线应在执行期间可选择。LEVEL 1 SPI Handler/Driver应为SPI总线提供异步传输服务。异步传输意味着当传输正在进行时,调用传输服务的用户不会被阻塞。
  LEVEL 1下的 SPI Handler/Driver应为SPI总线提供异步传输服务。此外,还可以在传输结束时通知用户。对于在LEVEL 1下运行的 SPI Handler/Driver,当没有正在进行的序列传输时, SPI Handler/Driver应处于空闲状态。该处理程序/驱动程序将由多个软件模块使用,这些软件模块可以彼此独立,也可以属于不同的层。因此,将为作业分配优先级,以便找出多重访问的具体情况。
  这些情况通常发生在基于异步机制的实时系统中。作业已分配优先级。序列中链接的作业应具有相同或递减的优先级。这意味着第一个作业应具有序列中所有作业的同等优先级或最高优先级。作业的优先级顺序应从低值到高值定义,值越高优先级越高(从0到4,限制为4个优先级)。
  参考作业优先级,该处理程序/驱动程序需要规则来在这些特定的多次访问情况下做出决定。 SPI Handler/Driver调度方法应调度作业为了首先发送最高优先级的作业。该单片SPI处理程序/驱动器能够根据所使用的微控制器处理1到n条SPI总线。但SPI总线分配给作业而不是序列。
  因此,不同SPI总线上的作业可能属于同一序列。所以:LEVEL 1 SPI Handler/Driver可能允许同时传输多个序列。这意味着在序列传输期间,应评估所有传输另一个序列的请求,以便接受开始新序列或根据主导作业拒绝它。
  LEVEL 1 SPI Handler/Driver行为应包括公共功能:已选择的允许通道缓冲区,以及配置的异步功能:可中断序列。
  检测到硬件错误时, SPI Handler/Driver应停止当前序列,按照配置向DEM报告错误,并将作业状态设置为SPI_JOB_FAILED,将序列状态设置为SPI_SEQ_FAILED。
  如果作业配置了特定的结束通知函数,则 SPI Handler/Driver应在作业传输结束时调用此通知函数任务。如果序列配置了特定的结束通知函数,则 SPI Handler/Driver应在序列传输结束时调用此通知函数。

7.2.4 异步可配置功能:可中断序列

  当配置了有效的通知函数指针时, SPI Handler/Driver应在作业传输结束时调用此通知函数,无论作业传输的结果是SPI_JOB_FAILED还是SPI_JOB_OK(避免死锁或无限循环)。当配置了有效的通知函数指针时, SPI Handler/Driver应在序列传输结束时调用此通知函数,无论序列传输的结果是SPI_SEQ_FAILED、SPI_SEQ_OK或SPI_SEQ_CANCELLED。为了允许利用异步传输机制,该 SPI Handler/Driver的级别1和级别2具有关于暂停序列传输的可选功能。
  因此,可以通过配置使用两种主要的序列:

  • 不可中断序列,每个启动的序列传输不会被处理程序/驱动程序暂停,直到传输结束。
  • 混合序列,根据其配置,开始的序列传输可能会被处理程序/驱动程序在两个连续作业之间暂停。

   SPI Handler/Driver的环境应配置Spi‑InterruptibleSeqAllowed参数(ON/OFF),以便选择 SPI Handler/Driver管理哪种序列。

7.2.4.1 不可中断序列的行为

  不可中断序列功能的目的是在仅使用非阻塞传输的情况下提供基于基本异步机制的简单软件模块。当SpiInterruptibleSeqAllowed参数关闭(即配置值“OFF”)时, SPI Handler/Driver的级别1和2内不允许可中断序列。当 SPI Handler/Driver配置为不允许可中断序列时,所有声明的序列均被视为不可中断序列1。
  当 SPI Handler/Driver配置为不允许可中断序列时,可以省略其专用参数SpiInterruptibleSequence或应使用FALSE值作为默认值。
  根据要求,不允许 SPI Handler/Driver暂停已开始的序列传输以支持另一个序列。

7.2.4.2 混合序列的行为

  混合序列功能的目的是提供具有特定异步机制的软件模块,例如,如果使用可以或应该被具有更高优先级的其他序列挂起的非常长的序列。当SpiInterruptibleSeqAllowed参数打开(即配置为值“ON”)时, SPI Handler/Driver的级别1和2内允许可中断序列。当 SPI Handler/Driver配置为允许中断时序列,所有声明的序列都应有其专用参数Spi‑InterruptibleSequence来标识是否序列在传输过程中可以暂停。
  如果序列配置为可中断序列并根据要求,则允许 SPI Handler/Driver暂停已启动的序列传输,以支持另一个具有更高优先级作业的序列。这意味着,在作业传输(属于可中断序列)结束时,另一个序列传输请求待处理, SPI Handler/Driver应执行重新调度,以选择下一个要传输的作业。如果序列配置为不可中断序列并根据要求,则不允许 SPI Handler/Driver暂停此已启动的序列传输以支持其他序列。使用可中断序列时,调用者必须注意,如果多个序列访问相同的通道,这些通道的数据可能会被访问每个通道的最高优先级作业覆盖。

7.2.5 级别 2,增强行为

  此功能级别的目的是为Handler/Driver提供一整套服务来处理同步和异步传输。对于具有许多与具有不同优先级的SPI网络相关的功能的ECU来说,情况可能如此,而且对于使用具有不同速度的外部设备的ECU来说也是如此。通常,根据软件设计,可以通过轮询或中断机制来检测异步结束传输。此级别的功能提出了在执行期间可选择的两种机制。LEVEL 0的要求适用于同步行为。LEVEL 1的要求适用于异步行为。
  LEVEL 2 SPI Handler/Driver应提供异步nous传输服务和SPI总线的同步传输服务。在LEVEL 2中,如果没有正在进行的序列传输,则 SPI Handler/Driver应处于空闲状态(SPI_IDLE)。

7.3 调度建议

  对于异步级别(LEVEL 1和LEVEL 2), SPI Handler/Driver可以在作业和/或序列传输结束时调用结束通知函数。在可中断序列的情况下(可以挂起),如果另一个序列传输请求处于待处理状态,则 SPI Handler/Driver也会进行重新调度,以便选择下一个要传输的作业(请参阅)。对于异步级别,LEVEL 1和LEVEL 2,SPI Handler/Driver可以在Job结束时调用结束通知函数。对于异步级别,LEVEL 1和LEVEL 2, SPI Handler/Driver可以在序列传输结束时调用结束通知函数。
  对于异步级别,在不可中断序列的情况下为级别1和级别2,如果另一个序列传输请求待处理,则 SPI Handler/Driver也会重新调度,以便选择下一个作业来执行发送。如果呼叫结束通知函数和重新调度完全由软件完成,则它们之间的顺序应是先调度,然后执行结束通知函数的调用。

7.4 错误分类

"General Specification of Basic Software Modules文档的7.2“"Error Handling”章节详细描述了基本软件的错误处理。最重要的是,它构成了一个由BSW模块中可能出现的五种错误类型组成的分类方案。基于此基础,以下部分详细说明了下面各个小节中排列的特定错误。

7.4.1 开发错误

在这里插入图片描述

7.4.2 运行时错误

在这里插入图片描述

7.4.3 瞬时故障

  不存在瞬态故障。

7.4.4 生产错误

  不存在生产错误。

7.4.5 扩展生产错误

在这里插入图片描述
  当SPI发送状态寄存器内的任何错误位被置位时,SPI发送状态寄存器信息应报告给DEM(SPI_E_HARDWARE_ERROR、DEM_EVENT_STATUS_FAILED)。
  当SPI发送状态寄存器内没有错误位被置位时,SPI发送状态寄存器信息应报告给DEM(SPI_E_HARDWARE_ERROR、DEM_EVENT_STATUS_PASSED)

8 API规范

8.1 导入类型

本章列出了以下模块中包含的所有类型:
在这里插入图片描述

8.2 类型定义

8.2.1 Spi_ConfigType

在这里插入图片描述

8.2.2 Spi_StatusType

在这里插入图片描述

  类型Spi_StatusType定义了 SPI Handler/Driver的一系列特定状态。它通知 SPI Handler/Driver状态或指定的SPI硬件微控制器外设。
  Spi_StatusType类型可以调用API服务Spi_GetStatus。复位后,类型Spi_StatusType应具有默认值SPI_UNINIT。
  API服务Spi_GetStatus应在以下情况下返回SPI_UNINIT: SPI Handler/Driver未初始化或不可用。API服务Spi_GetStatus应在SPI发生时返回SPI_IDLE处理程序/驱动程序当前未传输任何作业。
  API服务在SPI Handler/Driver正在执行SPI作业传输时Spi_GetStatus应返回SPI_BUSY 。当前未传输任何作业时Spi_GetHWUnitStatus函数应返回SPI_IDLESPI。当SPI正在执行SPI作业传输时,Spi_GetHWUnitStatus函数应返回SPI_BUSY。

8.2.3 Spi_JobResultType

在这里插入图片描述

  类型Spi_JobResultType定义了一系列特定的Job SPI Handler/Driver的状态。
  Spi_JobResultType类型,它通知 SPI Handler/Driver作业状态,并且可以使用作业ID调用API服务Spi_GetJobResult来获取。复位后,类型Spi_JobResultType应具有默认值SPI_JOB_OK。函数Spi_GetJobResult应返回SPI_JOB_OK最后一次作业传输已成功完成。

8.2.4 Spi_SeqResultType

姓名种类Spi_SeqResultType枚举SPI_SEQ_OK

0x00

  序列的最后一次传输已成功完成。SPI_SEQ_待办的范围SPI_SEQ_失败的SPI_SEQ_取消 SPI Handler/Driver正在执行SPI序列。
  该状态的含义等同于SPI_BUSY。0x02序列的最后一次传输失败。序列的最后一次传输已被用户取消。描述该类型定义 SPI Handler/Driver的一系列特定序列状态。
  可通过Spi.h类型Spi_SeqResultType为SPI Handler/Driver定义了一系列特定的序列状态,可以调用API服务Spi_GetSequenceResult来获取,应提供给外部使用。类型Spi_SeqResultType定义了具体Se‑的范围查询 SPI Handler/Driver的状态。
  类型Spi_SeqResultType定义有关 SPI Handler/Driver序列状态的信息,可以使用序列ID调用API服务Spi_GetSequenceResult来获取。复位后,类型Spi_SeqResultType应具有默认值SPI_SEQ_OK。Spi_GetSequenceResult函数应返回SPI_SEQ_OK当序列的最后一次传输成功完成时。
  当 SPI Handler/Driver执行SPI序列时,Spi_GetSequenceResult函数应返回SPI_SEQ_PENDING。该状态的含义等同于SPI_BUSY.Spi_GetSequenceResult函数应返回SPI_SEQ_FAILED当序列的最后一次传输失败时。

8.2.5 Spi_DataBuffer类型

  姓名种类源自描述可通过Spi_DataBufferType类型uint8应用程序数据缓冲区元素的类型。
  Spi.hSpi_DataBufferType定义应用数据缓冲区的类型元素。类型为uint8。对数据的访问是动态选择的,如中所述SWS_SPI_00437。数据缓冲区必须对齐到32位。应规定:外用。
类型Spi_DataBufferType指的是应用程序数据缓冲区元素。

8.2.6 Spi_NumberOfDataType

姓名种类源自uint16Spi_NumberOfDataType类型描述用于定义通过Channel发送和/或接收的数据元素数量的类型可通过Spi.h获取类型Spi_NumberOfDataType用于定义要发送的中指定类型的数据元素的数量和/或通过Channel.接收

8.2.7 Spi_ChannelType [SWS_Spi_00378]

  姓名种类源自描述可通过Spi_ChannelType类型uint8指定通道的标识(ID)。
  Spi.h类型Spi_ChannelType指定一个通道的标识(ID)渠道。类型Spi_ChannelType用于指定Channel的标识(ID)。

8.2.8 Spi_JobType

  姓名种类源自描述可通过Spi_JobType类型uint16指定作业的标识(ID)。
  Spi.h类型Spi_JobType指定作业的标识(ID)工作。类型Spi_JobType用于指定标识作业的(ID)。

8.2.9 Spi_SequenceType

  姓名种类源自描述可通过Spi_SequenceType类型uint8指定作业序列的标识(ID)。
  Spi.h类型Spi_SequenceType指定标识(ID)一系列作业。类型Spi_SequenceType用于指定标识作业序列的fication(ID)。

8.2.10 Spi_HWUnitType

  姓名种类Spi_HWUnitType类型源自uint8说明指定SPI硬件微控制器外设(单元)的标识(ID)。
  可通过Spi.h获取类型Spi_HWUnitType指定一个SPI硬件微控制器外设(单元)。类型Spi_HWUnitType用于指定标识SPI硬件微控制器外设(单元)的灰(ID)。

8.2.11 Spi_AsyncMode类型

  姓名种类Spi_AsyncModeType枚举SPI_轮询_模式范围SPI_打断_模式通过轮询确保异步机制,因此与异步处理的SPI总线相关的中断被禁用。

0x00

异步机制是通过中断来保证的,因此与异步处理的SPI总线相关的中断被使能。

0x01

  描述可通过指定异步处理SPI总线的异步机制模式。Spi.h通过API Spi_SetAsyncMode选择异步机制。
  类型Spi_AsyncModeType用于指定异步异步处理SPI总线的同步机制模式。类型Spi_AsyncModeType是否可用取决于预编译时参数:SpiLevelDelivered。这仅与LEVEL 1和LEVEL 2相关。如果通过参数值SPI_POLLING_MODE调用API Spi_SetAsyncMode函数,则通过轮询确保异步机制。
因此与异步处理的SPI总线相关的中断被禁用。如果通过参数值SPI_INTERRUPT_MODE调用API Spi_SetAsyncMode函数,异步机制是通过中断来保证的,因此与异步处理的SPI总线相关的中断被使能。

8.3 函数定义

8.3.1 Spi_Init

服务名称句法服务ID[十六进制]同步/异步可重入性参数(中)参数(输入输出)参数(输出)返回值描述可通过SPI_初始化无效Spi_Init(const Spi_ConfigType*ConfigPtr)

0x00

  同步不可重入配置指针没有任何没有任何没有任何SPI初始化服务。
  Spi.hSpi_Init操作是不可重入的。函数Spi_Init提供SPI初始化服务化。
  函数Spi_Init应使用参数Config‑引用的结构体的值初始化所有SPI相关寄存器。指针(SRS_BSW_00405、SRS_BSW_00101、SRS_SPAL_12057、SRS_SPAL_12125)使用函数Spi_Init初始化模块后, SPI Handler/Driver应将其状态设置为SPI_IDLE,将序列结果设置为SPI_SEQ_OK,将作业结果设置为SPI_JOB_OK。
  对于LEVEL 2(参见第7.2.5章),该函数Spi_Init应将SPI Handler/Driver异步机制模式设置为默认为SPI_POLLING_MODE。与SPI总线相关的中断应被禁用。通过执行Spi_Init函数重新初始化 SPI Handler/Driver需要在执行Spi_DeInit之前进行取消初始化。
应按照章节中的说明检查函数Spi_Init的参数API参数检查

8.3.2 Spi_DeInit

服务名称句法服务ID[十六进制]同步/异步可重入性参数(中)参数(输入输出)参数(输出)无返回值描述可通过Spi_DeInitStd_ReturnTypeSpi_DeInit(空白)

0x01

  同步不可重入没有任何没有任何操作Std_ReturnTypeSpi_DeInit是非Re‑参赛者.当API Spi_DeInit已接受返回值该函数应为E_OK.当API Spi_DeInit尚未被接受时,返回值该函数的ue应为E_NOT_OK。
  函数Spi_DeInit提供SPI解调服务初始化。函数Spi_DeInit将取消初始化SPI Han‑dler/驱动程序。
  如果 SPI Handler/Driver状态不是SPI_BUSY,则去初始化函数应将所有已初始化的微控制器SPI外设置于相同状态,例如上电复位。如果SPI Handler/Driver的状态为SPI_BUSY,则函数调用Spi_DeInit将被拒绝。使用函数Spi_DeInit进行模块去初始化后, SPI Handler/Driver应将其状态设置为SPI_UNINIT。(SRS_BSW_00336,SRS_SPAL_12163) SPI Handler/Driver应在函数Spi_DeInit之前初始化被调用,否则请参见。

8.3.3 Spi_WriteIB

服务名称Spi_WriteIB句法服务编号Std_ReturnTypeSpi_WriteIB(Spi_ChannelType通道,const Spi_DataBufferType*DataBufferPtr)

0x02

  [十六进制]同步/异步同步可重入性参数(中)参数(输入输出)参数(输出)返回值描述可通过Spi.h获取没有任何没有任何标准_‑返回‑类型用于将一个或多个数据写入参数指定的IB SPI Handler/Driver通道的服务。
  Spi_WriteIB操作是可重入的。当API Spi_WriteIB命令已被接受时函数返回值E_OK.当API Spi_WriteIB命令尚未被接受时该函数返回值E_NOT_OK.函数Spi_WriteIB提供通过相应参数将一个或多个数据写入IB SPI Handler/Driver通道的服务。
  函数Spi_WriteIB应将一个或多个数据写入由相应参数指定的IB SPI Handler/Driver通道。函数Spi_WriteIB将接管给定的参数,并将指向的数据保存到由函数Spi_Init.定义的内部缓冲区中如果给定参数“DataBufferPtr”为空,则函数Spi_WriteIB应假定要传输的数据不相关,并应使用给定通道的默认传输值。函数Spi_WriteIB应可通过参数SpiChannelBuffersAllowed进行预编译时配置。此函数仅与具有IB的通道相关。
应按照API参数检查部分中的说明检查函数Spi_WriteIB的参数。 SPI Handler/Driver应在函数Spi_WriteIB之前初始化被调用,否则请参见。

8.3.4 Spi_AsyncTransmit

服务名称句法服务ID[十六进制]同步/异步可重入性参数(中)参数(输入输出)参数(输出)无返回值描述可通过Spi_AsyncTransmitStd_ReturnTypeSpi_AsyncTransmit(Spi_SequenceType序列)

0x03

  异步可重入顺序没有任何E_OK:传输命令已被接受E_NOT_OK:传输命令未被接受在SPI总线上传输数据的服务。
  Spi.h操作Std_ReturnTypeSpi_AsyncTransmit(Spi_SequenceType序列)是可重入的。当API Spi_AsyncTransmit命令已被接受时‑ed函数应返回值E_OK.当API Spi_AsyncTransmit命令尚未执行时接受该函数应返回值E_NOT_OK.函数Spi_AsyncTransmit提供传输服务SPI总线上的数据。
  函数Spi_AsyncTransmit应接管给定的参数,启动传输,将 SPI Handler/Driver状态设置为SPI_BUSY,将序列结果设置为SPI_SEQ_PENDING并返回。(SRS_Spi_12099、SRS_Spi_12101、SRS_Spi_12103)调用函数Spi_AsyncTransmit时,应接管给定的参数并将Job状态设置为SPI_JOB_QUEUED,可以通过调用API服务Spi_GetJobResult.获取当调用函数Spi_AsyncTransmit时, SPI Handler/Driver应处理作业结果。当开始传输作业时,结果应为SPI_JOB_PENDING。
  当调用函数Spi_AsyncTransmit时, SPI Handler/Driver应处理作业结果。当作业传输成功时,结果应为SPI_JOB_OK。当调用函数Spi_AsyncTransmit时, SPI Handler/Driver应处理作业结果。当作业传输失败时,结果应为SPI_JOB_FAILED。当调用函数Spi_AsyncTransmit并且请求的序列已处于状态SPI_SEQ_PENDING时, SPI Handler/Driver不应考虑此新请求,并且此函数应返回值E_NOT_OK,在这种情况下。()当调用Spi_AsyncTransmit函数并且请求的序列已处于SPI_SEQ_PENDING状态时, SPI Handler/Driver应根据和报告SPI E SEQ_PENDING错误。
  当调用函数Spi_AsyncTransmit并且请求的序列与处于SPI_SEQ_PENDING状态的另一个序列共享作业时, SPI Handler/Driver不应考虑此新请求,并且此函数应返回值E_NOT_OK。在这种情况下,根据和, SPI Handler/Driver应报告SPI E SEQ_PENDING错误。当函数Spi_AsyncTransmit与EB一起使用并且使用Spi_SetupEB方法将源数据指针设置为NULL时,应传输为每个通道配置的默认传输数据。(另请参阅)当函数Spi_AsyncTransmit与EB一起使用并且使用Spi_SetupEB将目标数据指针提供为NULL时方法中, SPI Handler/Driver应忽略接收数据(另请参阅)当函数Spi_AsyncTransmit用于具有链接作业的序列时,该函数应从序列中的第一个作业传输到最后一个作业。
  在由Spi_AsyncTransmit函数启动的序列传输结束时,如果已配置,则 SPI Handler/Driver应在最后一个作业结束通知后调用序列通知回调函数(如果也配置了该函数)。函数Spi_AsyncTransmit可以通过配置参数SpiLevelDelivered在预编译时进行选择。此功能仅与LEVEL 1和LEVEL 2相关。 SPI Handler/Driver的环境应在EB通道的Spi_SetupEB函数调用之后或IB通道的Spi_WriteIB函数调用之后但在函数调用Spi_ReadIB之前调用Spi_AsyncTransmit函数。
应按照API参数检查部分中的说明检查函数Spi_AsyncTransmit的参数 SPI Handler/Driver应在调用函数Spi_AsyncTransmit之前初始化,否则请参阅。

8.3.5 Spi_ReadIB

  服务名称Spi_ReadIB句法Std_ReturnTypeSpi_ReadIB(Spi_ChannelType通道,Spi_DataBufferType*DataBufferPointer)服务ID[十六进制]0x04同步/异步可重入性参数(输入)通道参数(输入输出)参数(输出)返回值描述可通过用于从IB SPI处理程序同步读取一个或多个数据的服务/由参数指定的驱动程序通道。
  Spi.hSpi_ReadIB操作是可重入的。函数Spi_ReadIB返回值E_OK:读命令已被接受。
  函数Spi_ReadIB返回值E_NOT_OK:读取com‑请求尚未被接受。函数Spi_ReadIB提供从参数指定的IB SPI Handler/Driver通道同步读取一个或多个数据的服务。函数Spi_ReadIB应从相应参数指定的IB SPI Handler/Driver通道同步读取一个或多个数据。
   SPI Handler/Driver的环境应在调用Transmit方法后调用函数Spi_ReadIB,以在IB通道内获取相关数据。函数Spi_ReadIB是通过参数SpiChannelBuffersAllowed进行预编译时配置的。此函数仅与具有IB的通道相关。应按照API参数检查部分中的说明检查函数Spi_ReadIB的参数。
SPI Handler/Driver应在函数Spi_ReadIB之前初始化被调用,否则请参见。

8.3.6 Spi_SetupEB

服务名称Spi_SetupEB句法服务ID[十六进制]同步/异步同步可重入性可重入性参数(中)Std_ReturnTypeSpi_SetupEB(Spi_ChannelType通道,const Spi_DataBufferTypeSrcDataBufferPtr,Spi_DataBufferTypeDesDataBufferPtr,Spi_NumberOfDataType长度)

0x05

  长度要从SrcDataBufferPtr发送和/或从DesDataBufferPtr接收的数据的长度(数据元素数量)最小值:1最大值:在该通道的配置中指定的最大数据参数(输入输出)数据采集器缓冲区指针指向RAM中目标数据缓冲区的指针。
  参数(输出)没有任何返回值描述可通过Spi.h获取为指定的EB SPI Handler/Driver通道设置缓冲区和数据长度的服务。
  Spi_SetupEB操作是可重入的。函数Spi_SetupEB的返回值为E_OK:Setup命令已被接受,E_NOT_OK:Setup命令尚未被接受。函数Spi_SetupEB提供设置服务指定EB SPI Handler/Driver通道的缓冲区和数据长度。
  函数Spi_SetupEB应为特定EB SPI Handler/Driver通道设置缓冲区和数据长度。函数Spi_SetupEB应使用提供的值更新指定通道的缓冲区指针和长度属性。由于这些属性是持久的,因此它们将用于对Transmit方法(针对指定的Channel)的所有后续调用。
  当 SPI Handler/Driver的环境正在调用函数Spi_SetupEB且参数SrcDataBufferPtr为空指针时,该函数应在请求Transmit方法后传输为通道配置的默认传输值。(另请参阅)当使用参数调用函数Spi_SetupEB时DesDataBufferPtr是一个空指针, SPI Handler/Driver应在请求传输方法后忽略接收到的数据。(另请参阅) SPI Handler/Driver的环境应在 SPI Handler/Driver的环境调用Transmit方法之前为声明了EB的每个通道调用一次Spi_SetupEB函数。
  函数Spi_SetupEB是通过参数SpiChannelBuffersAllowed进行预编译时配置的。此函数仅与具有EB.的通道相关应按照API参数检查部分中的说明检查函数Spi_SetupEB的参数。 SPI Handler/Driver应在函数Spi_SetupEB之前初始化被调用,否则请参见。
  Spi_GetStatus操作是可重入的。函数Spi_GetStatus返回 SPI Handler/Driver软件模块状态。函数Spi_GetStatus应返回SPI Han‑dler/驱动程序软件模块状态。

8.3.8 Spi_GetJobResult

服务名称Spi_GetJobResultSpi_JobResultTypeSpi_GetJobResult(Spi_JobType作业)服务ID[十六进制]同步/异步可重入性参数(中)参数(输入输出)无参数(输出)无返回值描述可通过

0x07

  同步可重入工作Spi_JobResultTypeSpi_JobResultType该服务返回指定Job的最后传输结果。
  Spi.h操作Spi_GetJobResult是可重入的。函数Spi_GetJobResult服务返回指定Job的最后一次传输结果。函数Spi_GetJobResult应返回最后一次传输的数据指定作业的结果。
  SPI Handler/Driver环境应调用函数Spi_GetJobResult来查询Job传输是否成功(SPI__JOB_OK)或失败(SPI__JOB_FAILED)。注意: SPI Handler/Driver接受的每个新传输作业都会使用SPI_JOB_QUEUED或SPI_JOB_PENDING覆盖先前的作业结果。应按照API参数检查部分中的说明检查函数Spi_GetJobResult的参数。
如果在调用函数Spi_GetJobResult之前尚未初始化SPI Handler/Driver,则返回值未定义。

8.3.9 Spi_GetSequenceResult

  服务名称句法Spi_GetSequenceResultSpi_SeqResultTypeSpi_GetSequenceResult(Spi_SequenceType序列)服务ID[十六进制]0x08同步/异步可重入性参数(输入)顺序参数(输入输出)参数(输出)无返回值描述可通过同步可重入序列ID。无效的序列ID将返回未定义的结果。
  没有任何Spi_SeqResult‑类型该服务返回指定Sequence的最后一次传输结果。
  Spi.h操作Spi_GetSequenceResult是可重入的。函数Spi_GetSequenceResult应返回指定Sequence的最后一次传输结果。SPI Handler/Driver环境应调用函数Spi_GetSequenceResult来查询完整的Sequence传输是否成功(SPI_SEQ_OK)还是失败(SPI_SEQ_FAILED)。(SRS_SPAL_00157,SRS_Spi__12170)笔记:‑SPI Han已接受的每个新传输序列‑dler/Driver使用SPI_SEQ_PENDING覆盖先前的序列结果。
‑如果在调用函数Spi_GetSequenceResult之前尚未初始化 SPI Handler/Driver,则返回值未定义。应按照API参数检查部分中的说明检查函数Spi_GetSequenceResult的参数。

8.3.10 Spi_GetVersionInfo

服务名称句法服务ID[十六进制]同步/异步可重入性参数(中)参数(输入输出)无参数(输出)返回值描述可通过Spi_GetVersionInfo无效Spi_GetVersionInfo(Std_VersionInfoType*版本信息)

0x09

  同步可重入没有任何versioninfo指向存储该模块版本信息的位置的指针。
  没有任何该服务返回该模块的版本信息。Spi.h如果启用Det,则应检查参数versioninfo是否为NULL。如果值为NULL指针,将报告错误SPI E PARAM_POINTER。

8.3.11 Spi_SyncTransmit

  服务名称句法服务ID[十六进制]同步/异步可重入性参数(中)参数(输入输出)参数(输出)返回值描述Spi_SyncTransmitStd_ReturnTypeSpi_SyncTransmit(Spi_SequenceType序列)可通过Spi.hSpi_SyncTransmit操作是可重入的。
  如果传输请求成功,则函数Spi_SyncTransmit返回E_OK。如果传输请求失败,函数Spi_SyncTransmit返回E_NOT_OK。函数Spi_SyncTransmit提供传输服务SPI总线上的数据。
  当调用Spi_SyncTransmit函数时,应接管给定的参数并将SPI Handler/Driver状态设置为SPI_BUSY可以通过调用API服务SPI_GetStatus获得。(SRS_Spi_12152,SRS_Spi_12153,SRS_Spi_12154)调用函数Spi_SyncTransmit时,应接管给定的参数并将Sequence状态设置为SPI_SEQ_PENDING可以通过调用API服务Spi_GetSequenceResult获得。
  调用函数Spi_SyncTransmit时,应接管给定的参数并将Job状态设置为SPI_JOB_PENDING可以通过调用API服务Spi_GetJobResult获得。当序列正在传输且SPI_SUPPORT_CONCURRENT_SYNC_TRANSMIT被禁用时调用函数Spi_SyncTransmit或同一总线上正在传输另一个序列时, SPI Handler/Driver不应考虑此新的传输请求,并且函数应返回值E_NOT_OK(参见)。在这种情况下, SPI Handler/Driver应根据和报告SPI E SEQ_IN_PROCESS错误。
函数Spi_SyncTransmit可以通过配置参数SpiLevelDelivered在预编译时进行选择。此功能仅与LEVEL 0和LEVEL 2相关。应按照API参数检查部分中的说明检查函数Spi_SyncTransmit的参数

8.3.12 Spi_GetHWUnitStatus

  服务名称Spi_GetHWUnitStatusSpi_StatusTypeSpi_GetHWUnitStatus(句法Spi_HWUnitType HWUnit)服务ID[十六进制]0x0b同步/异步可重入性参数(中)参数(输入输出)参数(输出)无返回值描述可通过同步可重入硬件单元没有任何Spi_StatusType该服务返回指定SPI硬件微控制器外设的状态。
  Spi.h操作Spi_GetHWUnitStatus是可重入的。函数Spi_GetHWUnitStatus服务返回指定SPI硬件微控制器外设的状态。函数Spi_GetHWUnitStatus应返回指定的SPI硬件微控制器外设。
   SPI Handler/Driver环境应调用此函数来查询指定的SPI硬件微控制器外设是SPI_IDLE还是SPI_BUSY。函数Spi_GetHWUnitStatus是预编译时con‑可通过配置参数SpiHwStatusApi.设置开/关应按照API参数检查部分中的说明检查函数Spi_GetHWUnitStatus的参数。
如果在调用函数Spi_GetHWUnitStatus之前尚未初始化 SPI Handler/Driver,则返回值未定义。

8.3.13 SPI_取消

  服务名称SPI_取消无效Spi_Cancel(句法)Spi_SequenceType序列Spi_Cancel操作是可重入的。
  函数Spi_Cancel服务取消指定的正在进行的顺序传输。函数Spi_Cancel应取消指定的正在进行的序列传输,而不取消任何作业传输,并将序列结果设置为SPI_SEQ_CANCELLED。换句话说,Spi_Cancel函数在(可能的)传输作业结束之后和(潜在的)下一个作业传输开始之前停止序列传输。
当通过函数Spi_Cancel取消序列时如果配置, SPI Handler/Driver应调用序列通知回调函数,而不是启动属于它的潜在下一个作业。函数Spi_Cancel是预编译时可通过配置参数SpiCancelApi配置开/关。 SPI Handler/Driver对由于取消序列传输而导致的外部设备损坏或未定义状态不承担责任。由 SPI Handler/Driver的环境来了解它正在做什么!

8.3.14 Spi_SetAsyncMode

  服务名称句法Spi_SetAsyncModeStd_ReturnTypeSpi_SetAsyncMode(Spi_AsyncModeType模式)服务ID[十六进制]0x0d同步/异步可重入性参数(输入)模式参数(输入输出)参数(输出)无返回值描述可通过ting命令已完成。
  同步不可重入需要新模式。没有任何E_OK:设置命令已完成E_NOT_OK:设置命令未被接受为异步处理的SPI总线设置异步机制模式的服务。
  Spi.h操作Spi_SetAsyncMode是不可重入的。函数Spi_SetAsyncMode返回值为E_OK:Set‑函数Spi_SetAsyncMode返回值为E_NOT_OK:设置命令尚未被接受。
  函数Spi_SetAsyncMode服务设置异步异步处理SPI总线的nous机制模式。如果在 SPI Handler/Driver状态为SPI_BUSY且异步传输正在进行时调用Spi_SetAsyncMode函数,则 SPI Handler/Driver不应更改AsyncModeType并保持模式类型不变。该函数应返回值E_NOT_OK.如果在同步传输正在进行时调用Spi_SetAsyncMode,则 SPI Handler/Driver应根据参数“Mode”设置AsyncModeType,即使 SPI Handler/Driver状态为SPI_BUSY。该函数应返回值E_OK.函数Spi_SetAsyncMode可以通过配置参数SpiLevelDelivered在预编译时进行选择。此功能仅与LEVEL 1和2相关。

8.4 回调通知

本章列出了SPI模块向下层模块提供的所有功能。 SPI Handler/Driver模块属于AUTOSAR软件架构的最低层,因此该模块规范未标识任何回调函数。

8.5 预定功能

本章列出了 SPI Handler/Driver提供并由基本软件模块调度程序直接调用的所有函数。 SPI Handler/Driver模块需要一个调度函数来管理通过轮询管理的异步模式。下面指定的函数举例说明了如何在需要时实现它们。

8.5.1 Spi_MainFunction_Handling

服务名称Spi_MainFunction_Handling句法服务ID[十六进制]描述可通过无效Spi_MainFunction_Handling(空白)

0x10

‑‑SchM_Spi.h该函数应轮询链接到分配给SPI序列传输的HW单元的SPI中断,以启用传输状态机的演变。

8.6 预期接口

本章列出了 SPI Handler/Driver需要其他模块提供的所有功能。

8.6.1 强制接口

   SPI Handler/Driver模块需要一些接口来实现其核心功能。接口函数它_报告‑运行时错误[]标头文件的H描述报告运行时错误的服务。如果已配置标注,则应调用该标注。

8.6.2 可选接口

  本章定义了实现 SPI Handler/Driver模块的可选功能所需的所有接口。应用程序编程接口功能他们_设置‑事件状态这_‑报告错误标头文件他们.h的H描述由SW‑C或BSW模块调用,向Dem报告监视器状态信息。调用Dem_SetEventStatus的BSW模块可以安全地忽略返回值。仅当({Dem/DemConfigSet/DemEventParameter/DemEventReportingType}==STANDARD_REPORTING)报告开发错误的服务。

8.6.3 可配置接口

  本章列出了可以配置目标功能的所有接口。目标函数通常是回调函数。这些接口的名称不固定,因为它们是可配置的。 SPI Handler/Driver应使用回调例程Spi_JobEndNotification通知其他软件模块有关某些状态或状态更改的信息。 SPI Handler/Driver应使用回调例程Spi_SeqEndNotification通知其他软件模块有关某些状态或状态更改的信息。
  为了实现回调功能,需要其他模块以预期的方式提供例程。 SPI Handler/Driver的实现者必须将回调通知和Spi_JobEndNotification Spi_SeqEndNotification实现为初始化数据结构((SSpRiSCiLgT2p0e6中)定义的函数指针。回调通知Spi_JobEndNotification和Spi_SeqEndNotification应无参数且无返回值。如果回调通知配置为空指针,则不回调应被执行。
  允许在SPI回调通知中使用以下API调用:‧Spi_ReadIB- Spi_WriteIB- Spi_SetupEB- Spi_GetJobResult- Spi_GetSequenceResult- Spi_GetHWUnitStatus- Spi_Cancel不允许所有其他 SPI Handler/DriverAPI调用。

8.6.3.1 Spi_JobEndNotification

  服务名称句法同步/异步可重入性参数(输入)无参数(输入输出)参数(输出)无返回值描述可通过(*Spi_JobEndNotification)无效(*Spi_JobEndNotification)(空白)同步可重入没有任何没有任何用户为每个作业提供的回调例程,以通知调用者作业已完成。
  Spi_Externals.h操作SpiJobEndNotification是可重入的。如果配置了SpiJobEndNotification(即不是空指针),则 SPI Handler/Driver应在作业传输结束时调用配置的回调通知。注意:该例程可能在中断级别调用,具体取决于调用函数。

8.6.3.2 Spi_SeqEndNotification

  服务名称(*Spi_SeqEndNotification)句法同步/异步无效(*Spi_SeqEndNotification)(空白)同步操作SpiSeqEndNotification是可重入的。
如果配置了SpiSeqEndNotification(即不是空指针),则 SPI Handler/Driver应在序列传输结束时调用配置的回调通知。注意:该例程可能在中断级别调用,具体取决于调用函数。

8.7 错误检测

8.7.1 API参数检查

   SPI Handler/Driver应能够检测到错误当使用错误参数调用API服务时,SPI E PARAM_CHANNEL。 SPI Handler/Driver应能够检测到错误当使用错误参数调用API服务时,SPI E PARAM_JOB。
   SPI Handler/Driver应能够检测到错误当使用错误参数调用API服务时,SPI E PARAM_SEQ。 SPI Handler/Driver应能够检测到错误当使用错误参数调用API服务时,SPI E PARAM_LENGTH。
   SPI Handler/Driver应能够检测到错误当使用错误参数调用API服务时,SPI E PARAM_UNIT。API参数Channel应在初始化数据结构中定义的通道内具有一个值,并且必须与服务一起使用正确的通道类型(IB或EB)。相关错误值:SPI E PARAM_CHANNEL。否则,服务未完成,返回值为E_NOT_OK。
  API参数Sequence和Job的值应在指定的值范围内。相关错误值:SPI E PARAM_SEQ或SPI E PARAM_JOB。API参数数据长度应具有指定缓冲区值内的值。值:SPI E PARAM_LENGTH。最大限度如果没有做API参数Length相关服务且返回值应为E_NOT_OK。
API参数HWUnit应具有指定范围内的值字段值范围。相关错误值:SPI E PARAM_UNIT.如果没有完成HWUnit相关服务,则返回值为SPI_UNINIT.如果不适用, SPI Handler/Driver模块的环境应将NULL指针传递给函数Spi_Init.

8.7.2 SPI 状态检查

   SPI Handler/Driver应能够检测到错误SPI E UNINIT当API服务在没有模块初始化的情况下使用时。如果启用了SPI模块的开发错误检测,并且 SPI Handler/Driver的环境在初始化之前调用任何API函数,应根据配置向DET报告错误,错误值为SPI E UNINIT。
SPI Handler/Driver应能够检测到错误SPI E ALREADY_INITIALIZED当SPI驱动程序已初始化且调用API SPI_Init服务时。如果启用了SPI模块的开发错误检测,则在SPI驱动程序已初始化时调用例程SPI_Init将导致开发错误SPI E ALREADY_INITIALIZED,并且所需的功能应保持不变。

8.7.3 SPI 运行时检查

   SPI Handler/Driver应能够检测到错误当服务以错误的顺序调用时,SPI E SEQ_PENDING。 SPI Handler/Driver应能够在错误时间调用同步传输服务时检测到错误SPI E SEQ_IN_PROCESS。 SPI Handler/Driver应能够在异步或同步传输期间发生硬件错误时检测到错误SPI E HARDWARE_ERROR。另请参阅SWS_Spi_00267和SWS_Spi_00384。
如果序列和作业相关服务未完成,并且根据服务的不同,返回值应为E_NOT_OK或失败结果(SPI__JOB_FAILED或SPI_SEQ_FAILED)。 SPI Handler/Driver不应处理调用的函数,但根据调用的函数,应返回值E_NOT_OK或失败结果(SPI__JOB_FAILED或SPI_SEQ_FAILED)。

9 时序图

9.1 初始化

“模块”斯皮Spi_Init(常量Spi_ConfigType*)Spi_Init

9.2 模式转换

  以下序列图显示了运行模式转换的Init/DeInit调用的示例。SPI用户“模块”斯皮Spi_Init(常量Spi_ConfigType*)Spi_Init描述: SPI Handler/Driver的初始化与参数同步执行,以在某种模式下运行。
  例如,“FullPowerConf”是包含具有PLL启用的“RUN State”的所有配置的结构。 SPI Handler/Driver的使用:嵌入式软件执行、时间和代码执行在此期间未定义时期。
  Spi_GetStatus(Spi_StatusType)Spi_GetStatus=SPI_BUSYSpi_GetStatus(Spi_StatusType)Spi_GetStatus=SPI_IDLESpi_DeInit(Std_ReturnType)描述:在取消初始化之前,请使用 SPI Handler/Driver的获取状态服务来了解其状态。
  Spi_DeInit SPI Handler/Driver的使用:嵌入式软件执行、时间和代码执行在此期间未定义时期。
  Spi_Init(常量Spi_ConfigType*)Spi_Init描述: SPI Handler/Driver的初始化是使用特定参数执行的,以在另一种模式下运行。
例如,“ReducePowerConf”是包含PLL禁用的“SLEEP State”的所有配置的结构。

9.3 写/异步传输/读(IB)

9.3.1 一个通道,一个作业,然后一个序列

  下面的序列图显示了Spi_WriteIB/Spi_AsyncTransmit/Spi_ReadIB调用仅由一个Channel组成的一个Job进行Sequence传输的示例。当作业分别只是读取或写入时,可以跳过写入或读取步骤。示例:通道ID 2属于作业ID 1,作业ID 1属于序列ID 0顺序编号0工作ID1渠道识别号2SPI用户“模块”斯皮Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB描述:写入通道是同步完成的。您传递通道ID和缓冲区。
  Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输是异步执行的。 SPI Handler/Driver记录序列并返回。
  描述:传输处理(写入SPI总线)根据请求的顺序和优先级机制异步完成。这种情况不是链接作业的序列,因此 SPI Handler/Driver在通道传输结束时变为空闲。<Spi_Job1EndNotification><Spi_Job1EndNotification><Spi_Seq0EndNotification>描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
  <Spi_Seq0EndNotification>Spi_ReadIB(Std_ReturnType,Spi_ChannelType,Spi_DataBufferType**)Spi_ReadIB描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。
描述:接收到的数据将被分配在配置的接收缓冲区,并且可以使用IB通道的读取功能进行读取。

9.3.2 多个通道,一项作业,一组序列

  下面的序列图显示了Spi_WriteIB/Spi_AsyncTransmit/Spi_ReadIB调用Sequence传输的示例,其中一个Job由多个Channel组成。当作业分别只是读取或写入时,可以跳过写入或读取步骤。示例:通道ID 2和3属于作业ID 1,作业ID 1属于序列ID 0顺序工作渠道识别号2编号0 ID1ID3用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)描述:写入Channel是同步完成的。您传递通道ID和缓冲区。
  在这种情况下,通道位于同一作业内。Spi_WriteIBSpi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIBSpi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输是异步执行的。 SPI Handler/Driver记录序列并返回。
  描述:传输处理(写入SPI总线)根据请求的顺序和优先级机制异步完成。Seq0.Job1此案例不是链接作业的序列。在通道传输结束时, SPI Handler/Driver变为空闲。
  <Spi_Job1EndNotification><Spi_Job1EndNotification><Spi_Seq0EndNotification>描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
  <Spi_Seq0EndNotification>Spi_ReadIB(Std_ReturnType,Spi_ChannelType,Spi_DataBufferType**)Spi_ReadIB描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。
描述:接收到的数据(如果有)将被分配到配置的接收缓冲区中,并且可以使用IB通道的读取功能来读取。

9.3.3 多个通道、多个作业和一个序列

  以下序列图显示了Spi_WriteIB/Spi_AsyncTransmit/Spi_ReadIB调用链接作业的序列传输的示例。当作业分别只是读取或写入时,可以跳过写入或读取步骤。示例:通道ID 0至3属于作业ID 1(较高优先级),通道ID 4至10属于作业ID 2(较低优先级),该作业没有结束通知功能。这些作业属于同一个序列ID 0顺序编号0工作姓名优先事项ID1高的识别号2低的渠道ID0⋯ID3ID4⋯ID10用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB循环通道:=5…10选择如果需要渠道Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIBSpi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB描述:写入Channel是同步完成的。您传递通道ID和缓冲区。
  在这种情况下,通道不在同一作业内。循环通道:=1…3选择如果需要渠道Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB描述:传输是异步执行的。 SPI Handler/Driver记录序列并返回。
  Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输处理(写入SPI总线)根据请求的顺序和优先级机制异步完成。
  本例是一系列链接的作业。在通道传输结束时, SPI Handler/Driver变为空闲。Seq0.Job1<Spi_Job1EndNotification><Spi_Job1EndNotification>Seq0.Job2描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
  <Spi_Seq0EndNotification><Spi_Seq0EndNotification>描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。
  Spi_ReadIB(Std_ReturnType,Spi_ChannelType,Spi_DataBufferType**)Spi_ReadIB描述:接收到的数据,如果有,将被分配在配置的接收缓冲区,并且可以使用IB通道的读取功能进行读取。

9.3.4 多通道、多作业、多序列

以下序列图显示了用于序列传输的Spi_WriteIB/Spi_AsyncTransmit/Spi_ReadIB调用的示例。当作业分别只是读取或写入时,可以跳过写入或读取步骤。示例:通道ID 0至3属于作业ID 1(高优先级2),通道ID 4至10属于作业ID 2(低优先级1),该作业没有结束通知功能。这些作业属于同一个序列ID 0,该序列ID被配置为可中断。通道ID 11至13属于作业ID 0(较高优先级3),该作业ID属于配置为不可中断的序列ID 1。顺序姓名编号0ID1可中断是的不姓名ID1识别号2编号0工作优先事项

2

1 3

  渠道ID0⋯ID3ID4⋯ID10ID11⋯ID13用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB循环通道:=5…10选择如果需要渠道Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIBSpi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB循环频道:=12…13选择如果需要渠道Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB描述:写入Channel是同步完成的。您传递通道ID和缓冲区。
  在这种情况下,通道不在同一份工作。描述:传输是异步执行的。 SPI Handler/Driver记录序列并返回。
  Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmitSeq0.Job1(第1部分)Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit<Spi_Job1EndNotification><Spi_Job1EndNotification>Seq0.Job1(第2部分)描述:传输处理(写入SPI总线)根据请求的作业和优先级异步完成机制。
  这种情况涉及许多作业的许多序列,因此在作业传输结束时, SPI Handler/Driver会安排下一个要传输的作业。所选作业具有较高优先级,并且仅当正在进行的序列配置为可中断时才可以属于另一个序列。
  描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。Seq1.Job0在所有序列传输结束时, SPI Handler/Driver变为空闲。
  <Spi_Seq1EndNotification><Spi_Seq1EndNotification>Spi_ReadIB(Std_ReturnType,Spi_ChannelType,Spi_DataBufferType**)Spi_ReadIB描述:当Sequence传输结束时,如果配置了,则“End Seq调用序列处理的“通知”。
  Seq0.Job2<Spi_Seq0EndNotification>描述:接收到的数据(如果有)将被分配到配置的接收缓冲区中,并且可以使用IB通道的读取功能来读取。
Spi_ReadIB(Spi_ChannelType,Spi_DataType*):标准返回类型Spi_ReadIB

9.4 设置/异步传输 (EB)

9.4.1 可变数据数/恒定数据数

  要传输可变数量的数据,必须在每次Spi_AsyncTransmit函数调用之前调用Spi_SetupEB函数将新参数存储在 SPI Handler/Driver中。要传输恒定数量的数据,只需在第一次Spi_AsyncTransmit函数调用之前调用Spi_SetupEB函数将参数存储在 SPI Handler/Driver中即可。

9.4.2 一个通道,一个作业,然后一个序列

  下面的序列图显示了Spi_SetupEB/Spi_AsyncTransmit调用仅由一个Channel组成的一个Job进行Sequence传输的示例。写入或读取访问是“用户相关的”,并且当作业分别只是读取或写入时可以跳过。示例:通道ID 2属于作业ID 1,作业ID 1属于序列ID 0顺序编号0工作ID1渠道识别号2SPI用户Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB“模块”斯皮描述:设置频道;同步初始化缓冲区指针和长度。参数已保存。
  Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输是异步执行的。 SPI Handler/Driver记录序列并返回。
  Seq0.Job1<Spi_Job1EndNotification>描述:传输处理(写入SPI总线)根据请求的顺序和优先级机制异步完成。
  这种情况不是链接作业的序列,因此 SPI Handler/Driver在通道传输结束时变为空闲。<Spi_Job1EndNotification><Spi_Seq0EndNotification><Spi_Seq0EndNotification>描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。

9.4.3 多个通道,一个作业,一个序列

  下面的序列图显示了Spi_SetupEB/Spi_AsyncTransmit调用Sequence传输的示例,其中只有一个由多个Channel组成的Job。写入或读取访问是“用户相关的”,并且当作业分别只是读取或写入时可以跳过。示例:通道ID 2和3属于作业ID 1,作业ID 1属于序列ID 0顺序编号0工作ID1渠道识别号2ID3用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEBSpi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB描述:设置频道;同步初始化缓冲区指针和长度。参数已保存。
  在这种情况下,通道位于同一作业内。Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输是异步执行的。这 SPI Handler/Driver记录序列并返回。
  Seq0.Job1<Spi_Job1EndNotification><Spi_Job1EndNotification>描述:传输处理(写入SPI总线)根据请求的顺序和优先级机制异步完成。
  此案例不是链接作业的序列。在通道传输结束时, SPI Handler/Driver变为空闲。<Spi_Seq0EndNotification><Spi_Seq0EndNotification>描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。接收到的数据,如果有的话,会直接存入EB Channel接收缓冲区,可以等使用。

9.4.4 多个通道、多个作业和一个序列

  以下序列图显示了Spi_SetupEB/Spi_AsyncTransmit调用链接作业的序列传输的示例。写入或读取访问是“用户相关的”,并且当作业分别只是读取或写入时可以跳过。示例:通道ID 0至3属于作业ID 1(较高优先级),通道ID 4至10属于作业ID 2(较低优先级),该作业没有结束通知功能。这些作业属于同一个序列ID 0顺序编号0工作ID1识别号2渠道ID0⋯ID3ID4⋯ID10用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB循环通道:=5…10选择如果需要渠道Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB描述:设置频道;同步初始化缓冲区指针和长度。参数已保存。
  在这种情况下,通道不在同一作业内。Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB循环通道:=1…3选择如果需要渠道Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*,Spi_DataBufferType**,Spi_NumberOfDataType)Spi_SetupEB描述:传输是异步执行的。这 SPI Handler/Driver记录序列并返回。
  Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmitSeq0.Job1<Spi_Job1EndNotification>描述:传输处理(写入SPI总线)根据请求的作业和优先级机制异步完成。
  这种情况是链接作业的序列,因此在作业传输结束时, SPI Handler/Driver会安排下一个要传输的作业。在序列传输结束时, SPI Handler/Driver变为空闲。<Spi_Job1EndNotification>描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
  Seq0.Job2<Spi_Seq0EndNotification><Spi_Seq0EndNotification>描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。
  接收到的数据,如果有,会直接存入EB Channel接收缓冲区,可以使用如。描述:接收到的数据将被分配在配置的接收缓冲区,并且可以使用IB通道的读取功能进行读取。

9.4.5 多个通道、多个作业和多个序列

  以下序列图显示了Spi_SetupEB/Spi_AsyncTransmit调用序列传输的示例。写入或读取访问是“用户相关的”,并且当作业分别只是读取或写入时可以跳过。示例:通道ID 0至3属于作业ID 1(高优先级2),通道ID 4至10属于作业ID 2(低优先级1),该作业没有结束通知功能。这些作业属于同一个序列ID 0,该序列ID被配置为可中断。通道ID 11至13属于作业ID 0(较高优先级3),该作业ID属于配置为不可中断的序列ID 1。顺序姓名是的不工作姓名优先事项渠道ID0⋯ID3ID4⋯ID10ID11⋯ID13用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB循环通道:=5…10选择如果需要渠道Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEBSpi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB描述:设置频道;同步初始化缓冲区指针和长度。参数已保存。
  在这种情况下,这些Channel的Job不在同一个Sequence内。循环频道:=12…13选择如果需要渠道Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEBSpi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输是异步执行的。 SPI Handler/Driver记录序列并返回。
  Seq0.Job1(第1部分)Spi_AsyncTransmit(Std_ReturnType,Spi_SequenceType)Spi_AsyncTransmit描述:传输处理(写入SPI总线)根据请求的作业和优先级机制异步完成。
  这种情况涉及许多作业的许多序列,因此在作业传输结束时, SPI Handler/Driver会安排下一个要传输的作业。所选作业具有较高优先级,并且仅当正在进行的序列配置为可中断时才可以属于另一个序列。Seq0.Job1(第2部分)在所有序列传输结束时, SPI Handler/Driver变为空闲。
  <Spi_Job1EndNotification><Spi_Job1EndNotification>Seq1.Job0<Spi_Seq1EndNotification><Spi_Seq1EndNotification>描述:当Job传输结束时,如果配置了,则调用Job进程的“结束作业通知”。
  Seq0.Job2<Spi_Seq0EndNotification><Spi_Seq0EndNotification>描述:当Sequence传输结束时,如果配置了,则调用Sequence进程的“End Seq notification”。
接收到的数据,如果有的话,会直接存入EB Channel接收缓冲区,可以等使用。

9.5 混合作业传输

根据通道配置和序列内的优先级要求,所有类型的混合作业传输都是可能的。用户知道哪些通道正在使用。然后根据这些Channel的类型,调用相应的方法。

9.6 LEVEL 0 同步传输图

9.6.1 写入/同步传输/读取 (IB):多个通道、多个作业和一个 顺序

  以下序列图显示了Spi_WriteIB/Spi_SyncTransmit/Spi_ReadIB调用链接作业的序列传输的示例。当作业分别只是读取或写入时,可以跳过写入或读取步骤。示例:通道ID 0到3属于作业ID 1(较高优先级),通道ID 4到10属于作业ID 2(较低优先级)。这些作业属于同一个序列ID 0顺序姓名ID1编号0识别号2工作优先事项高的低的渠道ID0⋯ID3ID4⋯ID10用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB循环通道:=5…10选择如果需要渠道Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIBSpi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIB写入Channel是同步完成的。
  您传递通道ID和缓冲区。在这种情况下,通道不在同一作业内。循环通道:=1…3选择如果需要渠道Spi_WriteIB(Std_ReturnType,Spi_ChannelType,const Spi_DataBufferType*)Spi_WriteIBSpi_SyncTransmit(Std_ReturnType,Spi_SequenceType)传输同步进行。 SPI Handler/Driver传输完整的序列并返回。
  在序列传输结束时, SPI Handler/Driver变为空闲。Seq0.Job1Seq0.Job2Spi_SyncTransmitSpi_ReadIB(Std_ReturnType,Spi_ChannelType、Spi_DataBufferType**)Spi_ReadIB接收到的数据(如果有)将被分配到配置的接收缓冲区中,并且可以使用IB通道的读取功能来读取。

9.6.2 设置/同步传输 (EB):多个通道、多个作业和一个序列

  以下序列图显示了Spi_SetupEB/Spi_SyncTransmit调用链接作业的序列传输的示例。写入或读取访问是“用户相关的”,并且当作业分别只是读取或写入时可以跳过。示例:通道ID 0到3属于作业ID 1(较高优先级),通道ID 4到10属于作业ID 2(较低优先级)。这些作业属于同一个序列ID 0顺序编号0工作ID1识别号2渠道ID0⋯ID3ID4⋯ID10用户1:Spi用户用户2:Spi用户“模块”斯皮Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB循环通道:=5…10选择如果需要渠道Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEBSpi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEB设置频道;同步初始化缓冲区指针和长度。参数已保存。在这种情况下,通道不在同一作业内。
  循环通道:=1…3选择如果需要渠道Spi_SetupEB(Std_ReturnType,Spi_ChannelType,constSpi_DataBufferType*、Spi_DataBufferType**、Spi_NumberOfDataType)Spi_SetupEBSpi_SyncTransmit(Std_ReturnType,Spi_SequenceType)传输同步进行。 SPI Handler/Driver传输完整的序列并返回。
  在序列传输结束时, SPI Handler/Driver变为空闲。Seq0.Job1Seq0.Job2Spi_SyncTransmit描述:接收到的数据,如果有的话,会直接存入EB Channel接收缓冲区,可以等使用。

10 配置规范

10.1如何阅读本章

详细信息请参考SWS_BSWGeneral中的10.1“配置规范简介”。

10.2容器及配置参数

以下章节总结了所有配置参数。参数的详细含义在第7章和第8章中描述。如有必要,可以添加更多硬件/实现特定参数。SPI模块应拒绝具有不受实现支持的分区映射ping的配置。

10.2.1

  SWS项目模块名称描述构建后变体支持支持的配置变体斯皮[ECUC_Spi_00103]斯皮SPI(串行外设接口)模块的配置。
  真的VARIANT‑LINK‑TIME、VARIANT‑POS‑BUILD、VARIANT‑PRE‑编译包含的容器容器姓名SpiDem‑事件‑范围‑参考文献多重性范围/依赖性引用DemEventParameter元素的容器,如果发生相应的错误,应使用API Dem_SetEventStatus调用该元素。EventId取自引用的DemEventParameter的DemEventId符号值。此容器中提供了标准化错误,并且可以通过特定于供应商的错误引用进行扩展。
SpiDriverSpiGeneralSpiPublished‑信息

1

1

1

该容器包含AUTOSAR Spi模块的配置参数和子容器。SPI‑Handler的常规配置设置保存所有SPI特定已发布信息参数的容器

10.2.2

  SWS项目容器姓名家长容器描述SpiDemEventParameterRefs[ECUC_Spi_00240]SpiDemEventParameterRefs斯皮引用DemEventParameter元素的容器,如果发生相应的错误,应使用API Dem_SetEventStatus调用该元素。EventId取自引用的DemEventParameter的DemEventId符号值。此容器中提供了标准化错误,并且可以通过特定于供应商的错误引用进行扩展。
  配置参数SWS项目参数名称父容器描述多重性类型构建后变体多重性构建后变体价值多重性配置类值配置班级范围/依赖范围:本地[ECUC_Spi_00241]SPI_E_HARDWARE_ERRORSpiDemEventParameterRefs参考已配置的DEM事件来报告“硬件故障”。如果未配置参考,则不会报告错误。
不包含容器

10.2.3

  SWS项目集装箱名称父容器描述配置参数SpiGeneral[ECUC_Spi_00225]SpiGeneral斯皮SPI‑Handler的常规配置设置SWS项目参数名称父容器描述多重性类型范围默认值构建后变体值false值配置班级[ECUC_Spi_00227]允许的SpiChannelBuffersSpiGeneral选择允许和交付的 SPI Handler/Driver通道缓冲区使用情况。
IB=0;EB=1;IB/EB=2;

1

Ecuc整数参数定义

0 … 2

  ‑‑预编译时间链接时间范围/依赖性构建后时间范围:本地‑‑SWS项目参数名称父容器描述[ECUC_Spi_00228]SpiDev错误检测SpiGeneral打开或关闭开发错误检测和通知。
  - true:启用检测和通知。- false:禁用检测和通知。SWS项目[ECUC_Spi_00230]参数名称SpiInterruptibleSeqAllowed父容器描述多重性类型默认值构建后变体价值价值配置班级范围/依赖性SpiGeneral打开或关闭可中断序列处理功能。

1

  Ecuc布尔参数定义‑‑错误的预编译时间X所有变体链接时间‑‑构建后时间‑‑范围:本地依赖性:该参数取决于SPI_LEVEL_DELIVERED值。它仅用于配置为1或2的SPI_LEVEL_DELIVERED。
  SWS项目参数名称父容器描述多重性类型范围默认值构建后变体价值值配置班级范围/依赖范围:本地[ECUC_Spi_00231]SpiLevel已交付SpiGeneral选择可用和交付的可扩展功能的 SPI Handler/Driver级别。

1

Ecuc整数参数定义

0 … 2

  ‑‑错误的SWS项目参数名称[ECUC_Spi_00242]SpiMain函数周期父容器描述多重性类型范围默认值构建后变体多重性构建后变体价值多重性配置类值配置班级范围/依赖性SpiGeneral该参数定义函数Spi_MainFunction_的循环时间几秒钟内处理。该参数不被驱动程序本身使用,而是被上层使用。

0…1

EcucFloatParamDef]0…INF[

0.01

  错误的错误的所有变体所有变体SWS项目参数名称父容器描述多重性类型默认值构建后变体价值[ECUC_Spi_00237]SpiSupport并发同步传输SpiGeneral指定不同序列的并发Spi_SyncTransmit调用是否可配置。

1

  Ecuc布尔参数定义‑‑错误的值配置班级预编译时间链接时间构建后时间X所有变体‑‑‑‑范围/依赖范围:本地SWS项目参数名称父容器描述多重性类型构建后变体多重性构建后变体价值多重性配置类值配置班级范围/依赖性[ECUC_Spi_00244]SpiEcuc分区参考SpiGeneral将SPI驱动程序映射到零个或多个ECUC分区,以使驱动程序API在相应分区中可用。

0…*

  参考Eucc分区真的真的预编译时间链接时间构建后时间预编译时间链接时间构建后时间适用范围:ECUSWS项目[ECUC_Spi_00245]参数名称SpiKernelEcucPartitionRef父容器描述SpiGeneral将SPI内核映射到零个或一个ECUC分区,以将驱动程序内核分配给某个核心。引用的ECUC分区是SPI驱动程序映射到的ECUC分区的子集。
多重性类型构建后变体多重性构建后变体价值

0…1

  参考Eucc分区真的真的范围/依赖性适用范围:ECU不包含容器SPI将军:EcucParamConfContainerDef较低多重性=1上重数=1+参数SpiLevel交付:Ecuc整数参数定义分钟=0最大值=2+参数允许的SpiChannelBuffers:Ecuc整数参数定义分钟=0最大值=2+参数SpiInterruptibleSeq允许:Ecuc布尔参数定义+参数SpiHwStatusApi:Ecuc布尔参数定义+参数SpiCancelApi:Ecuc布尔参数定义SpiVersionInfoApi:Ecuc布尔参数定义默认值=falseSpiDevErrorDetect:Ecuc布尔参数定义默认值=false+参数SpiSupportConcurrentSyncTransmit:Ecuc布尔参数定义SpiMainFunction周期:EcucFloatParamDef+参数分钟=0最大值=INF默认值=0.01较低多重性=0上重数=1+参考SpiEcucPartition参考:Eucc参考定义较低多重性=0上重数=+目的地*Eucc分区:EcucParamConfContainerDef较低多重性=0上重数=+参考SpiKernelEcucPartitionRef:Eucc参考定义+目的地较低多重性=0上重数=1Spi‑KernelEcucPartitionRef引用的ECUC分区应是SpiEcucPartitionRef引用的ECUC分区的子集。
如果SpiEcucPartitionRef引用一个或多个ECUC分区,则SpiKernelEcucPartitionRef的重数应为1,并且也引用这些ECUC分区之一。

10.2.4 Spi序列

  SWS项目集装箱名称父容器描述配置参数[ECUC_Spi_00106]Spi序列SpiDriver配置一个SPI序列所需的所有数据SWS项目参数名称父容器描述多重性类型默认值构建后变体价值值配置班级范围/依赖性[ECUC_Spi_00222]Spi中断序列Spi序列该参数允许或不允许该序列被另一个序列挂起一。

1

  Ecuc布尔参数定义‑‑真的预编译时间X变体预编译链接时间X变体链接时间构建后时间X变体构建后范围:本地依赖性:此SPI_INTERRUPTIBLE_SEQ_ALLOWED参数应配置为ON。
  SWS项目参数名称父容器描述[ECUC_Spi_00223]SpiSeq结束通知Spi序列该参数是对通知函数的引用。
SWS项目参数名称父容器[ECUC_Spi_00221]SpiJob分配Spi序列描述多重性类型构建后变体多重性构建后变体值true多重配置班级值配置班级范围/依赖性一个序列引用多个作业,这些作业在通信序列期间执行不包含容器SpiSequence:+参数EcucParamConfContainerDef上多重性=下多重性=1SpiInterruptibleSequence:Ecuc布尔参数定义SpiSeqEndNotification:Ecuc函数名定义较低多重性=0上重数=1+参数SpiSequenceId:Ecuc整数参数定义符号名称值=true最大值=255+参考SpiJob分配:Eucc参考定义上多重性=下多重性=1+目的地Spi作业:EcucParamConfContainerDef*上多重性=下多重性=1

128 中的 100

10.2.5

  SWS项目集装箱名称父容器描述配置参数SWS项目参数名称父容器描述多重性类型范围默认值构建后变体值值配置类范围/依赖性SPI通道[ECUC_Spi_00104]SPI通道SpiDriver配置一个SPI通道所需的所有数据[ECUC_Spi_00200]SpiChannelIdSPI通道SPI通道ID,用作SPI API函数中的参数。

1

EcucIntegerParamDef(为此参数生成的符号名称)

0 … 255

  ‑‑错误的预编译时间链接时间构建后时间范围:本地所有变体SWS项目参数名称父容器描述多重性类型范围构建后变体值值配置类[ECUC_Spi_00201]SpiChannel类型SPI通道EB/IB通道的缓冲区使用情况。

1

  Ecuc枚举参数定义EBIB真的预编译时间链接时间范围/依赖性SWS项目参数名称父容器描述多重性类型范围默认值构建后变体值值配置类范围/依赖性构建后时间X变体构建后范围:本地依赖项:SPI_CHANNEL_BUFFERS_ALLOWEDSWS项目参数名称SpiDefaultData父容器描述多重性类型范围默认值构建后变体多重性构建后变体价值多重性配置[ECUC_Spi_00203]SPI通道当(对于内部缓冲区或外部缓冲区)传递给Spi_WriteIB(对于内部缓冲区)或Spi_SetupEB(对于外部缓冲区)的指针为NULL时,要传输的默认数据。

0…1

Ecuc整数参数定义

0 … 4294967295

  ‑‑真的真的预编译时间链接时间班级价值配置班级构建后时间预编译时间链接时间构建后时间X变体构建后X变体预编译X变体链接时间X变体构建后范围/依赖性范围:本地SWS项目参数名称SpiEbMaxLength父容器描述多重性类型范围默认值构建后变体多重性构建后变体价值价值配置班级范围/依赖性[ECUC_Spi_00204]SPI通道此参数仅包含EB通道情况下数据缓冲区的最大大小(数据元素数量)。

0…1

Ecuc整数参数定义

1 … 1048576

1024

  真的真的预编译时间X变体预编译链接时间X变体链接时间构建后时间X变体构建后范围:本地依赖性:必须将此通道的SPI_CHANNEL_TYPE参数配置为EB。SPI_CHANNEL_BUFFERS_ALLOWED参数必须配置为1或2。
  SWS项目参数名称SpiIbNBuffers父容器描述多重性类型[ECUC_Spi_00205]SPI通道该参数仅包含IB通道情况下的数据缓冲区的最大数量。

0…1

Ecuc整数参数定义范围默认值构建后变体多重性构建后变体价值价值配置班级范围/依赖性

1 … 65535

1

  真的真的预编译时间链接时间构建后时间范围:本地依赖性:必须将SPI_CHANNEL_TYPE参数配置为该通道的IB。SPI_CHANNEL_BUFFERS_ALLOWED参数必须配置为0或2。
  SWS项目参数名称父容器描述多重性类型范围构建后变体值true[ECUC_Spi_00206]Spi传输开始SPI通道该参数定义传输的第一个起始位。
预编译时间X VARIANT‑PRE‑COMPILE值配置班级范围/依赖性链接时间构建后时间范围:本地X变体链接时间X变体构建后不包含容器SpiDriver:EcucParamConfContainerDef较低多重性=1上重数=1SpiIbNBuffers:Ecuc整数参数定义+子容器SPI通道:EcucParamConfContainerDef*上多重性=下多重性=1+参数分钟=1最大值=65535默认值=1较低多重性=0上重数=1Spi默认数据:Ecuc整数参数定义+参数+参数最大值=4294967295较低多重性=0上重数=1+字面意思SpiChannel类型:Ecuc枚举参数定义+字面意思电子布:Ecuc枚举字面量定义IB:Ecuc枚举字面量定义+参数+参数Spi数据宽度:Ecuc整数参数定义分钟=1最大值=64默认值=32+字面意思Spi传输开始:Ecuc枚举参数定义+字面意思最低有效位:Ecuc枚举字面量定义+参数+参数SpiEb最大长度:Ecuc整数参数定义分钟=1最大值=1048576默认值=1024较低多重性=0上重数=1SpiChannelId:Ecuc整数参数定义符号名称值=true最大值=255

10.2.6

  SWS项目集装箱名称SPI通道列表[ECUC_Spi_00233]SPI通道列表父容器描述SpiJob对SPI通道及其在作业中的顺序的引用。
  配置参数不包含容器Spi作业:EcucParamConfContainerDef上多重性=下多重性=1+子容器SpiChannel列表:EcucParamConfContainerDef较低多重性=1上重数=+参考SpiChannelAssignment:Eucc参考定义+目的地SPI通道:EcucParamConfContainerDef上多重性=下多重性=1SpiChannelIndex:+参数Ecuc整数参数定义分钟=0最大值=65535默认值=0多重配置类值配置类范围/依赖性预编译时间链接时间构建后时间预编译时间链接时间构建后时间范围:本地X变体预编译X变体链接时间X变体构建后X变体预编译X变体链接时间X变体构建后包含的容器容器名称多重性范围/依赖性SPI通道列表1…对SPI通道及其在作业中的顺序的引用。
Spi作业:EcucParamConfContainerDef
上多重性=下多重性=1SpiJob优先级:Ecuc整数参数定义最大值=3分钟=0+参数SpiJobEndNotification:Ecuc函数名定义较低多重性=0上重数=1SpiJobId:EcucIntegerParamDef+参数符号名称值=true最大值=65535+参考SpiDeviceAssignment:Eucc参考定义+目的地Spi外部设备:EcucParamConfContainerDef*上多重性=下多重性=1+subContainerSpiChannelList:EcucParamConfContainerDef较低多重性=1上重数=

10.2.8

  SWS项目Spi外部设备[ECUC_Spi_00207]容器名称SpiExternalDevice父容器SpiDriver描述配置参数外部设备的通信设置。与SpiJob紧密相连。
  SWS项目参数名称SpiBaudrate父容器SpiExternalDevice描述[ECUC_Spi_00208]该参数是通信波特率‑从配置工具的角度来看,该参数允许使用从Hz到MHz的一系列值。
多重性类型范围默认值

1

EcucFloatParamDef]0…INF[

1000000

  构建后变体价值价值配置班级真的预编译时间链接时间构建后时间X变体预编译X变体链接时间X变体构建后范围/依赖性范围:本地SWS项目[ECUC_Spi_00249]参数名称SpiCsBehavior家长容器描述Spi外部设备该参数用于定义片选行为。要么针对每个数据帧(SPI总线上与SpiData相关的位帧)切换CS组成作业的通道内的宽度)或CS在整个作业中保持有效。
多重性类型范围默认值构建后变体值价值配置班级

1

  Ecuc枚举参数定义CS_KEEP_ASSERTEDCS_切换CS_KEEP_ASSERTED真的预编译时间链接时间构建后时间芯片选择在整个工作中保持有效每个数据帧完成后片选被释放X变体预编译X变体链接时间X变体构建后类型默认值正则表达式构建后变体价值值配置班级范围/依赖性EcucStringParamDef(为此参数生成的符号名称)‑‑‑‑错误的预编译时间链接时间构建后时间范围:本地X‑‑‑‑所有变体SWS项目参数名称父容器描述多重性类型范围构建后变体值值配置类范围/依赖性[ECUC_Spi_00210]SpiCs极性Spi外部设备该参数定义片选的有效极性。

1

  Ecuc枚举参数定义高的低的真的预编译时间链接时间构建后时间范围:本地‑‑‑‑X变体预编译X变体链接时间X变体构建后范围CS_VIA_GPIOSPI通过GPIO处理芯片选择司机。
  默认值构建后变体多重性构建后变体价值多重性配置班级价值配置班级范围/依赖性CS_VIA_PERIPHERAL_ENGINECS_VIA_PERIPHERAL_ENGINE真的真的预编译时间链接时间构建后时间预编译时间链接时间构建后时间范围:本地依赖项:SpiEnableCs芯片选择由外设硬件引擎自动处理。
  X变体预编译X变体链接时间X变体构建后X变体预编译X变体链接时间X变体构建后SWS项目参数名称父容器描述多重性类型范围构建后变体值值配置类范围/依赖性[ECUC_Spi_00211]SpiDataShiftEdgeSpi外部设备该参数定义SPI数据移位沿。

1

  Ecuc枚举参数定义领导尾随真的预编译时间链接时间构建后时间范围:本地‑‑‑‑X变体预编译X变体链接时间X变体构建后SWS项目参数名称SpiEnableCs[ECUC_Spi_00212]父容器SpiExternalDevice描述多重性类型默认值构建后变体价值价值配置班级范围/依赖性该参数启用或禁用片选处理功能。如果启用此参数,则参数SpiCsSelection进一步详细说明芯片选择的类型。

1

  Ecuc布尔参数定义‑‑SWS项目参数名称父容器描述多重性类型范围构建后变体价值值配置班级范围/依赖范围:本地SWS项目[ECUC_Spi_00217]SpiHw单元Spi外部设备此参数是标识分配给此作业的HW SPI硬件微控制器外设的符号名称。
  [ECUC_Spi_00213]参数名称父容器描述多重性类型范围构建后变体值值配置类范围/依赖性SpiShift时钟空闲级别Spi外部设备该参数定义SPI移位时钟空闲电平。

1

  Ecuc枚举参数定义高的低的真的预编译时间链接时间构建后时间范围:本地SWS项目参数名称SpiTimeClk2Cs父容器SpiExternalDevice描述[ECUC_Spi_00214]时钟和芯片选择断言之间的时序(以秒为单位)‑该参数允许使用从10 ns到0.01秒的值范围。软件BSW‑SPI中使用的实际配置值是由生成器工具计算出来的。
多重性类型范围默认值构建后变体值价值配置班级范围/依赖性

1

EcucFloatParamDef[1E‑8…0.01]

1E‑6

  真的预编译时间链接时间构建后时间范围:本地X变体预编译X变体链接时间X变体构建后SWS项目[ECUC_Spi_00247]参数名称SpiTimeCs2Clk父容器SpiExternalDevice描述片选断言和时钟之间的时序(以秒为单位)‑该参数允许使用从10ns到0.01秒的值范围。软件BSW‑SPI中使用的实际配置值是由生成器工具计算出来的。
多重性类型范围默认值构建后变体值价值配置班级范围/依赖性

1

EcucFloatParamDef[1E‑8…0.01]

1E‑6

真的预编译时间链接时间构建后时间范围:本地X变体预编译X变体链接时间X变体构建后多重性类型范围默认值构建后变体值价值配置班级范围/

1

EcucFloatParamDef[1E‑8…0.01]

1E‑6

  真的预编译时间链接时间构建后时间范围:本地XXX变体预编译变体链接时间构建后变体SPl处理程序/驱动程序规范AUTOSAR CP R22-11依赖性SWS项目[ECUC_Spi_00246]参数名称SpiDeviceEcucPartitionRef父容器描述Spi外部设备将SPl外部设备映射到零个或多个ECUC分区,以限制对此外部设备的访问。引用的ECUC分区是SPl驱动程序映射到的ECUC分区的子集。
多重性类型构建后变体多重性构建后变体价值多重性配置班级价值配置班级

0…*

  参考Eucc分区真的真的预编译时间链接时间构建后时间预编译时间链接时间构建后时间XX----所有变体所有变体范围/依赖性适用范围:ECU不包含容器文档lD 38:AUTOSAR_SWS_SPlHandlerDriverSpi外部设备:EcucParamConfContainerDef+参数SPI波特率:EcucFloatParamDef分钟=0最大值=INF*上多重性=下多重性=1+参数+参数+参数+参数领导:Ecuc枚举字面量定义SpiDataShiftEdge:Ecuc枚举参数定义SpiTimeClk2C:EcucFloatParamDef分钟=0.00000001最大值=0.01默认值=0.000001+字面意思SpiShiftClockIdleLevel:Ecuc枚举参数定义低的:Ecuc枚举字面量定义SpiEnableCs:Ecuc布尔参数定义SpiCsSelection:EcucEnumerationParamDef+参数默认值=CS_VIA_PERIPHERAL_ENGINE较低多重性=0上重数=1+字面意思+字面意思CS_VIA_PERIPHERAL_ENGINE:Ecuc枚举字面量定义CS_VIA_GPIO:Ecuc枚举字面量定义+参数+字面意思SpiCs极性:低的:Ecuc枚举字面量定义Ecuc枚举参数定义+字面意思高的:Ecuc枚举字面量定义+参数+参数SpiCs标识符:Ecuc字符串参数定义符号名称值=trueCSIB0:Ecuc枚举字面量定义+字面意思CSIB1:Ecuc枚举字面量定义+字面意思CSIB2:Ecuc枚举字面量定义+字面意思CSIB3:Ecuc枚举字面量定义SpiDeviceEcucPartitionRef:+参考Eucc参考定义较低多重性=0上重数=+目的地Eucc分区:EcucParamConfContainerDef较低多重性=0上重数=+参数SpiTimeCs2Clk:EcucFloatParamDef分钟=0.00000001最大值=0.01默认值=0.000001+参数SpiCsBehavior:EcucEnumerationParamDef默认值=CS_KEEP_ASSERTED+字面意思CS_KEEP_ASSERTED:Ecuc枚举字面量定义+参数SpiTimeCs2Cs:EcucFloatParamDef+字面意思CS_切换:Ecuc枚举字面量定义分钟=0.00000001最大值=0.01默认值=0.000001Spi‑DeviceEcucPartitionRef引用的ECUC分区应是SpiEcucPartitionRef引用的ECUC分区的子集。
如果SpiEcucPartitionRef引用一个或多个ECUC分区,则SpiDeviceEcucPartitionRef应具有大于零的重数,并引用这些ECUC分区中的一个或多个。

10.2.9

  SWS项目容器姓名家长容器描述配置参数SpiDriver[ECUC_Spi_00091]SpiDriver斯皮该容器包含AUTOSAR Spi模块的配置参数和子容器。
  SWS项目参数名称父容器描述多重性类型范围默认值构建后变体多重性构建后变体价值多重性配置类值配置班级[ECUC_Spi_00197]SpiMax通道SpiDriver该参数包含配置的通道数。它将在配置阶段由工具收集。

0…1

Ecuc整数参数定义

0 … 65535

0

真的真的预编译时间链接时间构建后时间预编译时间链接时间范围/依赖范围:本地X变体构建后多重配置类值配置类范围/依赖性预编译时间链接时间构建后时间预编译时间链接时间构建后时间范围:本地X变体预编译X变体链接时间X变体构建后X变体预编译X变体链接时间X变体构建后包含的容器容器姓名多重性范围/依赖性SpiChannel 1…*配置一个SPI通道所需的所有数据SpiExternal‑设备SpiJob

1…*

1…*

  外部设备的通信设置。与Spi紧密相连工作。配置一项SPI作业所需的所有数据,其中包括内部SPI单元与外部设备的特殊设置之间的连接。
SpiSequence 1…配置一个SPI序列所需的所有数据Spi序列:EcucParamConfContainerDef上多重性=下多重性=1SPI通道:EcucParamConfContainerDef上多重性=下多重性=1Spi外部设备:EcucParamConfContainerDef上多重性=下多重性=1Spi作业:EcucParamConfContainerDef*上多重性=下多重性=1+子容器+子容器+子容器+子容器SpiDriver:EcucParamConfContainerDef较低多重性=1上重数=1+参数SpiMax频道:Ecuc整数参数定义分钟=0最大值=65535默认值=0较低多重性=0上重数=1+参数SpiMax作业:Ecuc整数参数定义分钟=0最大值=65535默认值=0较低多重性=0上重数=1+参数SpiMax序列:Ecuc整数参数定义分钟=0最大值=65535默认值=0较低多重性=0上重数=1

10.2.10 Spi发布信息

  SWS项目集装箱名称父容器描述配置参数SWS项目参数名称SpiMaxHwUnit父容器描述多重性类型范围默认值构建后变体价值价值配置班级范围/依赖性[ECUC_Spi_00235]Spi发布信息斯皮保存所有SPI特定已发布信息参数的容器[ECUC_Spi_00236]Spi发布信息此 SPI Handler/Driver模块可用并处理的不同SPI硬件微控制器外设(单元/总线)的数量。

1

Ecuc整数参数定义

0 … 65535

0

错误的公开信息X范围:本地不包含容器

10.3公开信息

详细信息请参阅SWS_BSWGeneral中的第10.3章“公开信息”

10.4配置概念

   SPI Handler/Driver模块和使用它的模块之间存在某种关系。这种关系在配置阶段得到解决,其结果会影响这些模块之间的正确API和行为。用户需要向 SPI Handler/Driver提供部分配置,以使其适应其需要。 SPI Handler/Driver应采用此配置并向用户提供所需的工具。该图显示了 SPI Handler/Driver配置期间的信息流。它仅针对一个用户显示,例如使用外部EEPROM驱动程序,但这种情况对于 SPI Handler/Driver的所有用户都很常见。为了突出更多用户受到影响的情况,绘制了几个重叠的文档。图中的步骤是:1. SPI Handler/Driver的用户(外部EEPROM驱动程序)编辑XML配置文件。该XML配置文件与用户用来生成自己的配置的文件相同。

2. 对于每个 ECU,XML 硬件配置文档包含以下信息:

  应该用来配置一些参数。3.“SPI生成工具”。生成工具(这里仅反映生成SPI使用代码的部分)应生成要导出的句柄和配置集的实例。在此步骤中,软件集成商将提供缺失的信息。4.SPI实例配置文件。生成后,用户所需的所有符号处理程序都包含在 SPI Handler/Driver的配置头文件中。5.用户获取处理程序的符号名称。用户导入生成的句柄以按照其XML配置文件的请求使用它们。

11 不适用的要求

这些要求不适用于本规范。(SRS_BSW_00301、SRS_BSW_00302、SRS_BSW_00306、SRS_BSW_00307、SRS_BSW_00308、SRS_BSW_00309、SRS_BSW_00312、SRS_BSW_00325、SRS_BSW_00328、SRS_BSW_00330、SRS_BSW_00331、SRS_BSW_00334、SRS_BSW_00341、SRS_BSW_00342、SRS_BSW_00343、SRS_BSW_00347、SRS_BSW_00375、SRS_BSW_00399、SRS_BSW_00400、SRS_BSW_00401、SRS_BSW_00413、SRS_BSW_00416、SRS_BSW_00417、SRS_BSW_00422、SRS_BSW_00423、SRS_BSW_00424、SRS_BSW_00426、SRS_BSW_00427、SRS_BSW_00428、SRS_BSW_00429、SRS_BSW_00432、SRS_BSW_00433、SRS_BSW_00005、SRS_BSW_00006、SRS_BSW_00009、SRS_BSW_00010、SRS_BSW_00161、SRS_BSW_00164、SRS_BSW_00168、SRS_BSW_00170、SRS_BSW_00172、SRS_SPAL_12267、SRS_SPAL_12068、SRS_SPAL_12069、SRS_SPAL_12063、SRS_SPAL_12129、SRS_SPAL_12067、SRS_SPAL_12077、SRS_SPAL_12078、SRS_SPAL_12092、SRS_SPAL_12265)

12 附录

下一页显示的表格只是一个示例,旨在帮助将来必须配置软件模块以使用 SPI Handler/Driver的用户(和/或开发人员)。该表独立于Spi_ConfigType结构,但包含所有元素和聚合,例如通道、作业和序列。EEP_WRITE_SEQ EEP_READ_SEQEEP_CMD_作业EEP_DATA_作业EEP_CMD_CH EEP_ADR_CH EEP_DATA_CH SPI Handler/Driver的外部EEPROM写入/读取配置象征性的姓名序列ID属性象征性的姓名工作ID属性象征性的姓名渠道ID属性EEP_WRITE_序列号

0

2(职位数量),

{EEP_CMD_JOB,EEP_DATA_作业}(职位列表),不可中断,EEP_vidEndOfWrit测序仪EEP_CMD_J产科

0

SPI_BUS_0,CS_EEPROM,CS_ON,CS_低,时钟_2MHz,

1(时间以微秒为单位),

极性180,下降沿,

3、

EEP_vidEndOfStartWrJob,

1 (通道数)

{EEP_CMD_CH}(列表频道)EEP_CMD_CHEB,

8 位,1

个数据

0 发送,

MSB优先,默认值为0x00EEP_READ_序列号

1

1(职位数量),

{EEP_DATA_JOB}(职位列表),不可中断,EEP_vidEndOfRead序列EEP_数据_工作SPI_BUS_0,CS_EEPROM,CS_ON,CS_低,时钟_2MHz,

1(时间以微秒为单位),

极性180,

1 下降沿,

2、

无效的,

3 (通道数)

{EEP_CMD_CH,EEP_ADR_CH,EEP_DATA_CH}(列表频道)EEP_ADR_CHEB,

16 位,1

个数据

1 发送,

MSB优先,默认值为0x0000EEP_数据_CHEB,

8 位,

32 个数据

2 发送,

  
  
  
  
  
  
  
  
  
  
  
  
  
【未完待续】

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
SPI(Serial Peripheral Interface)是一种串行外设接口,用于在微控制器、存储器和其他外设之间进行通信。AUTOSARAutomotive 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传输的原理和使用方法,对于设计和实现汽车电子系统具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值