搞一点AutoSar--MCAL SPI-1

article/2025/10/11 12:39:44

整理了一点SPI的资料

目录

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

1、SPI模块简介

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

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

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

                                图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总线和控制器的行为包括以下几种定义:
在这里插入图片描述

                                    图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供上层软件组件调用。

在这里插入图片描述

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

AUTOSAR MCAL规范中给出了同步方式通信和异步方式通信下SPI驱动模块API调用流程,下图所示为内部缓存通道在异步方式通信下SPI驱动模块API调用流程。
在这里插入图片描述

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

http://chatgpt.dhexx.cn/article/0Nn3NW1e.shtml

相关文章

【MCAL_CANDriver】-1.2-Can Mailbox邮箱,Hardware Object,HOH,HRH,HTH之间的关系

点击返回「《Autosar_MCAL高阶配置》总目录」 目录 1 关键字定义 2 Maibox与Hardware Object之间的关系 2.1 接收L-PDU 2.2 发送L-PDU 3 HOH,HRH,HTH,Hardware Object之间的关系 4 Message buffer(MB)结构 5 结尾 1 关键字定义 Mailb…

图解AUTOSAR(五)——微控制器抽象层(MCAL)

微控制器抽象层位于AUTOSAR分层模型中BSW最底层,包含内部驱动,可以直接访问微控制器和片内外设。更进一步地,MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块…

MCAL架构

MCAL位于AUTOSAR软件架构中基本软件(BSW)的底层,是可以直接访问MCU寄存器和内部外设的底层驱动。这样划分的目的是使上层软件(如ECU抽象层、系统服务层等)独立于MCU硬件平台,保证上层软件的标准化和通用性。…

AutoSar之微控制器抽象层MCAL

微控制器抽象层位于AUTOSAR BSW的最底层,包含内部驱动,可直接访问微控制器和外设芯片。从具体应用来看,MCAL主要包括微控制器驱动、存储器驱动、通信驱动和输入输出驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组…

MCAL介绍及Module Plugin开发流程总结

Mcal–微控制器抽象层位于AUTOSAR分层模型中BSW最底层,包含内部驱动,可以直接访问微控制器和片内外设。 MCAL又可以分为微控制器驱动、存储器驱动、通信驱动和I/O驱动四个部分,各部分又由具体的与微控制器硬件相对应的驱动模块组成。如图所示…

Autosar MCAL软件架构基本概念

MCAL架构介绍 Autosar整体架构图如下所示: MCAL是MicroController Abstraction Layer(微控制器抽象层)的缩写。如下图所示,MCAL位于AUTOSAR软件架构中基本软件(Basic Software,BSW)的底层&…

【Autosar】学习总结-MCAL

一、简介 MCAL:微控制器抽象层;位于BSW层中的最下层; MCAL细分,可将驱动分为:微控制器驱动、存储器驱动、通信驱动、IO驱动: 二、MCAL的配置(EB-Tresos) 1.PORT 我理解的PORT&…

Object数据转map类型

最近 因为调用接口 返回数据 原本项目中是用List<Map<String, Object>> a 接收的 等于说我只能获取到 Map m1 a.get(0); 到第一层的数据 m1.get(“HttpCode”)的数据 然后就是objcet的数据了 无法直接获取到 之前在网上找了好多 什么直接转成jsonObject因为格式的…

Javascript Object和Map之间的转换

简单的区分Map和Object Map是ES6退出的一个类型&#xff0c;特点&#xff1a;任何值都可作为属性名 Object特点&#xff1a;属性名只能是字符串(一开始我也不信&#xff0c;测试后才发现的) 代码图片 创建一个map类型 new Map([[key, value],[key1, value1] ])简单的介绍下面…

Object 转Map,Map转Object方式总结

商品业务对象定义&#xff1a;Product Product product new Product(); product.setId(1L); product.setName("爱他美") product.setProductDt("2022-03-16") 第一种&#xff1a;通过Alibaba Fastjson实现&#xff1a; pom.xml 文件依赖 <dependen…

使用PyQt打包命令pyinstall的几个问题

