Autosar 规范接口之SPI

news2024/11/30 2:47:29

Autosar SPI 概述(Specification of SPI Handler/Driver )

在这里插入图片描述

基础知识介绍

在AutoSar标准中,与SPI通讯相关的三个术语:Channel、Job和Sequence。
1个Channel对应1个发送缓冲区和1接收缓冲区;1个Job对应着1次SPI通讯发送的内容(既SPI 一次片选过程所传输的内容)。1个Sequence 对应着1个SPI通讯序列(job序列)。多个Job可以分配给一个Sequence。
关于每个术语的详细解释,参考AutoSar标准。SPI通讯是基于Sequence触发的,即使发送1个Job也要将该Job分配给1个队列,然后通过触发Sequence来实现Job的传输。

两种使用方法

方法1: 对应1个SPI外设芯片,分配1个Job、1个Sequence。使用此种方法,触发一次Sequence,只能传输一个Job,当对外设发送多个Job时,需要多次触发Sequence,且在下一次触发Sequence时,必须确保上一次Sequence已经传输完毕,否则下一次Sequence传输会因为上一次Sequence传输占用SPI总线而失败。

**方法2:**对应1个SPI外设芯片,结合对外设芯片的控制方法,分配多个Job和多个Sequence,有目的分配Job到相应的Sequence中。在不同控制逻辑中,触发不同的Sequence,传输不同个数的Job序列。当对1个Sequence分配多Job时,触发此Sequence就可以完成多个Job的传输,SPI 驱动本身来保证Job序列的传输,不会产生下一个Job传输因为上一个Job占用SPI总线而失败的情况。
对外设传输多个Job时,使用方法2可以降低CPU使用率。

在这里插入图片描述

Channel、Job、Sequence

AUTOSAR 提供了三种SPI的抽象。Channel Job Sequence
一张图可以说明三者的关系。

同步调用与异步调用

AUTOSAR 为SPI 提供了两种方式通信的接口。
同步调用 Spi_SyncTransmit
异步调用 Spi_AsyncTransmit
同步调用,是需要等待返回调用结果,而异步调用这是发起任务,一般可以通过回调函数来告知调用结果。

数据类型定义

1、 Spi_ConfigType结构体

在这里插入图片描述

Channel配置包含:

  1. EB/IB buffer的使用情况
  2. 传输位宽 (1~32bits)
  3. 传输数据个数
  4. 传输字节序LSB/MSB
  5. 传输的默认值
    在这里插入图片描述

Job配置包含:

  1. 使用哪个SPI硬件实例
  2. 使用该实例的哪个片选引脚cs
  3. 片选功能是否启用
  4. 片选高/低有效
  5. 波特率
  6. clock 和 chip select之间的时间
  7. 时钟在空闲时是高/低
  8. 数据传输在上升沿/下降沿
  9. 优先级(低0~3高)
  10. Job完成的通知函数
  11. MCU相关的属性(可选)
  12. Channels(至少1个)
    在这里插入图片描述

sequence配置包含:

  1. Jobs (至少1个)
  2. 在每个Job完成后是否产生中断
  3. Sequence完成的通知函数

2、部分API函数

void Spi_Init( const Spi_ConfigType ConfigPtr )*
 1. 初始化所有ConfigPtr相关寄存器
 2. 定义ConfigPtr相关的默认值
 3. 设置SPI状态为“IDLE”,job、sequence的状态设为“ok”
 4. 对于Level2,异步模式设为polling,禁用spi相关中断
在这里插入图片描述

Std_ReturnType Spi_DeInit( void )
 1. 如果驱动状态不是BUSY,将spi外设置为复位上电后的状态
 2. 如果驱动状态是BUSY,请求被拒绝
 3. 去初始化后,模块的状态是UINIT
在这里插入图片描述

Std_ReturnType Spi_WriteIB( Spi_ChannelType Channel, const Spi_DataBufferType DataBufferPtr )*
 1. 返回值:E_OK:该命令被接受,E_NOT_OK:该命令被拒绝。
 2. 将入参数据写入对应channel的内部缓存
 3. 如果入参DataBufferPtr为NULL,将传输默认值
在这里插入图片描述在这里插入图片描述

