Autosar——MCAL SPI配置及使用学习笔记

本文详细介绍了SPI同步通信协议的基础概念,包括数据线、时钟信号、SPI特性(如MISO/MOSI/ClockPoarity/Edge),以及AutosarSPI中的Channel、Job和Sequence的定义。同时涵盖了SPI配置参数,如波特率、数据宽度、缓冲区管理和中断选项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 SP协议基础

        SPI是一个同步的数据总线,由单独的数据线和一个单独的时钟信号来保证发送端接收端的完美同步。

时钟是一个震荡信号,对数据线上的信号按规定进行采样。

数据的采样时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低)。具体看对SPI的配置。

SPI特性

SPI总线包括4条逻辑线:

        MISO:主机输入,从机输出。

        MOSI:主机输出,从机输入。

        SCLK:串行的时钟信号,由主机产生发送给从机。

        CS:片选信号,由主机发送,以便于控制与哪个从机进行通信,通常是低电平有效信号。

时钟极性Clock Poarity(cpol)

        CPOL可以配置未1或0,表示将时钟的默认状态(IDLE)设置为高或者低。

                CPOL = 0:时钟空闲为低电平0;

                CPOL = 1:时钟空闲为高电平1;

时钟相位Clock Phase(Edge)

        时钟相位:采集数据时是子啊时钟信号的具体相位或者边沿采样。

                CPHA = 0:在时钟信号SCK的第一个跳变沿采样;

                CPHA =1:在时钟信号SCK的第二个跳变沿采样;

具体情况如下:

Autosar SPI

专有名词

缩写含义
EB外部缓冲通道。包含要传输的数据缓冲区在SPI处理程序/驱动程序之外
IB内部缓冲通道。包含要传输的数据缓冲区位于SPI处理程序/驱动程序内部
ChannelSPI最小单元,其中可以配置传输长度,通道类型等等
Job一个Job是由一个或者几个相同的Chip Select(在Job处理期间不释放)的channel组成的。Job被认为是原子的,因此不能被另一个Job中断。Job具有指定的优先级。
SequenceSequence是要传输的连续Job的数量,但可以使用优先级机制在作业之间重新调度。Sequence传输是可中断的(被另一个Sequence传输),或者不依赖于静态配置。
LEVEL0简单同步SPI处理器/驱动程序:通信基于同步处理,采用FIFO策略处理多个访问。缓冲区的使用是可配置的,以优化和/或利用HW功能
LEVEL1基本异步SPI处理器/驱动程序:通信基于异步行为,并具有优先级策略来处理多个访问。缓冲区的使用是可配置的“简单同步”级别
LEVEL2增强的(同步/异步)SPI处理器/驱动程序:通信基于异步行为或同步处理,在执行期间使用可选择的中断或轮询机制,并具有优先级策略来处理多个访问。与其他级别一样,缓冲区的使用也是可配置的

 下图很好的说明了Channel,Job,Sequence三者之间的关系

一个JOB可以包含多个CS相同的channel,一个Sequence可以包含多个CS不同的JOB。

SpiDriver

       SpiDriver中需要配置时钟,其他都是自动生成的。

SpiChannel

SpiChannel ID

        autosar标准配置项,一般为自动生成。

SpiChannel Type

        选择通道类型,IB/EB。依赖于SpiChannelBuffersAllowed参数

                SpiChannelBuffersAllowed=0,SpiChannel Type应该为IB.

                SpiChannelBuffersAllowed=1,SpiChannel Type应该为EB.

                SpiChannelBuffersAllowed=2,SpiChannel Type可能是IB或者EB.

Spi Data Width:

        该参数表示数据单元的宽度,需要根据实际通信需求更改。

Spi Deault Data:

        当(对于内部缓冲区或外部缓冲区)传递Spi_WriteIB(对于内部缓冲区)或Spi_WriteEB(对于外部缓冲区)的指针为NULL时,传输的默认数据。

Spi Eb Max Length:

        在选择EB为通道的情况下,此参数仅包含数据缓冲区的最大大小(数据元素数量)。

SpiNBuffers:该参数用于设置IB模式下的最大数据缓冲区数量

Spi Transer Start:

        此参数定义传输的第一个起始位。LSB-低位传输,MSB-高位传输,具体根据应用场景。

SpiExternalDevce

