[Note][Aurix2G_TC397_MCAL]SPI 相关配置

0 SPI

1 General

1.1 SpiDriver

SpiSystemClock
在MCU模块配置的系统时钟。主要参考McuQSPIFrequency和McuQspiClockSourceSelection

1.2 Spi General

SpiCancelApi
默认是禁用的

SpiChannelBuffersAllowed (0 -> 2)
用户可以决定采用哪一个buffer
0:内部buffer
1:外部buffer
2:内部外部都可以
默认是外部buffer

SpiInitDeInitApiMode
默认选择 SPI_MCAL_SUPERVISOR,因为driver的代码大多在supervisor下运行的

SpiMulticoreCheckEnable
多核检查是否开启。我理解是看driver是否是在单核还是多核上运行。

SpiInitCheckApi
默认关闭,如果APP有安全方面的需求和功能,则打开。

SpiRuntimeApiMode
决定运行时,采用什么模式。默认是SPI_MCAL_SUPERVISOR,理由同上。

SpiDevErrorDetect
决定开发时错误是否被检测。也就是DET。在debug的时候默认打开。

SpiSafetyCheckEnable
是否开启安全检查。默认关闭,但是如果APP有安全方面的要求,必须打开。

SpiHwStatusApi
决定 API Spi_GetHWUnitStatus是否启用。主要决定,是否app需要了解硬件的状态。

SpiInterruptibleSeqAllowed
默认关闭。决定是否可以中断序列。只有在SPI level 1or2时才有用。

SpiLevelDelivered
决定启用什么通讯驱动。

  1. L0:同步传输,也就是不适用DMA方式,只是采用CPU。
  2. L1:异步传输,采用DMA方式。
  3. L2:同时启用DMA和CPU两种方式。在异步的情况下,会支持轮询和中断模式。
    没啥默认值,看具体情况。

SpiSupportConcurrentSyncTransmit
决定是否开启并发的同步传输。也就是,如果一个内核已经在传输了,另外一个内核是否支持并发传输。
默认关闭的。
如果有多个QSPI,并发的同步的传输,那么就应该开启。

SpiSyncTransmitTimeoutDuration
同步传输的超时计数器,根据APP的要求配置。另外,所有的core都可以读取这个数据。

SpiVersionInfoApi
默认关闭。
如果app需要在运行时读取spi的版本号,就打开呗。

1.3 Spi Published Information

SpiMaxHwUnit
最大的SPI驱动外设数量。

2 SpiDemEventParameterRefs

在AUTOSAR SWS SPI Handler有描述

3 SpiMaxChannel

配置好的,最大的SPI通道数。根据后面的配置自动填上的。

4 SpiMaxJob

配置的总任务个数。也是根据后面的配置自动填上的。

5 SpiMaxSequence

配置的序列总个数。

6 SpiChannel

SPI 的通道配置

6.1 SpiChannelId

通道ID。
由于多核实例化,会分别生成物理上的和逻辑上的ID。逻辑通道ID是顺序增长的,但是在配置过程中,由于不同核心分配不同的通道,所以物理地址是不同的。

6.2 SpiChannelType

SPI 通道类型
IB = 内部buffer
EB = 外部buffer
默认是EB

6.3 SpiDataWidth

一次传输多少个bit。 默认8个

6.4 SpiEbMaxLength

定义外部buffer最大的长度。
如果启用 move counter模式,最大传输为8190
如果启用 frame based cs, 最大传输为16383
如果采用同步传输模式,不开启dma,最大传输为65535

6.5 SpiIbNBuffers

定义Ib通道的buffer大小。
默认是10。
小于8,就是8。8到15就是16。超过16,就是32. 所以buffer长度的生成会参考数据宽度。

6.6 SpiTransferStart

决定是先传输LSB(最低有效位),还是MSB(最高有效位)。
默认是LSB,因为大多数通讯设备都是LSB。

7 SpiExternalDevice

