CP AUTOSAR之SPI Handler/Driver详细说明

news2024/12/26 11:50:53

本文遵循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) 和数据访问数据类型之间的差异。
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
【未完待续】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1487046.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

安装 node 错误的配置环境变量之后使用 npm 报错

安装 node 错误的配置环境变量之后使用 npm 报错 node:internal/modules/cjs/loader:1147 throw err; ^ Error: Cannot find module ‘F:\ACodeTools\Node\node_modules\npm\bin\node_modules\npm\bin\npm-cli.js’ at Module._resolveFilename (node:internal/modules/cjs/loa…

【计算机网络】HTTPS 协议原理

https 一、HTTPS 是什么二、加密1. 加密概念2. 加密的原因3. 常见的加密方式(1)对称加密(2)非对称加密 三、数据摘要(数据指纹)四、HTTPS 的工作原理探究1. 只使用对称加密2. 只使用非对称加密3. 双方都使用非对称加密4. 非对称加…

springboot239华府便利店信息管理系统

华府便利店信息管理系统 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本华府便利店信息管理系统就是在这样的大环境下诞生,其可以帮助管理者在…

C语言冒泡排序(高级版)

目录: 冒泡排序的原理 主函数 "冒泡排序函数" 比较函数 交换函数 最终输出 完整代码 冒泡排序的原理: 冒泡排序的原理是:从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右…

Python实现BIAS工具判断信号:股票技术分析的工具系列(4)

Python实现BIAS工具判断信号:股票技术分析的工具系列(4) 介绍算法解释 代码rolling函数介绍完整代码data代码BIAS.py 介绍 在股票技术分析中,BIAS(乖离率)是一种常用的技术指标,用于判断股票价…

unity学习(45)——选择角色菜单——客户端处理服务器的数据

1.已知客户端ReceiveCallBack中已经收到来自服务器返回的数据包。 2.问题是客户端MessageManager中的Update并没有拆解该数据包 ,因该是因为脚本没有挂载。 挂在SelectMenu场景中的Camera上即可。 挂载后成功达到目地 其中Update中的List是一个起到全局效果的static…

C# 打包nuget包

类库等项目开发好之后打开csproj&#xff0c;添加如下代码 <PropertyGroup><!--<TargetFramework>netstandard2.0</TargetFramework>--><PackageId>Test01</PackageId><Version>1.0.0</Version><Authors>wjl</Autho…

Redis、Elasticsearch(ES)、RocketMQ和MYSql 持久化对比

在现代大数据和分布式系统中&#xff0c;数据持久化是一个至关重要的话题。本文将针对 Redis、Elasticsearch&#xff08;ES&#xff09;、 RocketMQ和MYSql 这四种常见的数据存储和消息队列系统进行持久化方面的对比分析&#xff0c;帮助读者更好地了解它们各自的特点和适用场…

ABAP - SALV 教程15 用户点击按钮交互功能

SALV增加了按钮&#xff0c;那么该怎么实现点击了按钮实现交互功能呢&#xff1f;可以通过注册事件并且在对应的method中写入相关逻辑&#xff0c;来实现点击按钮后的逻辑。通过自定义状态栏的方式添加按钮&#xff1a;http://t.csdnimg.cn/lMF16通过使用派生类的方式添加按钮&…

lv20 QT主窗口4

熟悉创建主窗口项目 1 QAction 2 主窗口 菜单栏&#xff1a;fileMenu menuBar()->addMenu(tr("&File")); 工具栏&#xff1a;fileToolBar addToolBar(tr("File")); 浮动窗&#xff1a;QDockWidget *dockWidget new QDockWidget(tr("Dock W…

SVN教程-SVN的基本使用

SVN&#xff08;Apache Subversion&#xff09;是一款强大的集中式版本控制系统&#xff0c;它在软件开发项目中扮演着至关重要的角色&#xff0c;用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比&#xff0c;SVN 的集中式架构使得团队能够更加协同地进行开发&…

在ubuntu上安装hadoop完分布式

准备工作 Xshell安装包 Xftp7安装包 虚拟机安装包 Ubuntu镜像源文件 Hadoop包 Java包 一、安装虚拟机 创建ubuntu系统 完成之后会弹出一个新的窗口 跑完之后会重启一下 按住首先用ctrlaltf3进入命令界面&#xff0c;输入root&#xff0c;密码登录管理员账号 按Esc 然后输入 …

详解算法的时间复杂度和空间复杂度!

目录 ​编辑 1. 算法效率 2. 时间复杂度 2.1 时间复杂度的概念 2.2 大O的表示渐进法 2.3 一个栗子 3. 空间复杂度 4. 常见复杂度对比 5. 完结散花 ​​​​​​​ 悟已往之不谏&#xff0c;知来者犹可追 创作不易&#xff0c;宝子们&#xff01;如果这篇文章对你们有…

算法44:动态规划专练(最长公共子串题)

之前写过一篇博客是关于最长公共子序列的博客算法27&#xff1a;最长公共子序列&#xff08;力扣1143题&#xff09;——样本模型&#xff08;4&#xff09;_样本模型无效的条件-CSDN博客 子序列是可以删除某些字符达到的。 比如&#xff1a;字符串1为 a1b2c3. 字符串2为 aqv…

【C语言】【洛谷】P1125笨小猴

一、个人解答 #include<stdio.h> #include<string.h>int prime(int num);int main() {char max a, min z;int maxn0, minn1000;char str[100];int num[26] { 0 };fgets(str, sizeof(str), stdin);str[strcspn(str, "\n")] \0;for (int i 0; str[i]…

错误: 找不到或无法加载主类 com.zql.springbootTest.SpringbootTestApplication

首先查看application.properties是否出现问题 然后可以尝试 maven install

巧用二进制实现俄罗斯方块小游戏

效果预览 思想 首先建立两个数组board、tetris用来存储当前已经堆积在棋盘的方块与正在下落的方块。 这两个是一维数组当需要在页面画棋盘时就对其每一项转成二进制&#xff08;看计算属性tetrisBoard&#xff09;&#xff0c;其中1&#xff08;红色&#xff09;0&#xff08;…

Flink:Temporal Table Function(时态表函数)和 Temporal Join

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…

Qt 简约美观的加载动画 第九季

这次和大家分享6个非常清爽的加载动画. &#x1f60a; 效果如下 &#x1f60a; 一共三个文件 , 可以直接编译运行的呢 //main.cpp #include "LoadingAnimWidget.h" #include <QApplication> #include <QGridLayout> int main(int argc, char *argv[]) …

Endnote x9 最快方法批量导入.enw格式文件

按照网上看到的一个方法直接选中所有enw批量拖拽到 All references 附件不行啊&#xff0c; 以为只能写bat脚本方式了 经过一番尝试&#xff0c;惊人的发现拖到下面这个符号的地方就行了&#xff01;&#xff01;&#xff01; 如果不成功的话&#xff0c;可能&#xff1a; 我…