SPI MCAL 配置及原理

概述

MCAL中的SPI处理程序/驱动程序旨在服务于通过SPI总线连接的设备的读写操作。它允许多个用户(例如EEPROM、看门狗和I/O ASIC)共享对SPI通信的访问权。同时,它还提供了必要的机制来配置片上SPI外设。

SPI,即串行外围接口,是一个四线同步串行接口。数据通信的启动依赖于片选线(CS)。数据的传输则通过三线接口实现,这包括用于串行数据输出的MOSI线、用于串行数据输入的MISO线,以及负责串行时钟同步的CLOCK线。这种配置使得SPI成为一个高效、灵活的通信协议,适用于各种外围设备与主控制器之间的数据传输。

SPI除了具备基本的通信功能外,还具备模式选择的特性,这使得它能够在不同的应用场景中灵活应对。

在下面的图示中,我们可以清晰地看到SPI的四种时序模式,同时,这些时序模式与CPOL和CPHA两个关键参数之间的关系也一目了然。

CPOL参数决定了SCK时钟信号在空闲状态下的电平状态。具体来说,当CPOL设置为0时,时钟信号在空闲状态下保持低电平;而当CPOL设置为1时,空闲状态下的时钟信号则保持高电平。

另一方面,CPHA参数则用于确定数据的采样时刻。当CPHA设置为0时,SPI会在每个时钟周期的第一个时钟沿进行数据采样;而当CPHA设置为1时,采样操作则会在每个时钟周期的第二个时钟沿进行。

这两个参数的灵活组合使得SPI通信能够满足不同的数据传输需求,实现更高效、稳定的数据交换。

MCAL配置详解

1.SPI Channel

SpiChannelId

通道ID,也可以理解成多个通道中某个通道的一个序号或者下标。

SpiChannelType:

通道类型,取决于SpiChannelBuffersAllowed参数
SpiChannelBuffersAllowed=0,选择IB.
SpiChannelBuffersAllowed=1,选择EB.
SpiChannelBuffersAllowed=2,IB或者EB.

SpiDataWidth:

SPI一次发送的数据长度

SpiEbMaxLength:

选择EB时,数据缓冲区的最大长度

SpiIbBuffers:

选择IB时,数据缓冲区最大数量

SpiTransferStart:

SPI发送数据的起始位,包括MSB和LSB,及低位在前还是高位在前。

2.SPI ExternalDevice

SpiBaudrate:

SPI的波特率。

SpiCsIdentifier :

这个参数是用于标识分配的芯片选择(Chip Select,简称CS)的符号名称。在SPI通信中,芯片选择(CS)或片选信号是一个控制信号,用于选择或激活特定的SPI从设备。当有多个SPI从设备与主控制器相连时,CS信号用于区分和选择每个从设备,以便主控制器可以与特定的从设备进行通信。

SpiCsPolarity  : 

片选信号的使能电平。

SpiDataShiftEdge :

选择采集的边沿,确认是上升沿还是下降沿进行采集的配置

SpiEnableCs:

使能片选

SpiHwUnit:

选择硬件接口

SpiAutoCalcBaudParams:

这个参数用于启用或禁用QSPI(Quad SPI,四线SPI)波特率参数的自动计算功能。如果此参数设置为ON(开启),那么硬件参数TQ、Q、A、B、C将根据SpiBaudrate(SPI波特率)自动计算得出。

SpiIdleTime:

在QSPI(Quad SPI)通信协议中,IDLEA和IDLEB时间是指QSPI接口在数据传输前后的空闲时间。这些空闲时间参数在QSPI通信中扮演着重要的角色,主要用于确保主设备(通常是微控制器)和从设备(如存储器)之间的同步和时序正确性。
IDLEA时间通常指的是主设备在发送命令或地址之前,以及在接收数据之后的空闲时间。这段时间允许从设备准备好接收新的命令或地址,或者在发送完数据后有一个短暂的休息时间。
IDLEB时间则是主设备在发送数据之后,以及在接收响应或状态之前的空闲时间。这段时间用于从设备处理接收到的数据,准备响应或状态信息,并确保在主设备开始接收之前数据已经准备好。

SpiTrailingTime:

Trailing Time,也称作尾随时间,是指在时钟信号的最后一个边沿与片选信号(CS)撤销之间的时间间隔。在SPI(Serial Peripheral Interface)通信中,Trailing Time也代表了SPI通道中数据元素之间的时间间隔。
在SPI通信协议中,时钟信号(SCK)用于同步主设备与从设备之间的数据传输。每个时钟周期,数据都会从主设备发送到从设备,或从从设备发送到主设备。Trailing Time是在一个数据传输周期结束时,从时钟信号的最后一个边沿(通常是下降边沿)到片选信号(CS)撤销之间的时间段。

SpiShiftClockIdlelevel:

这个参数定义了SPI移位时钟的空闲级别(SPI Shift Clock Idle Level)。在SPI通信协议中,移位时钟(SCK)用于同步主设备和从设备之间的数据传输。移位时钟的空闲级别指的是在数据传输的空闲或暂停期间,SCK信号线的电平状态。

