TC3xx芯片SPI模块详解

原创 汽车电子嵌入式 2024-09-09 06:38

前言

在《AUTOSAR-MCAL--SPI模块详解(一),AUTOSAR-MCAL--SPI模块详解(二),AUTOSAR-MCAL--SPI模块详解(三)》三文中详细介绍了AUTOSAR MCAL SPI模块的概念,且介绍了Renesas RH850 U2A-16芯片的SPI模块,但是没有介绍如何配置MCAL SPI模块。本文再次介绍Infineon TC3xx芯片QSPI模块,同时介绍MCAP SPI的配置。希望大家能搞清楚以下问题:

1.如何配SPI时钟

2.如何配置SPI外部连接Pin

3.如何配置SPI中断

4.如何配置SPI时序

5.如何计算SPI波特率

6.如何理解和设计Sequence, Job, Channel

7.如何理解EBIB

目录

注意:本文内容比较多,如果只是先快速使用TC3xx QSPI模块的朋友可以直接阅读第1和第4,5章节,遇到不理解的概念再去查阅2,3章节。

缩略词

简写

全称

SPI

Serial Peripheral Interface

BPI

Bus Peripheral Interface

FPI

Flexible Peripheral Interconnect (Bus protocol)

参考文献:

1. SPI详解

2. 英飞凌TC3XX MCAL QSPI实操指南 (qq.com)


注:本文章引用了一些第三方工具和文档,若有侵权,请联系作者删除!

正文

1.SPI硬件资源

1.1.SPI硬件单元

TC37x芯片总共有5SPI Unit/Module, SPI用作Master SPI时,SPI 0可以通过片最多选挂载14Slave SPI.


注意TC3xx芯片一个Master SPI最多可以挂载16Slave SPI.

1.2.SPI时钟

SPI模块需要两个时钟驱动,fSPBfPER, fPER也就是SPI章节中提到的fQSPI.


fSPB主要用来驱动SPIUser Interface相关的操作。


波特率由fPER频率除以等于或大于4的整数确定。



fSPBfPER都由时钟模块的CCU(Clock Control Unit)分频/倍频后提供。CCUCON0. SPBDIV来配置fSPB


CCUCON1. QSPIDIV来配置fQSPI也就是fPER


具体如何从外部晶振一步一步配置产生fSPBfPER可以参考《TC3xx芯片Clock System功能详解-时钟分配CCU》一文。


时钟控制寄存器CLC允许user根据应用程序的要求调整模块的功能和功耗。当模块内核连接到CLC时钟控制接口时,CLC控制模块的f<>模块时钟信号、睡眠模式和禁用模式。


1.3.SPI中断

每个SPI  Unit/Module可产生以下6个中断,Tx -Transmit FIFO interrupt, Rx-Receive FIFO Interrupt, ERR- Error Interrupt, PT-Phase transition interrupt, U-User Interrupt, MC-Move Counter Mode Interrupt.


Autosar OS上配置SPI ISRinterrupt Source时参考以下公式。


注意TC37x芯片手册的IR模块没有提供MC-Move Counter  Mode Interrupts的中断Sources计算公式,是TC37x不知此MC-Move Counter Mode Interrupt吗?


每个中断的产生机制看后文的模块功能介绍。


2.SPI模块功能概述

2.1. 摘要概述

用户通过User Interface可以配置SPI模块的配寄存器(比如和SPI时序相关的配置参数.eg.),同时也可以往SPI模块的Tx FIFO写数据以及从Rx FIFO读数据。SPI模块的QSPI State Machine拿到数据后根据配置寄存器中的配置参数按配置格式(时序,大小端.eg.)将数据发送到SPI总线上(MOSI),在收发数据的时候会更新SPI状态到状态寄存器,也会产生中断中断到IR模块。


2.2. 外部信号

两个SPI设备通过以下4个信号线进行连接通信:

. 串行时钟线 SCLK

. 主设备输出,从设备输入数据线MTSR(Master Transmit Slave Reveive)

. 主设备接收,从设备输出数据线MRST(Master Reveive Slave Transmit)

. 片选从设备线(SLS)


2.3. 操作模式

TC3xx芯片的SPI模块支持Master ModeSlave Mode配置,每种Mode下又支持全双工,半双工,单工模式。


下图为下又支持全双工,半双工,单工模式信号线连接。


2.4. 队列支持概要

TC3xx芯片的SPI模块叫做QSPI, 也就是队列(Queue SPI),那该怎么理解这个Queue的含义了?


