《我的 Classic Platform AUTOSAR之路》 SPI介绍与EB配置

2023-11-11 09:20

本文主要是介绍《我的 Classic Platform AUTOSAR之路》 SPI介绍与EB配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AUTOSAR MCAL SPI

  • AUTOSAT SPI
    • SPI物理层介绍
    • SPI 在AUTOSAR的配置主要参数
    • SPI EB配置参数

AUTOSAT SPI

以下内容基于标准AUTOSAR文档以及EB Tresos工具说明

SPI物理层介绍

SPI,Serial Peripheral interface,顾名思义就是串行外围设备接口,是Motorola首先在其MC68HCXX系列处理器上定义的。

SPI接口主要应用在EEPROM、FLASH、实时时钟、AD转换器,还有数字信号处理器和数字信号解码器之间。SPI是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,比如AT91RM9200。

SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。

优点:支持全双工通信、通信简单、数据传输速率快;

缺点:没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据的可靠性上有一定的缺陷。

SPI物理层
SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时),这四根线分别是MISO、MOSI、SCLK、CS。

备注:
常见的SPI主要是3线SPI,4线DSPI,6线QSPI,具体可百度搜索,此文主要讲4线DSPI

在这里插入图片描述
在这里插入图片描述

CS:控制芯片是否被选中的,也就是说只有片选信号为预先规定的使能信号时(一般默认为低电位),对此芯片的操作才有效,这就允许在同一总线上连接多个SPI设备成为可能。也就是说:当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低。

在这里插入图片描述

MISO/MOSI/SCLK:通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCLK提供时钟脉冲,MISO,MOSI则基于此脉冲完成数据传输。数据输出通过MOSI线,数据在时钟上升沿或下降沿时采样,同时也会有返回数据用于接受。完成一位数据传输,输入也使用同样原理。这样,在至少8次时钟信号的改变(上沿和下沿为一次),就可以完成8位数据的传输。下图是SPI通信的一个简单例子:

在这里插入图片描述

SPI通信模式
SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的,但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式。

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:

CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;

CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;

CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿;

CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿。

在高电平有效状态时,第一边沿为上升沿,第二边沿为下降沿;在低电平有效状态时,第一边沿为下降沿,第二边沿为上升沿。

具体四种模式如下:

CPOL = 0,CPHA = 0

时钟高电平时为有效状态,时钟上升沿(第一个边沿)采样。
在这里插入图片描述

CPOL = 0,CPHA = 1

时钟高电平时为有效状态,时钟下降沿(第二个边沿)采样。
在这里插入图片描述

CPOL = 1,CPHA = 0

时钟低电平时为有效状态,时钟下降沿(第一个边沿)采样。
在这里插入图片描述

CPOL = 1,CPHA = 1

时钟低电平时为有效状态,时钟上升沿(第二个边沿)采样。
在这里插入图片描述

SPI内部工作机制
SPI可分为主、从两种模式,并且支持全双工模式,所以这也就导致STM32的SPI接口比较复杂。比如:配置SPI为主模式、配置SPI为从模式、配置SPI为单工通信、配置SPI为双工通信等等。下图为SPI工作框图和单从机工作模式的总线连接图:
在这里插入图片描述
在这里插入图片描述

主机和从机都有一个串行移位寄存器,主机通过向它的SPI串行寄存器写入一个字节来发起一次传输。串行移位寄存器通过MOSI信号线将字节传送给从机,同时从机也将自己的串行移位寄存器中的内容通过MISO信号线返回给主机。这样,两个移位寄存器中的内容就被交换。外设的写操作和读操作是同步完成的。如果只进行写操作,主机只需忽略接收到的字节;反之,若主机要读取从机的一个字节,就必须发送一个空字节来引发从机的传输。

SPI是一个环形总线结构,由CS、SCLK、MISO、MOSI构成,其时序其实很简单,主要是在SCLK的控制下,数据按照从高位到低位的方式依次移出主机寄存器和从机寄存器,并且依次移入从机寄存器和主机寄存器。当寄存器中的内容全部移出时,相当于完成了两个寄存器内容的交换。

假设主机的8位寄存器装的是待发送的数据10101010,上升沿发送、下降沿接收、高位先发送。那么第一个上升沿来的时候,主机将会通过MOSI信号线传输给从机最高位1,自身寄存器变成0101010x。同时,MISO信号线会从从机处返回一个数据给主机,那么这时寄存器为0101010MISO,这样在 8个时钟脉冲以后,两个寄存器的内容互相交换一次。这样就完成里一个SPI时序。

主机和从机的发送数据是同时完成的,两者的接收数据也是同时完成的。也就是说,当上升沿主机发送数据的时候,从机也发送了数据。所以为了保证主从机正确通信,应使得它们的SPI具有相同的时钟极性和时钟相位。

SPI 在AUTOSAR的配置主要参数

  • 波特率
    SPI为主从模式,波特率需要小于从芯片的最大波特率设置

  • 极性相位
    初始状态为高电平,那么 Leading 就是它的第一个上升沿;
    初始状态为低电平,那么 Leading 就是它的第一个下降沿。在这里插入图片描述

  • CS使能电平
    数据有效是的电平状态

  • CLK Idle电平
    数据无效时的电平状态

  • 数据大小端
    MSB/LSB

  • 数据位宽
    8bit,16bit,32bit需要看从芯片支持模式

  • 数据长度
    根据所协议去设定数据长度

  • CS2CLK时间
    按datasheet设置,否是可能通信失效

  • CLK2CS时间
    按datasheet设置,否是可能通信失效

  • CS2CS时间
    按datasheet设置,否是可能通信失效

  • SPI通信模式(同步 or 异步)
    从物理层面SPI通信都是同步机制,此处设置是设置软件层面的同步和异步通信模式:同步就是软件等SPI收发完成,才能执行其他命令;异步是软件发起SPI通信请求,由硬件(可能使用DMA)去搬运收发数据,收发完成产生中断,建议数据量较大的时候使用。

  • Buffer模式(IB or EB)
    IB为SPI内部寄存器Buffer,存储数据量较小
    EB为使用SysRAM存储Buffer,所有的SPI通信都可以设置为EB模式。

SPI EB配置参数

  • SpiChannel
  • SpiExternalDevice
  • SpiJob
  • SpiSequence

通常情况下下,上面几个配置组每块芯片配置一个组就可以,在使用的使用会使用Channel和Sequence的Index去设置和调用Spi函数。

遇到一些标准的代码厂商也会在一个ExternalDevice下配置多个Channel&Sequence,如Vector 的EEPROM模块,其实就是把SPI发送从芯片的寄存器和数据分开配置,实际上和所有的配置成一一对应的没有区别。

最后:如果需要可以私信我分享代码使用示例。

这篇关于《我的 Classic Platform AUTOSAR之路》 SPI介绍与EB配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/389068

相关文章

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

一文详解SpringBoot响应压缩功能的配置与优化

《一文详解SpringBoot响应压缩功能的配置与优化》SpringBoot的响应压缩功能基于智能协商机制,需同时满足很多条件,本文主要为大家详细介绍了SpringBoot响应压缩功能的配置与优化,需... 目录一、核心工作机制1.1 自动协商触发条件1.2 压缩处理流程二、配置方案详解2.1 基础YAML

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot配置Ollama实现本地部署DeepSeek

《SpringBoot配置Ollama实现本地部署DeepSeek》本文主要介绍了在本地环境中使用Ollama配置DeepSeek模型,并在IntelliJIDEA中创建一个Sprin... 目录前言详细步骤一、本地配置DeepSeek二、SpringBoot项目调用本地DeepSeek前言随着人工智能技

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实