SpiExternalDevice:通信外部设备的设置。与SpiJob密切相关,会被SpiJob引用。

Spi Baudrate:

        配置波特率。

Spi Chip Select Identifier :

        此参数是标识分配给该Job的Chip Select (CS)的符号名称。CS信号如果没有在spi中配置,也可以直接通过配置PORT实现。

Spi Chip Select Polarity  :

        配置片选信号的激活时的电平。

Spi Cs Selection:

        当芯片选择处理或者被启用时(参照SpiEnableCs),那么这个参数指定芯片选择是由外设HW引擎自动处理还是通过Spi驱动程序的通用IO处理

        一般都会选择CS_VIA_PERIPHERAL_ENGINE,除非对应的IO被异常占用。

Spi Data Shift Edge :

        此参数定义SPI数据移位边缘。数据可以在移位时钟的前沿或后沿上移位

对于一个时钟周期内,有两个edge,分别称为:

(1)Leading edge=前一个边沿=第一个边沿,对于开始电压是1,


那么就是1变成0的时候,对于开始电压是0,那么就是0变成1的时候;


(2)Trailing edge=后一个边沿=第二个边沿,对于开始电压是1,


那么就是0变成1的时候(即在第一次1变成0之后,才可能有后面的0变成1),
对于开始电压是0,那么就是1变成0的时候

在SPI协议中,有类似的定义为CPHA

        CKPHA (Clock Phase) = CPHA = PHA = Phase = (时钟)相位

**不太一样的是,SpiDataShiftEdge是指的数据传输,CPHA指的是数据采样。**不过一个确定后,另外一个边沿也就跟着确定了。

Spi Enable Cs  :

        启用或禁用Chip Select处理功能。如果该参数被启用,那么参数SpiCsSelection进一步详细说明了芯片选择的类型。

Spi Shift Clock Idle level :

此参数定义SPI移位时钟空闲电平,在spi中一般又称为极性CPOL。

Spi Time Clk 2 Cs:

时钟与芯片选择CS之间的计时(以秒为单位),该配置需要参考具体的外设使用。

Spi Cs Continous  :

该字段决定在帧传输之间保持芯片选择Asserted,仅在Master模式下有效。

Spi Byte Swap  :

在发送和接受数据时启用每个32位字的字节交换。

Spi Pin Config  :

配置在1位传输期间用于输入和输出数据的引脚。如果执行2位或4位传输,引脚配置字段必须为00-SIN_INPUT_SOUT_OUTPUT:SIN用于输入数据,SOUT用于输出数据。-SIN_INPUT_OUTPUT:SIN用于输入和输出数据SOUT_INPUT_OUTPUT:SOUT用于输入和输出数据。-SOUT_INPUT_SIN_OUTPUT:SOUT用于输入数据,SIN用于输出数据。

SPIJob

SpiJobEndNotification

        此参数是通知函数的引用。

                如果配置了Notification,则在job结束后会调用对应的函数

Spi Job Id

一般自动生成id

Spi Job Priority  

根据SPI093设置优先级:0,最低,3,最高优先级

Spi Device Assignment  

        关联对应的 external device

SpiChannelList

配置job中的channel,一个job至少有一个channel.

SpiSequence

Spi Interruptible Sequence 

        此参数允许或不允许此序列被另一个序列挂起。

依赖:这个SPI_INTERRUPTIBLE_SEQ_ALLOWED参数被配置为ON。

SpiSeqEndNotification

        此参数是通知函数的引用。

Spi Sequence ID 

一般自动生成此参数。

SpiJobAssignment

配置关联的job

SPIGeneral

SpiLevelDelivered

SpiLevelDelivered为0(LEVEL0):驱动程序仅处理所有可用SPI总线(QSPIx)上的简单同步传输
SpiLevelDelivered为1(LEVEL1):驱动程序仅处理所有可用SPI总线(QSPIx)上的简单异步传输
SpiLevelDelivered是2级(LEVEL2):LEVEL2是驱动程序的增强行为,将处理同步和异步传输

一般都配置为2

SpiChannelBuffersAllowed

选择允许和传递的SPI处理器/驱动程序通道缓冲区使用情况

Spi Transmit Timeout Clock Reference* 

参考CPU时钟源配置,该配置设置为MCU驱动程序配置。

此CPU时钟源用于配置SpiTransmitTimeout中的Timeout值(以微秒为单位)