AUTOSAR实战篇: 手把手带你搞定TC3XX芯片基于DMASPI实现 (qq.com)》一文中这么解释:TC3xxSPI模块内部存在队列相关的硬件机制,该队列主要体现在能够最大限度的提高寄存器与数据的统一配置


英飞凌TC3XX MCAL QSPI实操指南 (qq.com)》一文中这么解释:QSPI中的Queue指的是一块通用的内存,其中包含两种数据,分别为配置数据和传输数据,配置数据就是寄存器的配置,传输数据就是实际要发送的数据。


官方手册解释:队列机制使得片选信号激活后(CS线拉低),SPI帧的时序切换(两帧或多帧SPI报文的时序要求不一样)变得更加平滑舒展(comfortable)。用户铜鼓User Interface可以将配置和数据都带到TXFIFOQSPI而已跟踪哪个TXFIFO条目是配置,哪些数据是配置。QSPI模块期望通过一次移动(例如DMA移动)将32个基本配置位从某个片上通用RAM移动到TXFIFO。来自TXFIFO的这32个配置位(BACON)和QSPI模块中包含的8个配置扩展寄存器ECONzz=0-7)的配置位共同定义了模块的完整配置(见下图)。一个扩展寄存器用于两个从属选择:ECON0用于SLSO0SLSO8ECON1用于SLSO1SLSO9


个人理解:通过后文可以知道,QSPI给用户提供了所谓的DATA_ENTRY8BACON_ENTRY(也就是两类寄存器),用户往这两个寄存器中写配置或者数据时,QSPI的硬件机制就会将用户写入到配置或者数据存放到QSPITXFIFO中(共有432bitQueue Items),这个时候Queue就不为空,QSPI的硬件机制就会将配置数据写入到BACON寄存器中,将DATA放到Shift Register中开始数据发送,而发送数据的配置信息(时序配置)就存在BACON寄存器和ECON寄存器中。如果两次数据的发送的时序不同,通过QSPIQueue机制就能完成比较平滑的时序切换(比如TXFIFO中存放的内容为:BACON_0, DATA0, BACON_1, DATA1, 使用BACON_0的时序配置发送完DATA0后就能尽快且平滑的使用BACON_1的时序配置发送DATA1)。


2.5. 架构概览

TxFIFORxFIFO提供用户接口。移位寄存器和“混杂逻辑” 块构建了模块的状态机。“配置扩展”块提供了配置QSPI帧的全面功能。

 


3.SPI功能详细描述

3.1. 频域Frequency Domians

参考1.2章节


3.2. 主模式状态机Master Mode State Machine

在主模式下,QSPI模块生成时序、串行时钟和从设备片选信号。


3.2.1. 一次通讯循环下的各个相位Phases of one Communication Cycle

本节描述了配置QSPI通信相位长度的可能性:定时延迟、数据长度、占空比和数据采样。


QSPI帧开始于激活从设备片选信号SLSO(从idle phase切换到leading delay phase的切换点),QSPI帧结束于Disable从设备片选信号SLSO(从trailing delay phase切换到wait phase或者idle phase)。这是一个由五个阶段组成的序列:空闲延迟idle delay、前导延迟leading delay、数据段Data phase、尾随延迟trailing delay和可选的等待阶段wait phase. 空闲阶段分为两个相等长度的阶段:idle Aidle B.


下图显示了QSPI帧及其相位的完整和压缩视图。全视图显示了QSPI连接所需的所有四个信号。压缩视图以适合讨论其属性的方式在单行中表示相位。


QSPI的灵活时序控制允许在非常宽的时间范围内以足够的精度对每个相位进行编程。下图显示了压缩视图中具有不同相位长度的QSPI帧的一些示例。


使用寄存器BACON中的相应位域对相位长度进行编程。有四个主要的位域定义了以tQ为单位的相位长度,还有几个修饰符位字段定义其范围和粒度:


. IDLE

. LEAD

. DATA

. TRAIL


WAIT Phase只是一个等待写入Tx FIFO的循环,没有预定义的持续时间,因此没有定义的bit field.


IDLE位字段定义了长度相同的IDLEAIDLEB的两个子相位。在它们之间的转换处,设置/改变下一个从属设备的串行时钟信号的极性。

此外,灵活的时序控制允许对串行时钟的占空比和采样点属性进行编程。考虑到时钟不对称和环路延迟,这允许在一定程度上提高可实现的波特率。


ECONzz=0-7)位字段ABC定义了相应位段的长度。采样点始终位于相位BC之间的过渡处,时钟占空比由相位AB+C定义。



占空比控制的目的:


采样点控制的目的是允许以尽可能高的波特率可靠地接收从设备传输的数据。