Std_ReturnType Spi_ReadIB( Spi_ChannelType Channel, Spi_DataBufferType DataBufferPointer )*
 1. 返回值:E_OK:该命令被接受,E_NOT_OK:该命令被拒绝。
 2. 同步读取一条或多条数据
 3. 应该在Transmit后调用,以获取相关数据
在这里插入图片描述

Std_ReturnType Spi_SyncTransmit( Spi_SequenceType Sequence )
 1. 返回值:E_OK:该命令被接受,E_NOT_OK:该命令被拒绝。
 2. 在SPI总线上传输数据
 3. 驱动状态设为“BUSY”
 4. Sequence、Job状态设为“PENDING”
 5. 此时如果有其他Sequence正在传输,应该返回 E_NOT_OK,并上报错误。
在这里插入图片描述
在这里插入图片描述

Spi_StatusType Spi_GetStatus( void )
 1. 获取驱动状态
在这里插入图片描述

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

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

相关文章

(第45册)HTML5网页游戏设计从基础到开发(第2版·微课视频版)

HTML5是W3C组织近年来发布的一项引起业内轰动的Web新标准。它几乎颠覆现有Web应用, HTML5从根本上改变了开发商开发web应用的方式,从桌面浏览器到移动应用,这种语言和标准都正在影响将继续影响着各种操作平台。 本书是第2版,第1版2018年出版,经历6次印刷…

【项目开发】GoFrame+Vue项目部署到阿里云服务器

前言 本来想都用docker部署的,结果学艺实在是不精,只能先这么委曲求全宝塔页面的反向代理一直无法生效,用了重定向跳转页面宝塔的网站也可以构建go项目 背景 后端使用GoFrame框架,前端使用Vue 3 TypeScript Vite,…

Windows Cygwin 配置

Windows Cygwin 配置 一、什么是Cygwin? Cygwin,原Cygnus出品(已被红帽收购),目前是RedHat名下的项目。项目的目的是提供运行于 Windows 平台的类 Unix 环境(以 GNU 工具为代表)。为了达到这个…

learn C++ NO.4 ——类和对象(2)

1.类的6个默认成员函数 1.1.默认成员函数的概念 在 C 中,如果没有显式定义类的构造函数、析构函数、拷贝构造函数和赋值运算符重载函数,编译器会自动生成这些函数,这些函数被称为默认成员函数。 class Date { };初步了解了默认成员函数&am…

pytorch实战10:基于pytorch简单实现CGAN

基于pytorch简单实现CGAN 前言 ​ 最近在看经典的卷积网络架构,打算自己尝试复现一下,在此系列文章中,会参考很多文章,有些已经忘记了出处,所以就不贴链接了,希望大家理解。 ​ 完整的代码在最后。 本系列…

离散数学下 ---格与布尔代数

(一)目录 格的定义及性质 子格 分配格 有补格 布尔代数 (二) 内容 格的定义与性质 补充点: 格与布尔代数,它们与群的基本不同之处是:格与布尔代数的基集都是一个偏序集。 格是一个具…

华硕主板win11设置关机状态下USB接口不通电

华硕主板win11设置关机状态下USB接口不通电 我新装机子在关机之后usb还是通电,导致一些外接设备显示灯常亮着非常不方便。因此我尝试把其关掉。 我的是华硕主板,不同主板可能设置方式不一样,请注意。 请按照如下步骤操作: 计算机…

NetApp FAS2554故障灯常亮case处理过程分享

近期处理了一个NetApp FAS2554前面故障灯一直点亮的case,本文对于分析过程和最终的问题发现做一个分享,欢迎讨论,可以add wechat at StorageExpert。 外观检查: 客户反馈,一套FAS2554存储,没有任何扩展柜…

文献阅读(52)—— Integration self-attention and convolution

文献阅读(52)—— Integration self-attention and convolution 文章目录 文献阅读(52)—— Integration self-attention and convolution先验知识/知识拓展文章结构背景文章方法1. Relating Self-Attention with Convolution 文章…

C++11 函数对象、Lambda表达式 绑定器

1. 函数对象和绑定器 函数对象&#xff1a; 重载了operator()运算符的类的对象。 STL中的原本的绑定器&#xff1a; STL中的绑定器可将二元函数对象绑定为一元函数对象。有如下示例帮助回顾&#xff1a; #include <iostream> #include <vector> #include <…

