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
決定啟用什么通訊驅動。
- L0:同步傳輸,也就是不適用DMA方式,只是采用CPU。
- L1:異步傳輸,采用DMA方式。
- 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腳。