Master设备接收方向上,Slave设备传输的数据相对于串行时钟的shift edge到达主设备的时间要晚得多。这是由循环延迟引起的,包括:


. 移位时钟沿从主时钟到从时钟的传播延迟

. 从设备的响应延迟

. 数据从从设备到主设备的传播延迟


最后但并非最不重要的一点是,灵活的时序控制允许配置移位时钟的相位和极性。

时钟极性由位字段ECONzz=0-7. CPOL配置。此位字段将时钟空闲极性设置为低或高。


时钟相位由位字段ECONzz=0-7.CPH配置。该位字段将初始时钟延迟设置为0或位段A,如位字段ECONzz=0-7. A所定义。


CPOLCPH设置控制主模式。从模式的时序固定为CPOL=0CPH=1,这些值必须在BACON.CS指向的ECONzz=0-7)寄存器中编程(programmed)。ECONzz=0-7.A, BC在从模式下不影响采样点,采样位于SCLKI的下降沿。


下图显示了时钟相位CPH=0QSPI时序。


当与从属设备通信时如果使用ECONzz=0-7.CPH=0,则该从属设备在用SLS信号选择后立即传递第一位的有效值。在这种情况下,帧中的第一个时钟边沿用于锁存第一个比特。第二个边沿传递第二个比特值,以此类推。帧中的最后一个边沿传递一个无所谓值的比特。

Trailing delay在数据块的最后一个移位时钟周期之后开始,随后是片选信号SLSO拉高,或者是连续模式下的新数据块。


注意:如果CPH=0,则片选信号SLSO拉低和串行时钟SCLKO的第一边沿之间的总延迟为LEAD+ECONzz=0-7.A.


下图显示了时钟相位CPH=1QSPI时序。


ECONzz=0-7. CPH=1用于与从属设备通信,该从属设备在用片选SLSO信号选择后立即传递具有随机或无关紧要值的比特。在这种情况下,从属设备使用帧中的第一个时钟沿来移出第一个有效数据位。第二个时钟沿锁存该位值,依此类推。帧中的最后一个时钟沿用于锁存最后一个有效的数据位,该数据位通常保持驱动状态,直到帧结束。

Leading delay持续在SLSO的有效边缘和第一移位时钟边缘之间。


注意:如果CPH=1,则SCLKO的最后一个边缘和片选信号SLSO最后拉高之间的总延迟为TRAIL+ECONzz=0-7.B+ECONzz=0-7.C


3.2.2 配置扩展

本节描述了配置QSPI通信相位的可能性:时序延迟timing delay、数据长度、范围和粒度ranges and granularity.


QSPI模块控制16个可单独编程的通信通道。每个通道都与一个片选信号以及相应的时序及其他属性(波特率、延迟、数据宽度、奇偶校验等)相关联。


QSPI模块的16个从属选择通道被细分为两组,每组8个:

. 通道07

. 通道815,通道8和通道0共用一个ECONz(0-7)的配置,通道9和通道1共用一个配置,以此类推。


3.2.3. 波特率和相位持续时间控制的详细信息

QSPI Phase对应于定义简单状态和循环序列的简单状态机的状态。由于通信周期的严格顺序性,一个定时器足以定义每个Phase的长度。每个Phase的长度以时间量(Time Quanta, TQ)定义,时间量的长度由时间量计时器定义。每个QSPI从设备信道都有自己的时间量长度,基于模块时间量长度:TPER时钟周期->一个模块时间量->一个信道时间量


每个QSPI模块生成一个模块时间量,该时间量进一步缩小到信道量。这会影响延迟和波特率。假设pad strength setting、电容性负载和相应的QSPI网络布局属性不允许连接到一个模块的不同从设备的波特率存在极端差异。它们都有相似的速度范围:高速、中速或低速。混合非常高速和非常低速的从属设备没有多大意义。许多从属设备在时钟和数据输出上产生高累积电容性负载,这会影响所有从属设备的可能波特率。通过改变每个信道中的比特段相位,一个模块的从属设备的波特率可以在6:1的范围内变化。每个从属设备额外的两位计数器允许额外缩放1248,使一个模块中通道之间的总比特时间变化达到48:1


根据TPER=1/fPER,每个QSPI从属选择通道都有自己的相位长度集:


3.2.4. 波特率和延时计算

信道的波特率生成链从一个通用的TQ分频器开始。专用QABC分频器使用由此产生的全局时间量来生成每个信道的波特率(从属选择)。