「 计算机网络 」Cookie、Session、Token、JWT 原理详解

「 计算机网络 」Cookie、Session、Token、JWT 原理详解 参考&鸣谢 傻傻分不清之 Cookie、Session、Token、JWT 详解 Cookie&#xff0c;Session&#xff0c;Token 一文彻底搞懂Cookie、Session、Token到底是什么 文章目录 「 计算机网络 」Cookie、Session、Token、JWT 原…

机器学习 day13(正则化,线性回归的正则化)

正则化的思想 如果特征的参数值更小&#xff0c;那么对模型有影响的特征就越少&#xff0c;模型就越简单&#xff0c;因此就不太容易过拟合 如上图所示&#xff0c;成本函数中有W₃和W₄&#xff0c;且他们的系数很大&#xff0c;要想让该成本函数达到最小值&#xff0c;就得使…

基于PostGIS的曲线拐点计算

在这篇博文中&#xff0c;我将介绍一种查找曲线拐点的方法。 一个简单的理解方式&#xff1a;将曲线想象成我们正在行驶的道路&#xff0c;我们想要找到我们停止右转并开始左转或反之的点&#xff0c;如下所示&#xff1a; 我们将展示解决方案的草图和 PostGIS 中的实际实施。…

AR VR 到底哪种技术可以改变未来?

随着科技的不断进步&#xff0c;虚拟现实&#xff08;VR&#xff09;和增强现实&#xff08;AR&#xff09;技术已经成为了当今科技领域的热门话题。VR和AR的出现&#xff0c;为人们带来了前所未有的体验和感受&#xff0c;也为各行各业的发展提供了新的机遇。但是&#xff0c;…

MySQL学习---14、变量、定义条件和处理程序

1、变量 在MySQL数据库的存储过程和函数中&#xff0c;可以使用变量来存储查询或计算的中间结果数据&#xff0c;或者输出最终的结果数据。 在MySQL数据库中&#xff0c;变量分为&#xff1a;1、系统变量2、用户自定义变量1、系统变量 1.1.1 系统变量分类 1、变量由系统定义…

SpringCloud使用SkyWalking实现分布式链路追踪2以及Prometheus全方位监控告警系统

文章目录 一、SkyWalking链路追踪使用Elasticsearch数据库1、SkyWalking连接Elasticsearch数据库2、SkyWalking自定义链路追踪3、SkyWalking的调用日志 二、SkyWalking链路追踪的告警功能1、SkyWalking的告警规则2、SkyWalking自定义告警规则3、SkyWalking实现网络钩子Webhooks…

基于springboot+vue的校园任务订单配送管理系统

随着我国教育制度的改革的发展&#xff0c;各大高校的学生数量也在不断的增加。当前大学生的生活和消费习惯等导致他们更喜欢通过网络来获取自己想要的商品和服务&#xff0c;这也是导致当前校园配送盛行的主要原因。为了能够让更多的学生享受到校园配送的服务&#xff0c;我们…

记录一次华三交换机配置IP地址和SNMP服务的过程

一、华三交换机配置IP地址 1、将交换机的console口连接到台式机&#xff0c;然后通过XShell连接到COM口 2、进入华三交换机的系统配置界面 命令&#xff1a;system-view 示例&#xff1a;system-view 3、创建vlan。输入vlan vlan-id命令创建一个VLAN。其中&#xff0c;vlan…

FreeRTOS_移植和配置

目录 1. 什么是FreeRTOS&#xff1f; 2. FreeRTOS 特点 3. FreeRTOS 移植 3.1 验证程序 1. 什么是FreeRTOS&#xff1f; 我们先看 FreeRTOS 的名字&#xff0c;可以分成两部分&#xff1a;Free 和 RTOS&#xff0c;Free 就是免费的、自由的、不受约束的意思&#xff0c;RTO…

016-fty_crkme3

运行程序 check错误 查壳 有UPX壳&#xff0c;ESP定律脱壳 载入OD分析 搜索字符串 向上找&#xff0c;找到段首 开始分析算法 搜先判断输入是否为空 再下面开始判断输入的字符除了 “-” 是不是满足0-9 如果满足的话&#xff0c;要再判断长度&#xff0c;0x9 到 0xB&#x…