这里主要包含了外部设备(slave)的配置信息。

7.1 general

SpiBaudrate (9600 -> 50000000)
定义QSPI的通讯波特率。
默认是640k。当然实际需要根据需求速度配置。
芯片支持的范围和AUTOSAR的不一样。
Autosar最低是1hz,最大是无穷。
同时显然这个速率需要参考时钟。对于397,全双工最快33Mhz,单工就是50Mhz。

SpiCsIdentifier
这个参数指定了SpiHwUint指定的片选。范围是channel0~15

SpiCsPolarity
定义片选信号的极性。当然默认是低。

SpiDataShiftEdge
决定数据传输的时候,是参考上升沿还是下降沿。

SpiEnableCs
是否决定,外设,可以去选择芯片。
默认是可以让外设选择芯片的。

SpiHwUnit
对于这个spi外设,分配什么SPI的控制器去进行传输。
可以分配QPSI 05,其中04是可以被配置的。

SpiAutoCalcBaudParams
如果启用,就会根据波特率,自动计算出TQ、Q、A、B、C这些参数。

SpiIdleTime
这个是配置QPSI硬件在检测到SLSO之后的延时。
默认是1us

SpiTrailingTime
感觉可以理解为一次spi frame传递之后的间隔时间。
默认还是1us

SpiShiftClockIdleLevel
定义了clock的空闲等级。
HIGH、LOW可配置。

SpiTimeClk2Cs (0.00000004 -> 0.0001)
时钟和片选之间的最小时间。
默认是1us。
这个值的最小值要参考AURIX的硬件以及外设的实际情况推算出来的。

SpiParitySupport
是否选择对SPI传输的tx和rx进行奇偶校验。
默认是关闭的。

SpiInternalLoopBackSupport
开启以后,SPI的TX和RX可以在内部进行交互。这是为了测试的目的,实际通讯启用后,应该关闭这个功能。

7.2 SpiCsSelection

决定是用GPIO还是SLSO进行片选的。
默认是 CS_VIA_PERIPHERAL_ENGINE,也就是采用SLSO方式。

7.3 SpiCsGpio

GPIO片选的IO

7.4 SpiBaudrateParams

这里就是配置那个A B C Q TQ的参数的地方。前面如果选择了自动配置,就空着吧。

7.5 SpiDelayParams

和上面的类似,如果选择了自动生成,这里就不用配置了。

8 SPI JOB

一个spi的job必须包含一个channel。如果一个job需要多个channel,那么在这个job运行的时候,涉及到的channel,都具有相同的job属性。

这几个名字都非常直观,不作具体说明了。

9 SpiSequence

包含了对SPI 顺序的配置。一个sequence必须包含一个job。如果包含多个job的话,就会静态的连接他们。

9.1 General

SpiInterruptibleSequence
这个决定了,在一个sequence执行的时候,另外一个sequence是否可以中断它。
默认是关闭的

SpiSequenceId
id,默认是0.
同样考虑多核实例化的问题。

SpiSeqEndNotification
主要定义了,在sequence spi传输结束后,要执行的函数。

SpiJobAssignment
这里就罗列了,这个sequence需要执行的spi job

10 SpiMainFunctionPeriod

定义了SPI Main Function的调度周期。 默认是10毫秒

11 SpiHwConfiguration

SPI 硬件配置

11.1 General

SpiHwConfigKernel
决定采用哪一个内核id去实施QSPI

SpiJobQueueLengthQspix (0 -> 65535)
该参数是用来决定作业队列的大小。
SPI Job 队列和序列队列是循环队列。 理想情况下,队列大小应该是配置的最大作业

SpiSleepEnableQspix
决定当MCU发送睡眠请求的时候,QSPI是否会进入睡眠模式。

SpiHWPinMRSTQspix
对Master收,Slave发送的配置pin脚。

posted @ 2022-02-17 16:29  Yiyang_Cai  阅读(5357)  评论(0编辑  收藏  举报