注意:必须满足以下条件:(Q+1*A+1+B+C>=4。或者,另一种表述方式是:比特长度必须至少为4*TQ.


活动信道(从属选择)的每个延迟都有一个单独且独立的分频器链,从四次幂的预分频器和一个n分频器开始。


3.2.5. 标准通信周期状态图

下图以分层方式显示了QSPI状态机的标准通信周期的俯视图。“数据”状态由几个“位”状态的循环组成,其中重复次数由数据宽度位字段定义。每个“位”状态都由一个简单的“a”、“B”和“C”状态序列组成。


仅当位BACON.LAST=1时,才执行包含所有阶段的完整(或标准)通信循环,从激活从属选择开始,到停用为止。否则,从属选择将保持活动状态,模块将等待更多FIFO数据条目。


Master模式下,相变中断事件PTI1PTI2,每个信号都表示一个相变,如下图所示。事件通过STATUS.PT1FSTATUS.PT2F标记。GLOBALCON1.PT1GLOBALCON1.PT2的值决定了哪些转换会导致事件。如果GLOBALCON1.PT1ENGLOBALCON1.PT2EN设置为1,这些事件也会导致中断。通过FLAGSCLEAR寄存器的编程清除事件标志。




上图中的“数据块”是指短数据或长数据块。在连续模式下连接数据块时,每个块可以根据其BACON配置独立配置为短或长。


3.2.6. 期望的相位

下图显示了QSPI状态机图中的EXPECT状态。这种状态可以在长数据模式和连续模式下进入,其中一帧由多个TXFIFO条目组成。其目的是监控FPI总线上的延迟。在这种情况下,根据BACON.DL,在一个FIFO条目被移出后,模块预计会有更多比特被移出DL,超时计数开始。如果预期的FIFO条目没有及时到来,则会发生超时。


如果在当前数据状态结束时,FIFO中已经有新数据可用,则EXPECT状态的持续时间为零。


如果在允许的时间窗口内的任何时间将下一个数据写入TXFIFO,则EXPECT状态的持续时间可以在零和编程上限之间的任何地方。在这种情况下,当前帧继续,SLSO信号保持有效。


如果数据没有及时到来,则EXPECT状态的持续时间恰好是最大的。然后,当前帧停止,但SLSO未停用。引发TO(超时)中断。状态机在循环中继续EXPECT状态,等待软件干预,在每个预期时间间隔后生成中断信号。


3.3. 从模式状态机Slave Mode State Machine

TC3xxMCAL只支持Master Mode, 且主芯片(MCU)一般都用作Master节点,Slave Mode这里就不作介绍,感兴趣的可以自己去研究下。


3.4. 操作模式Operation Modes

如果QSPI模块收到关闭时钟或暂停模块的请求,它将禁用所有服务请求。


QSPI模块提供了两种关闭时钟或暂停模块的选项:硬暂停(尽快考虑中断请求脉冲的长度)和软暂停(达到预定义状态后转换为暂停状态)。这些请求可以通过硬件信号(禁用、挂起、睡眠)或通过软件写入GLOBALCON. EN位来触发。


Disable, Pause and Run


通过清除CLC.DISR位,QSPI进入暂停状态。在这种状态下,可以初始化QSPI模块,预填充TXFIFO,然后通过设置GLOBALCON.EN位,进入RUN状态。


软件通过清除GLOBALCON. EN位请求运行模块的PAUSE状态。软件可以通过轮询GLOBALCON. EN=0STATUS. PHASE=0来检测QSPI模块是否已达到暂停状态。(表示等待状态,仅主模式)。


PAUSE状态下,模块的User Interface处于活动状态。寄存器和FIFO可以读写。然而,无论是在主模式还是从模式下,接收和发送状态机都处于非活动状态。这允许在不影响串行总线的情况下重新配置模块。


PAUSE状态的概念被重新用于处理软件OCDS挂起和睡眠请求。与主动暂停状态和OCDS暂停相比,睡眠状态具有特殊属性,即(由于低功耗要求)FPIQSPI时钟都关闭。


如果正在运行的模块收到暂停请求,它将等待帧的最后一个TRAIL阶段结束。对于所有模式(短、长和连续),暂停状态由GLOBALCON. EN=0STATUS.PHASE=0指示,仅主模式。


3.5. 用户接口User Interface

本节描述了使用发送和接收FIFO在片上RAM存储器和QSPI模块之间传输数据的可能性。QSPI具有一个4 x 32Tx FIFO和一个4×32Rx FIFO. 用于向Tx FIFO写入数据和配置以及从Rx FIFO读取数据和状态的地址范围由具有特殊属性的地址位置组成:


. Tx FIFO

      – DATA_ENTRY - writes to any of these eight functionally identical locations are always interpreted as data

    – BACON_ENTRY - writes to this location are always interpreted as configuration

     – MIX_ENTRY - writes to this location are interpreted as data or configuration, based on a set of rules


. Rx FIFO

    – RX_EXIT - reads from this location deliver either datum and optionally status, based on a set of rules.


使用MIX_ENTRYDATA_ENTRY/BACON_ENTRY组合发送帧。不要将DATA_ENTRY/BACON_ENTRYMIX_ENTRY组合在一起发送帧。


以下列表概述了QSPI的操作模式和TxFIFO条目地址的使用情况:


. Short Mode: MIX_ENTRY, DATA_ENTRY / BACON_ENTRY


. Long Mode: MIX_ENTRY, DATA_ENTRY / BACON_ENTRY


. Continuous Mode: MIX_ENTRY, DATA_ENTRY / BACON_ENTRY


. Single Configuration

  Multiple Frames: MIX_ENTRY


. XXL Mode: DATA_ENTRY / BACON_ENTRY


. Move Counter Mode: DATA_ENTRY / BACON_ENTRY


DATA_ENTRY其实就是一个寄存器,用户往这个寄存器立马写数据,硬件就会将数据传递到QSPITx FIFO中。


BACON_ENTRY其实也是一个寄存器,用户往这个寄存器立马写配置,硬件就会将配置传递到QSPITx FIFO中,硬件会将配置数据写入到BACON寄存器,在发送数据的时候按照BACON中的配置时序参数来发送数据。


RX_EXIT也是一个寄存器,QSPI通过Shift Register发送数据后又会将Slave Device的数据保存到Shift Register中,硬件又会将Shift Register中的数据保存到Rx FIFO中,Rx FIFO中更新了接收数据后,硬件又会将Rx Data保存到Rx EXIT寄存器,用户可以通过读Rx EXIT寄存器得到Slave Device的数据。


3.5.1. 发送和接收FIFOs

Tx_FIFO中填充了配置和数据条目,这些条目被分发到Tx_FIFO出口处的BACON和移位寄存器。TxFIFO跟踪条目是配置还是数据。控制和数据元素自动分配到BACON和移位寄存器。如果没有可用数据,则新BACON处于挂起状态。

如果一帧结束,FIFO中有数据,则:


. 如果是short mode, 新帧以与前一帧相同的配置自动开始。

. 如果是long mode, 额外的数据被忽略。


TXFIFO错误条件:

. FPI总线往 FullTXFIFO中写数据会产生溢出中断,写入数据被忽略。

. 在从模式下(GLOBALCON.MS=1X),在下溢的情况下,只传递“1”。


RXFIFO错误条件:

. 从空RXFIFO读取的FPI总线会产生下溢中断,并且只传递“1”位。

. 硬件尝试写入包含数据或状态的完整RXFIFO会产生溢出中断。RXFIFO会忽略写入尝试。

. 如果GLOBALCON.SRF位已设置,在主模式下FIFO满的情况下停止通信。在从模式下,该位被忽略,无法停止。

. 如果FPI总线频率非常低,波特率非常高,则可能会在移位寄存器和未满RXFIFO之间的途中丢失一些数据。在这种情况下,尽管RXFIFO未满,但会产生溢出中断。


Rx_FIFO可以填充状态和接收到的数据条目,具体取决于GLOBALCON.SI


注意:如果对TXFIFO条目地址执行8位或16位写入,则数据将1:1映射到其在32位宽TXFIFO条目中的位置,其余部分用零填充。



3.5.2. Short Data Mode

在短数据模式下,QSPI模块在一帧中传输长度为232位的单个数据。此模式由BACON.LAST=1BACON.BYTE=0定义。



传输周期由以下阶段组成:W_I_L_D_T。符号“?”表示该阶段是可选的(允许持续时间为0)。


例如,Tx_FIFO事件可用于触发一次DMA传输(由两次32位移动组成),将BACONDATA条目从片上RAM存储器传输到QSPI模块。



3.5.3. Long Data Mode

MCAL代码仅支持Continuous Data Mode, Long Data Mode暂不介绍,感兴趣的自己去研究。


3.5.4. Continuous Data Mode

在连续数据模式下,QSPI传输任意长度的数据流且激活从设备片选信号。它可以用于短数据和长数据。


此模式首先对包含BACON.LAST=0和第一个数据的控制字进行编程。通信继续进行,随后写入数据条目。该模式以包含BACON. LAST=1和最后一个数据的控制字结束。如果LAST=0,则TRAIL是数据块之间的延迟。显示W_I_L_D_T_D_T_D_D_T序列。每个“D” 代表BACON. DL定义的数据块。和BACON. BYTE(最多256位)。如果LAST=1,则TRAILtrailing延迟。



下图显示了使用短数据的连续数据模式的示例。这里,CPU通过将BACON写入BACON_ENTRY地址来启动流,然后DMA传输除最后一个BACONDATA之外的整个流。

下图显示了使用长数据的连续数据模式的示例。在这里,第一个BACON必须在每个数据块之后重复,但另一方面,整个传输可以仅使用MIX条目和一个DMA通道完成,无需CPU参与。通过使用长数据块,可以最大限度地减少由于不必要的额外BACON而导致的效率损失。



3.5.5. Big Endian Data Format

ECONzz=0-7.BE位域激活写入移位寄存器的数据字节的排列,并从移位寄存器读取到大端序格式并返回。


ECONzz=0-7.BE允许每个从设备在大端序和小端序之间切换(SLSO信号)。



将数据从小字节序转换为大端序和其他方式需要对数据字节进行相同的排列,如下图所示,一个排列块位于移位寄存器之前,一个位于移位寄存器之后,因此只能对数据进行排列,而不能对BACONSTATUS进行排列。


端序字节排列应仅用于16位和32位数据(及其倍数),而不适用于其他数据长度。


3.6. 中断 Interrupts

有几种类型的中断:


. 用户接口(user interface)相关的中断

-FIFO相关的中断


. 和移动引擎(Shift engine, 也就是state machine)相关的中

-Error中断

-Phase transition 中断


根据这种分类,以下是所有中断的完整列表:



3.6.1. 中断标志行为

事件标志的状态(低或高)不影响其事件信号的流动。如果事件反复发生,并且事件标志保持设置状态(如果未被软件中断处理程序清除),则中断标志(当中断赢得仲裁轮时,由硬件、ICU清除)将收到反复触发,并且该标志将始终保持设置状态。

3.6.2. TXFIFO中断产生

TXFIFO提供两种中断生成模式(Combined Mode是由两种中断生成模式组合的),由位字段GLOBALCON1.TXFM选择:


. Single Move Mode

. Batch Move Mode

. Combined Mode


RXFIFOTXFIFO可以彼此独立地使用中断生成模式。


Single Move Mode


单移动模式的目的是使TXFIFO尽可能满,一旦有空闲元素,就通过写入来重新填充TXFIFO


一个示例可能是使用单移动模式,DMA在每个TXFIFO中断时执行单移动。在此模式下,DMA保持TXFIFO满。每次执行对TXFIFO的写入时,都会触发DMA请求,并且至少有一个空元素可用。如果写入使TXFIFO满(不再有空元素),则不会生成中断以防止溢出。稍后,当移位寄存器(或BACON)从TXFIFO读取一个元素,使其未满时,它就会生成。


下图显示了TXFIFO的填充水平(filling levels),以及与触发TXFIFO填充中断的每个填充水平相关的事件。


为了在上电复位后启动重新填充中断的第一个链,软件需要对TXFIFO执行一次写入,或者在TXFIFO中断节点中设置中断标志。之后,(DMA)中断链是自我维持的,直到整个事务结束。


注意:在单移动模式下,多个软件写入或阻塞DMA移动将导致多个中断和(错误)事务丢失事件。因此,应避免使用这些动作——只应使用单次动作。


Infineon芯片的MCAL仅支持Single Move Mode, 这里就不再介绍Batch Move ModeCombined Mode, 感兴趣的可以自己去研究。


3.6.3. RXFIFO中断产生

RXFIFO提供两种中断生成模式(Combined Mode是由两种中断生成模式组合的),由位字段GLOBALCON1.RXFM选择:


. Single Move Mode

. Batch Move Mode

. Combined Mode


Single Move Mode

单移动模式的目的是通过尽快逐一获取接收到的元素,使RXFIFO尽可能保持为空。

一个示例是使用单移动模式,DMA在每个RXFIFO中断时执行单移动。在这种模式下,DMA尽可能地保持RXFIFO为空。每次执行从RXFIFO的读取时都会触发DMA请求,并且RXFIFO之后仍然不是空的。如果读取使RXFIFO为空,则不会生成中断以防止下溢。稍后,当移位寄存器(或STATUS)将新元素写入空的RXFIFO时,它会生成。


下图显示了RXFIFO的填充水平(filling level),以及与触发RXFIFO填充中断的每个填充水平相关的事件。


初始RXFIFO中断由移位寄存器在传递第一个接收到的元素后触发。之后,重新获取中断的DMA触发链是自我维持的,直到整个事务结束。在DMA事务结束时,由于读取RXFIFO中的最后一个元素不会触发中断,因此服务请求节点中没有服务请求保持活动状态。


注意:在单移动模式下,多个软件读取或块DMA移动会导致多个中断和(错误)事务丢失事件。因此,应避免使用这些动作——只应使用单次动作。


4.MCALSPI模块配置

关于MCAL SPI模块的详细介绍,请参考《AUTOSAR-MCAL--SPI模块详解(三)》一文。


配置MCAL SPI模块,除了SPI模块外还需要配置Port模块,OS模块,如果使用DMA还需要配置DMA模块。


4.1. 配置Port模块

比如,我们要配置SPI0:SCLK时钟信号,则需要配置P20.11(3)引脚。

4.2. 配置OS SPI相关中断

InfineonMCAL SPI支持以下中断:


配置OS中断,其中的Isr Interrupt Source需要计算,参考1.3.章节的计算公式即可。



4.3. 配置SPI模块

参考《英飞凌TC3XX MCAL QSPI实操指南 (qq.com)

跟之前的列举的其他模块一样,首先是General模块的配置,包括时钟源,SPI的模式,另外错误检测以及safety检测的关闭或者开启,可根据需求来设置



第二步则是配置SpiHwConfiguration模块,包括SPI内核的设置以及接收引脚的配置


第三步则是通道的配置,包括模式,数据长度,传输方向等


需要根据Slave设备的特性来配置Channel,一般来说Slave设备的DataSheet中规定了这些参数的(参考《》一文中L9301的SPI帧格式),Master Device需要按Slave Device规则来配置。如果Slave Device也是一个MCU/SOC,则需要双方来设计协议。



第四步则是波特率,片选通道、开环模式的配置



第五步则是上述提到的idle/trail等时间参数的设置

SpiDelayParams中的参数说明参考3.2.1章节,也就是配置SPI帧时序,这些时序一般也是来着Slave Device的DataSheet说明。



第六步则是Job或者Squence的配置

如果是一个Master Device挂载一个Slave Device,那么只配置一个Sequence + 一个Job + 一个Channel就能时序功能,如果一个Master Device挂载多个Slave Device就需要设计多个Sequence + 多个Job + 多个Channel了。SPI使用者需要深入理解Sequence,Job, Channel之间的关系。


4.4. 配置DMA模块

SPI可以使用DMC,也可以不使用,关于SPIDMA数据传送内容敬请期待


5.总结

本文1-3章节基本是TC3xx芯片手册上的内容翻译,为啥要这么辛苦的翻译一遍了?-- 不做笔记不读书,只有一行一行的阅读过,思考过才能窥探这个模块的全貌,不然总感觉不全。各位看官根据需要阅读即可,不必像作者一样这么纠结。


对于QSPI模块的使用者,其实只要弄清楚以下内容即可:


1.QSPI有多少硬件资源,实际项目具体使用的是哪个QSPI modle, 具体使用了QSPI module的哪些信号连接(MTSR, MRST, SCK, SLS具体使用哪些Pin)?

2.如何配置QSPI使用的Pin脚(Port模块)?

3.如何配置SPI的时钟?

4.如果配置QSPI帧的时序?

5.TXFIFORXFIFO的好处,以及用户如何使用TXFIFORXFIFO

6.QSPI会产生哪些中断,中断产生的时机是?


如果使用AUTSOAR MCAL SPI模块,着重要搞清楚SPI模块Chanel, Job, Sequence的逻辑含义:


1Channel对应1个发送缓冲区和1接收缓冲区;1Job对应着1SPI通讯发送的内容(既SPI一次片选过程所传输的内容)。1Sequence 对应着1SPI通讯序列(job序列)。多个Job可以分配给一个SequenceSPI通讯是基于Sequence触发的,即使发送1Job也要将该Job分配给1个队列,然后通过触发Sequence来实现Job的传输。


理解EBIB的含义:

EB: 外部缓冲通道。包含要传输的数据的缓冲区在SPI处理程序/驱动程序之外。

IB: 内部缓冲通道。包含要传输的数据的缓冲区位于SPI处理程序/驱动程序中。一般都是配置为Internally Buffer。


如果Master SPI只挂载一个Slave Device, 那么只设计一个Sequence,一个Job,一个Channel也可以完成SPI数据的发送及功能的实现。但是对于多个Slave Device且每个Device有不同的读写数据格式,就要设计多个Sequence, 多个Job, 多个Channel了。

涉及使用SPI的复杂驱动的时候,需要考虑:


1.AUTOSAR架构下MCAP_SPI模块的详细设计,着重理解ChannelJobSequency的概念,SPI异步发送过程,以及EBIB缓存的适用场景。


2.从具体芯片(RENESASNXPInfineon等)的SPI模块,主要了解芯片SPI模块的波特率配置、时钟配置、时序配置。


3. 具体外设芯片(L9301L936935584FS6522等),主要了解芯片的输入输出配置及功能,Pin定义,SPI帧结构、寄存器功能、时序要求。



End

「汽车电子嵌入式在CSDN上同步推出AUTOSAR精进之路专栏,本专栏每个模块完全按实际项目中开发及维护过程来详细介绍。模块核心概念介绍、实际需求描述、实际工程配置、特殊需求介绍及背后原理、实际工程使用经验总结。目的是让读者看完每一个章节后能理解原理后根据需求完成一个模块的配置或者解决一个问题。」


点击文章最后左下角的阅读原文可以获取更多信息


或者复制如下链接到浏览器获取更多信息

https://blog.csdn.net/qq_36056498/article/details/132125693


文末福利




1
.如需汽车电子嵌入式收集的学习文档,
后台回复“

资料

即可免费下载;

2.为便于技术交流,创建了汽车电子嵌入式技术交流群,可尽情探讨AP,CP,DDS,SOME/IP等前沿热点话题,后台回复“加群”即可加入;



注:本文引用了一些第三方工具和文档,若有侵权,请联系作者删除!


推荐阅读

汽车电子嵌入式精彩文章汇总第一期:20210530-20230703

汽车电子嵌入式精彩文章汇总第2期

汽车电子嵌入式精彩文章汇总第3期

【OS】AUTOSAR OS Event实现原理

【OS】AUTOSAR OS Spinlock实现原理(下篇)

【OS】AUTOSAR OS Spinlock实现原理(上篇)

CanNm处于PBS状态下接收到一帧诊断报文DCM会响应吗

TC3xx芯片CAN模块详解

AUTOSAR OS Alarm实现原理

AUTOSAR OsTask切换原理



End


欢迎点赞,关注,转发,在看,您的每一次鼓励,都是我最大的动力!

汽车电子嵌入式

微信扫描二维码,关注我的公众号

评论
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 89浏览
  • 车身域是指负责管理和控制汽车车身相关功能的一个功能域,在汽车域控系统中起着至关重要的作用。它涵盖了车门、车窗、车灯、雨刮器等各种与车身相关的功能模块。与汽车电子电气架构升级相一致,车身域发展亦可以划分为三个阶段,功能集成愈加丰富:第一阶段为分布式架构:对应BCM车身控制模块,包含灯光、雨刮、门窗等传统车身控制功能。第二阶段为域集中架构:对应BDC/CEM域控制器,在BCM基础上集成网关、PEPS等。第三阶段为SOA理念下的中央集中架构:VIU/ZCU区域控制器,在BDC/CEM基础上集成VCU、
    北汇信息 2025-01-03 16:01 193浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 166浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 97浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 71浏览
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 171浏览
  • 物联网(IoT)的快速发展彻底改变了从智能家居到工业自动化等各个行业。由于物联网系统需要高效、可靠且紧凑的组件来处理众多传感器、执行器和通信设备,国产固态继电器(SSR)已成为满足中国这些需求的关键解决方案。本文探讨了国产SSR如何满足物联网应用的需求,重点介绍了它们的优势、技术能力以及在现实场景中的应用。了解物联网中的固态继电器固态继电器是一种电子开关设备,它使用半导体而不是机械触点来控制负载。与传统的机械继电器不同,固态继电器具有以下优势:快速切换:确保精确快速的响应,这对于实时物联网系统至
    克里雅半导体科技 2025-01-03 16:11 181浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 85浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 94浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 79浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 48浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 75浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 111浏览
  • 在快速发展的能源领域,发电厂是发电的支柱,效率和安全性至关重要。在这种背景下,国产数字隔离器已成为现代化和优化发电厂运营的重要组成部分。本文探讨了这些设备在提高性能方面的重要性,同时展示了中国在生产可靠且具有成本效益的数字隔离器方面的进步。什么是数字隔离器?数字隔离器充当屏障,在电气上将系统的不同部分隔离开来,同时允许无缝数据传输。在发电厂中,它们保护敏感的控制电路免受高压尖峰的影响,确保准确的信号处理,并在恶劣条件下保持系统完整性。中国国产数字隔离器经历了重大创新,在许多方面达到甚至超过了全球
    克里雅半导体科技 2025-01-03 16:10 122浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