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


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

汽车电子嵌入式

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

评论
  • 【萤火工场CEM5826-M11测评】OLED显示雷达数据本文结合之前关于串口打印雷达监测数据的研究,进一步扩展至 OLED 屏幕显示。该项目整体分为两部分: 一、框架显示; 二、数据采集与填充显示。为了减小 MCU 负担,采用 局部刷新 的方案。1. 显示框架所需库函数 Wire.h 、Adafruit_GFX.h 、Adafruit_SSD1306.h . 代码#include #include #include #include "logo_128x64.h"#include "logo_
    无垠的广袤 2024-12-10 14:03 68浏览
  • 一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J
    北汇信息 2024-12-11 15:45 53浏览
  • 天问Block和Mixly是两个不同的编程工具,分别在单片机开发和教育编程领域有各自的应用。以下是对它们的详细比较: 基本定义 天问Block:天问Block是一个基于区块链技术的数字身份验证和数据交换平台。它的目标是为用户提供一个安全、去中心化、可信任的数字身份验证和数据交换解决方案。 Mixly:Mixly是一款由北京师范大学教育学部创客教育实验室开发的图形化编程软件,旨在为初学者提供一个易于学习和使用的Arduino编程环境。 主要功能 天问Block:支持STC全系列8位单片机,32位
    丙丁先生 2024-12-11 13:15 39浏览
  • 概述 通过前面的研究学习,已经可以在CycloneVGX器件中成功实现完整的TDC(或者说完整的TDL,即延时线),测试结果也比较满足,解决了超大BIN尺寸以及大量0尺寸BIN的问题,但是还是存在一些之前系列器件还未遇到的问题,这些问题将在本文中进行详细描述介绍。 在五代Cyclone器件内部系统时钟受限的情况下,意味着大量逻辑资源将被浪费在于实现较大长度的TDL上面。是否可以找到方法可以对此前TDL的长度进行优化呢?本文还将探讨这个问题。TDC前段BIN颗粒堵塞问题分析 将延时链在逻辑中实现后
    coyoo 2024-12-10 13:28 99浏览
  • 近日,搭载紫光展锐W517芯片平台的INMO GO2由影目科技正式推出。作为全球首款专为商务场景设计的智能翻译眼镜,INMO GO2 以“快、准、稳”三大核心优势,突破传统翻译产品局限,为全球商务人士带来高效、自然、稳定的跨语言交流体验。 INMO GO2内置的W517芯片,是紫光展锐4G旗舰级智能穿戴平台,采用四核处理器,具有高性能、低功耗的优势,内置超微高集成技术,采用先进工艺,计算能力相比同档位竞品提升4倍,强大的性能提供更加多样化的应用场景。【视频见P盘链接】 依托“
    紫光展锐 2024-12-11 11:50 35浏览
  • RK3506 是瑞芯微推出的MPU产品,芯片制程为22nm,定位于轻量级、低成本解决方案。该MPU具有低功耗、外设接口丰富、实时性高的特点,适合用多种工商业场景。本文将基于RK3506的设计特点,为大家分析其应用场景。RK3506核心板主要分为三个型号,各型号间的区别如下图:​图 1  RK3506核心板处理器型号场景1:显示HMIRK3506核心板显示接口支持RGB、MIPI、QSPI输出,且支持2D图形加速,轻松运行QT、LVGL等GUI,最快3S内开
    万象奥科 2024-12-11 15:42 54浏览
  • 全球知名半导体制造商ROHM Co., Ltd.(以下简称“罗姆”)宣布与Taiwan Semiconductor Manufacturing Company Limited(以下简称“台积公司”)就车载氮化镓功率器件的开发和量产事宜建立战略合作伙伴关系。通过该合作关系,双方将致力于将罗姆的氮化镓器件开发技术与台积公司业界先进的GaN-on-Silicon工艺技术优势结合起来,满足市场对高耐压和高频特性优异的功率元器件日益增长的需求。氮化镓功率器件目前主要被用于AC适配器和服务器电源等消费电子和
    电子资讯报 2024-12-10 17:09 82浏览
  • 习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习笔记&记录学习习笔记&记学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记录学习学习笔记&记
    youyeye 2024-12-10 16:13 102浏览
  • 时源芯微——RE超标整机定位与解决详细流程一、 初步测量与问题确认使用专业的电磁辐射测量设备,对整机的辐射发射进行精确测量。确认是否存在RE超标问题,并记录超标频段和幅度。二、电缆检查与处理若存在信号电缆:步骤一:拔掉所有信号电缆,仅保留电源线,再次测量整机的辐射发射。若测量合格:判定问题出在信号电缆上,可能是电缆的共模电流导致。逐一连接信号电缆,每次连接后测量,定位具体哪根电缆或接口导致超标。对问题电缆进行处理,如加共模扼流圈、滤波器,或优化电缆布局和屏蔽。重新连接所有电缆,再次测量
    时源芯微 2024-12-11 17:11 48浏览
  • 智能汽车可替换LED前照灯控制运行的原理涉及多个方面,包括自适应前照灯系统(AFS)的工作原理、传感器的应用、步进电机的控制以及模糊控制策略等。当下时代的智能汽车灯光控制系统通过车载网关控制单元集中控制,表现特殊点的有特斯拉,仅通过前车身控制器,整个系统就包括了灯光旋转开关、车灯变光开关、左LED前照灯总成、右LED前照灯总成、转向柱电子控制单元、CAN数据总线接口、组合仪表控制单元、车载网关控制单元等器件。变光开关、转向开关和辅助操作系统一般连为一体,开关之间通过内部线束和转向柱装置连接为多,
    lauguo2013 2024-12-10 15:53 70浏览
  • 我的一台很多年前人家不要了的九十年代SONY台式组合音响,接手时只有CD功能不行了,因为不需要,也就没修,只使用收音机、磁带机和外接信号功能就够了。最近五年在外地,就断电闲置,没使用了。今年9月回到家里,就一个劲儿地忙着收拾家当,忙了一个多月,太多事啦!修了电气,清理了闲置不用了的电器和电子,就是一个劲儿地扔扔扔!几十年的“工匠式”收留收藏,只能断舍离,拆解不过来的了。一天,忽然感觉室内有股臭味,用鼻子的嗅觉功能朝着臭味重的方向寻找,觉得应该就是这台组合音响?怎么会呢?这无机物的东西不会腐臭吧?
    自做自受 2024-12-10 16:34 136浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