用于等待TX/RX传输完成一帧。

Spi Transmit Timeout

用于等待TX/RX传输完成一帧的超时值(微秒)。

如果芯片在此超时期间不能完全传输一帧,则传输将不成功。

这个值的精度很低,它必须大于完全传输一帧所需的时间。

Spi Global Dma Enable

对于每个spi单元,可以配置一种传输方法:FIFO或DMA。

如果选中,则允许在传输过程中使用DMA模块。

如果未选中,所有spi单元将使用FIFO传输模式。

SpiInterruptibleSeqAllowed

打开或关闭可中断序列处理功能

SPI_LEVEL_DELIVERED需要配置为1或者2,sequence中也有对应的配置SpiInterruptibleSequence

SpiHwStatusApi

选择是否开启Spi_GetHWUnitStatus函数,此函数返回指定SPI硬件微控制器外围设备的状态

Spi Cancel Api 

打开或关闭Spi_Cancel功能

SPIHwUnit

Spi Hw Unit  

逻辑SpiHWunit到物理FCSPI_[0|1|2|3|4|5|6|7]的分配。这取决于芯片版本中存在的单元数量。

Spi Hw Unit Mode  

在SPI_MASTER和SPI_SLAVE模式之间进行选择。

Spi Sync Or Async

特定于此HwUnit是否只能进行同步传输。

如果为true,则此硬件单元仅用于同步传输。

如果为false,则此硬件单元仅用于异步传输。

False仅在SpiGeneral/SpiLevelDelivered为1或2时适用,true仅在SpiGeneral/SpiLevel Delivered为0或2时才适用。

Spi Hw Unit Clock Ref 

选择时钟源

PublishedInformation

主要适应一些autosar规范以及软件版本号

总结

本文主要根据参考芯片手册,作为本人学习思路路线,自己理解也不很深刻,还有很多疑惑的地方需要改进,不过有想法就是第一位,干就完了。

若你觉得本文对你有帮助或者有错误需要改进,欢迎点赞,关注,收藏,以便咨询方便修改。

        

        

        

        

### Autosar SPI 配置使用教程 #### 1. 概述 SPI (Serial Peripheral Interface) 是一种同步串行通信接口,广泛应用于嵌入式系统中。在 AUTOSAR 环境下配置 SPI 接口涉及多个模块之间的协作,包括 ECU 资源管理器(ECU Resource Manager)、微控制器抽象层(MCAL)中的 Spi_Ip 和其他相关驱动程序。 #### 2. MCAL 层面的 SPI 配置 为了实现对 SPI 的控制,在 MCAL 层面上需要定义具体的硬件参数以及初始化设置。对于 TC39x 平台而言,当采用不同的驱动模式时支持的最大时钟频率会有所差异;例如,在 Strong driver sharp 或者 Strong driver Medium 模式下的传播延迟时间为 50ns,即最高可达 20 MHz 的工作频率;而在 Medium driver 模式下则为 160 ns,相当于约 6.25 MHz 的速率[^2]。 ```c // 定义 SPI 控制器实例 #define SPI_INSTANCE_0 STD_ON // 设置 SPI 工作模式和波特率等参数 static const Spi_ConfigType SpiConfigSet[] = { { .channelId = 0, .spiMode = SPI_MASTER, /* 主/从模式 */ .baudRate = 20000000UL, /* 波特率为 20MHz */ ... }, }; ``` #### 3. 上层软件组件集成 除了底层驱动外,还需要通过 RTE (Run-Time Environment) 将这些功能暴露给上层应用或其他 SWC (Software Component),以便于调用相应的 API 进行数据传输操作。 ```xml <!-- 在 ARXML 文件中声明 SPI Client --> <CLIENT-SERVER-INTERFACE> <SHORT-NAME>SpiIf</SHORT-NAME> <!-- ... --> </CLIENT-SERVER-INTERFACE> <!-- 绑定到特定通道 --> <PORT-PROTOTYPE> <SHORT-NAME>Com_SpiChannel0</SHORT-NAME> <COMMUNICATION-DIRECTION>OUT</COMMUNICATION-DIRECTION> <TYPE-TREF DEST="CLIENT-SERVER-INTERFACE">/SwcTypes/SpiIf</TYPE-TREF> </PORT-PROTOTYPE> ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值