SpiTimeClk2Cs:

这个参数用于定义在SPI(Serial Peripheral Interface)通信中,时钟信号(SCK)开始之前到片选信号(CS)激活之间的时间间隔。
在SPI通信中,片选信号用于选择特定的从设备,而时钟信号用于同步主设备与从设备之间的数据传输。前导时间是一个重要的时序参数,它确保在从设备被选中并准备接收数据之前,时钟信号已经稳定且处于正确的状态。

SpiParitySupport:

当选择了SpiParitySupport(SPI奇偶校验支持)时,SPI数据传输/接收会包含一个额外的位,根据选择将奇偶校验设置为偶数(EVEN)或奇数(ODD)。
奇偶校验是一种简单的错误检测方法,用于确保在传输过程中数据的完整性。在SPI通信中,当启用奇偶校验时,发送方会在每个数据字后面添加一个额外的位(奇偶校验位),使得整个数据字(包括奇偶校验位)中的1的个数为偶数或奇数,具体取决于所选择的奇偶校验类型。
  • 偶数奇偶校验(EVEN):整个数据字(包括奇偶校验位)中1的个数为偶数。
  • 奇数奇偶校验(ODD):整个数据字(包括奇偶校验位)中1的个数为奇数。
接收方在接收到数据后会重新计算接收到的数据字的奇偶性,并将其与发送的奇偶校验位进行比较。如果两者不匹配,则表明在数据传输过程中发生了错误。

3.SPI Job

SpiJobId:

SPI Job ID 是一个在 SPI API 函数中用作参数的标识符

SpiFrameBasedCS:

是否启用基于帧的片选功能。启用基于帧的片选功能时,SPI控制器或驱动器会自动处理片选信号的激活和撤销。当主设备开始发送或接收一个SPI帧时,片选信号会自动激活,以确保正确的从设备被选中。一旦帧的传输完成,片选信号会自动撤销,以便主设备可以与另一个从设备通信或进入空闲状态。

SpiJobPrioryty:

Spi 任务优先级。

SpiDeviceAssignment:

外部设备引用。这里引用的是SPI ExternalDevice中的eeprom Device

4.SPI Sequence

SpiSequenceId:

SPI Sequence ID(SPI序列ID)是在SPI API(应用程序接口)函数中用作参数的一个标识符。

SpiSeqEndNotification:

通知函数的引用

SpiInterruptibleSequence:

是否允许被另一个Sequence挂起。

SpiJobAssignment:

Spi Sequence对SpiJob eeprom的引用

5.SPI General

SpiCancelApi:

开启(ON)Spi_Cancel 函数意味着该函数是可用的,可以在需要时调用它来取消SPI通信。这通常在需要紧急停止当前操作或响应某些错误条件时使用。
关闭(OFF)Spi_Cancel 函数则意味着该函数不可用或被禁用。一旦关闭,即使调用该函数,它也不会执行任何操作或取消任何SPI通信。

SpiChannelbuffersAllowed:

0 - IB (Internal Buffer): 选择内部缓冲区(Internal Buffer,简称IB)。这意味着SPI通信将使用设备或处理器内部的缓冲区来存储和传输数据。内部缓冲区通常具有固定的大小和特性,并且由硬件或固件直接管理。使用内部缓冲区可以减少外部硬件或内存的依赖,但可能受限于其大小或性能。
1 - EB (External Buffer): 选择外部缓冲区(External Buffer,简称EB)。这表示SPI通信将使用外部内存或缓冲区来存储数据。外部缓冲区的大小和特性可以根据应用需求进行配置,提供了更大的灵活性和扩展性。然而,使用外部缓冲区可能增加系统的复杂性和潜在的延迟,因为数据需要在内部和外部缓冲区之间进行传输。
2 - Both: 选择同时使用内部和外部缓冲区。这种情况下,SPI通信可能根据具体的需求和条件动态地选择使用内部或外部缓冲区,或者同时使用两者。这种灵活性可能有助于优化性能、资源管理或错误处理。

SpiInitDeInitApiMode :

这个参数用于选择MCU(微控制器)初始化和去初始化API(应用程序接口)的操作模式。

SpiInitCheckApi :

是否启用API的初始化检查。

SpiRuntimeApiMode :

运行时API操作模式选择。

SpiDevErrorDetect :

开启或关闭默认错误追踪器(Det)的检测和通知功能。

SpiHwStatusApi :

开启或关闭 Spi_GetHWUnitStatus 函数
Spi_GetHWUnitStatus 函数通常用于获取SPI硬件单元的状态信息。这些状态信息可能包括SPI接口是否正在忙碌、是否发生错误、是否已准备好进行数据传输等。通过调用这个函数,开发者可以实时了解SPI硬件单元的工作状态,从而做出相应的控制或处理决策。

SpiInterruptibleSeqAllowed:

开启或关闭中断序列处理功能。

SpiLevelDelivered:

这个参数用于选择SPI处理器/驱动程序所提供的可扩展功能级别
LEVEL0(同步传输):在这种模式下,SPI驱动程序仅支持同步传输,这意味着发送和接收数据是顺序执行的,且发送一个数据块后会等待接收确认或完成信号再继续下一个操作。这种模式适用于对时序要求严格,且不需要并行处理多个传输任务的场景。
LEVEL1(异步传输):在这种模式下,SPI驱动程序支持异步传输,这意味着发送和接收数据是独立的,发送操作不会阻塞等待接收完成。这种模式适用于需要同时处理多个传输任务,或对响应时间有较高要求的场景。
LEVEL2(同步和异步传输):这是最高级别的功能,驱动程序能够同时处理同步和异步传输。这意味着它可以根据需要灵活地选择使用同步或异步模式,以满足不同的应用需求。这种模式适用于复杂的多任务环境,需要高效且灵活地管理SPI通信。

SpiSupportConcurrentSyncTransmit :

这个参数指定是否可以对不同序列的并发 Spi_SyncTransmit() 调用进行配置。
如果此参数允许配置并发调用,那么开发者可以根据应用的具体需求来决定是否允许并发传输。例如,在某些场景下,可能需要同时发送多个数据块到不同的SPI设备,以提高系统的吞吐量和效率。在这种情况下,允许并发调用是有益的。
然而,在某些其他场景下,并发传输可能会导致资源冲突、数据混乱或不可预测的行为。例如,如果SPI硬件不支持真正的并发传输,或者并发传输可能导致时序问题,那么禁止并发调用可能更为合适。

SpiSyncTransmitTimeoutDuration:

该参数用作等待单个数据元素传输/接收时的超时循环计数器。
这个参数定义了这样一个超时机制:当SPI驱动程序或函数正在等待单个数据元素的传输或接收完成时,它会使用一个循环来检查操作是否完成。每次循环,这个计数器就会递减。如果计数器减到零,但操作仍未完成,那么通常会触发一个超时错误,因为这意味着等待的时间已经超过了预期或可接受的阈值。

SpiVersionInfoApi :

开启或关闭 Spi_GetVersionInfo 函数。

SpiSystemClock:

Spi的系统时钟源

6.SpiHwConfigurationQspi

SpiHwConfigKernel:

标识关联的内核标志。

SpiJobQueueLengthQspix:

用于指定任务队列的大小。

SpiHWPinMRSTQspix :

主设备接收从设备发送的引脚配置。

SpiExternalDemux :

启用或禁用QSPI硬件的外部解复用器(demultiplexer)功能。
当启用QSPI硬件的外部解复用器功能时,QSPI接口能够通过外部解复用器与多个SPI设备进行通信。外部解复用器负责将QSPI接口的信号路由到不同的SPI设备,并管理它们之间的通信。这通常需要额外的硬件支持和配置,以确保正确的信号路由和同步。
相反,如果禁用外部解复用器功能,QSPI接口将只能与一个SPI设备进行通信,而无法同时与多个设备通信。这可能会限制系统的扩展性和功能。

SpiSLSO0StrobeDelay :

这个参数用于指定在外部解复用器模式下,为SLSO0配置的Strobe延迟。

PublishedInformation

SpiMaxHwUnit:

SPI处理器/驱动程序模块可处理和管理的不同SPI硬件微控制器外设(单元/总线)的数量,是指该模块能够支持并控制的SPI硬件接口的数量。

本文主要是基于参考芯片手册以及工作经验,以此作为我个人的学习记录。虽然我的理解尚不深刻,仍有许多疑惑之处需要深入探讨和改进。接下来,我会继续努力,不断实践和完善,以期取得更好的学习效果。

英飞凌MCAL(Microcontroller Abstraction Layer)是一种软件层,用于配置和管理英飞凌SPC5系列微控制器的外设和功能。MCAL提供了与硬件无关的API(应用程序接口),使开发人员可以简化系统的开发和集成。MCAL还提供了多个模块,包括时钟,GPIO(通用输入输出),CAN(控制器局域网),底层驱动程序等,以支持各种外设的配置和操作。 MCAL配置可以通过MCAL Configurator工具进行完成。该工具提供了一个用户界面,通过可视化界面和选项来配置和生成MCAL软件包。在MCAL Configurator中,用户可以选择需要的外设模块,如CAN,LIN(局域网),USART(通用同步/异步收发器)等,并进行相应的设置和配置。用户可以选择外设的参数设置,例如波特率,数据位和校验位等。此外,用户还可以通过MCAL Configurator设置中断和事件触发条件。 一旦完成MCAL的配置,生成的MCAL软件包可以被导入到集成开发环境(IDE)中,进一步用于应用程序的开发和编译。MCAL提供了一些API函数,可以在应用程序中调用来访问和操作各种外设。开发人员可以使用这些API函数来发送和接收CAN消息,读写GPIO引脚,进行串口通信等。 通过使用英飞凌MCAL,开发人员可以实现系统外设和功能的快速配置和集成,大大简化了系统开发的复杂性。MCAL的设计和功能使得开发人员能够更好地利用英飞凌SPC5微控制器的各种功能和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值