**问题1&#xff1a;**打包后无demo.spec文件 在windows下使用cmd界面打包时&#xff0c;可以将路径设置到目标文件目录&#xff0c;这样会生成demo.spec文件&#xff0c;方便后期改正软件。 问题2&#xff1a;打包好后提示如下错误&#xff1a; 解决办法&#xff1a;在demo.…

PyCharm打包失败及Pyinstall无法安装问题的解决

问题描述 Python的工程很多情况下需要打包成EXE文件&#xff0c;通过pyinstaller的工具进行打包&#xff0c;首先需 要安装PyInstaller的工具&#xff0c;然后再通过命令行进行打包&#xff0c;安装 PyInstaller 模块与安装其他 Python 模块一样&#xff0c;使用 pip 命令安装…

pyinstall 打包python3.7.1的exe反编译

pyinstall 打包python3.7.1的exe反编译 由于 pyinstall打包的EXE文件&#xff0c;被360认为可能有木马病毒&#xff0c;首先怀疑计算数机系统有毒。用360杀毒&#xff0c;病毒倒是查处了十几个&#xff0c;对于一个对计算机不是十分精通的人来说&#xff0c;只能按360的提示去做…

pyinstall打包多个.py文件成应用程序

Pyinstall打包多个.py文件成应用程序的方法&#xff1a; 这里成功打包了两个.py文件&#xff0c;一张图片&#xff0c;一个.h5文件 如图所示&#xff1a; 第一步&#xff1a;生成.spec文件 pyinstaller -c -D main.py -p image_handler.py这里main.py文件是主文件&#xff0…

解决python3.6中pyinstall打包失败的问题

环境&#xff1a;python 3.6 pyinstall 一开始用百度上的方法&#xff0c;直接执行python目录下的pyinstall.exe文件&#xff0c;很好用。 C:\WINDOWS\System32>C:\Users\hasee\AppData\Local\Programs\Python\Python36\Scripts\pyinstaller.exe F:\python_code_test\ren…

pyqt5 +pyinstall打造属于自己的桌面版程序(学习阶段)

网上关于pyqt5的教程特别少,终于东拼西凑,做出一点东西出来,很简单的小应用,便于上手学习。 pyqt5的主文件代码如下,代码特别多,也没怎么细分。大家可以参考下。github地址 pyinstall打包的一点小技巧送给大家。 取消生成程序doc窗口使用命令pyinstaller -F -i 图标路径 …

tkinter - 使用Pyinstall进行打包封装

1 需要安装 PyInstaller C:\Users\30818> pip install pyinstaller 2 将模块py文件打包成pyd 防止反编译暴露源代码 pyd是一个模块插件 可以通过 Import 来引入pyd文件 直接编译会提示二进制读取错误 2-1 安装cython pip install cython 2-2 在当前目录创建一个 set…

【踩坑日记(一)】: Pyinstall 打包.py文件 生成exe可执行文件

文章目录 Pyinstall 打包.py文件 生成exe可执行文件如何入坑&出坑Analysis 实例其他实例常用参数参考文档&#xff1a;Pyinstall 官方手册 Pyinstall 打包.py文件 生成exe可执行文件 原本认为很轻松的事情&#xff0c;结果花了近2个小时才搞定&#xff0c;值得记录下踩的坑…

Ubuntu 16.04 安装 Pyinstall

Ubuntu 16.04 安装 Pyinstall 预装环境 python3 version&#xff1a;3.5pip version&#xff1a;8.1 报错如下&#xff1a; 首先直接安装 pyinstall 报错&#xff0c;pip 版本过低&#xff0c;要升级版本使用 提供的命令升级 pip&#xff0c;但是开始套娃&#xff0c;一直循…

pyinstall 打包报错

关于使用pyinstaller 打包报错 我的python安装位置为 安装位置/usr/local/python3 关于我的报错环境属于linux 我的pyinstaller 是使用pip 安装的 pip install pyinstaller 在使用pycharm 打包的时候,报错 打包就告诉我缺少什么 关于python的 iso包 我当时有全磁盘搜索该文…