Semidrive E3 MCAL SPI 模塊測試 (一)

一、測試環境

開發板

代碼包

示例 SPI

撥碼

SD103_E3_GATEWAY_EPOWERTRAIN_A03_041

MCAL3.0+PATCH 4676506

SPI7

1110


表 (1)



二、測試過程

1、原理圖


圖 (1)


圖 (2)

        開發板上貼 R1311、R1312、R1313、R1314;SPI7 的四個引腳引到 J2305.



2、Datasheet

Pin Name

MUX

Moudule

Function

Default

GPIO_S10

MUX3

SPI7

SS0

 

GPIO_S11

MUX3

SPI7

SCLK

 

GPIO_S12

MUX3

SPI7

MISO

 

GPIO_S13

MUX3

SPI7

MOSI

 


表 (2)來源:表 Pin Multiplexing of Digital GPIO Pins in Safety Domain



3、配置 MCAL

3.1、Mcu


圖 (3)

3.2、Port


圖 (4)


圖 (5)       


3.3、Spi


圖 (6)

SpiEbMaxLenth 等同於 spi_test.c 中的 SPI_BUFFER_SIZE_CHANNEL_x。

SpiChannel:

  • SpiChannId:全局唯一的數據 Buffer 識別號,配置過程必須保持這個編號連續且單調遞增,生成時會根據 BufferId 編號排序。
  • SpiChannelType:數據 Buffer 類型主要有兩種 IB 和 EB 區別和意義如下:

       IB:內部 Buffer,由 Spi 驅動內部定義生成對應的數組,用戶在數據傳輸前需先通過 WriteIB 接口將數據由用戶提供的內存區域拷貝到驅動內部的 Buffer 中,然後在數據傳輸完成後通過 ReadIB 將數據從 Spi 驅動內部拷貝到用戶目的內存區域。

       EB:外部 Buffer 這裡的外部概念強調是 Spi 驅動的外部,就是用戶定義的數據緩存區,數據傳輸前必須通過 Setup_EB 接口設置外部數據緩存區地址及長度信息;數據傳輸完成後接收到的數據已經直接存放在用戶指定的內存地址空間中,對比 IB 的類型的數據 Buffer 這裡少了 1-2 次數據拷貝操作,但是在使用異步傳輸時要求用戶提供的數據 Buffer 對應的內存空間在數據傳輸過程中不能有除了 Spi 驅動外的軟體寫入,要保證 Spi 驅動的獨占訪問,常見的錯誤使用方式是將數據 Buffer 定義在函數體內(棧上),當接口退出後棧會被其他的上下文使用此時就會出現競爭寫棧空間導致收發的數據錯誤。

       註:用戶層提供的外部 Buffer 需要注意地址對齊,使用 dma 模式時統一按 32 字節對齊;否則不使用 DMA 時按數據位寬對應對齊 4-8bits 按 1 字節對齊,9-16bits 按 2 字節對齊,16-32bits 按 4 字節對齊;並且即使不需要更新此 EB 通道的數據緩衝區地址,每次傳輸前都需要重新調用接口設置 EB Buffer 的地址信息---即使此時設置的地址可能每次都是相同的。

  • SpiDataWidth:

      傳輸的數據寬度,單位 bit。這裡需要說明的是內部在處理不同數據寬度的時候實際是還是按字節 4-8bits)、雙字節(9-16bits)、字(17-32bits 的方式來進行處理的,也就是對 EB 類型的數據 Buffer 而言,用戶也需要遵循這個規則;同一個SpiJob 下的所有數據 Buffer 的數據寬度都必須保持一致。

  • SpiDefaultData:

      默認發送數據,當用戶不配置時候默認為全 FF 值,具體取決於數據寬度配置。

  • SpiEbMaxLenth:

      僅當數據 Buffer 類型為 EB 時此選項有意義,其限制了這個數據 Buffer 允許傳輸的數據長度的最大值,實際傳輸過程傳輸的數據量可以小於這個值。

  • SpiNBuffers:

     僅當數據 Buffer 類型為 IB 時此選項有意義,其定義了這個數據 Buffer 的數據長度,實際傳輸時也永遠是這個長度。

  • SpiTransferStart:

      定義當前數據 Buffer 的 bit 序,LSB 為低 bit 優先反之為高 bit 優先;同一個 SpiJob 下的所有數據 Buffer 的比特順序都必須保持一致。

 

圖 (7)


圖 (8)


SpiExternalDevice:

  • SpiBaudrate單位 bps, 500000 就是 500Kbps,Master 模式最大支持到 25Mpbs@100M (當走線或對端 Slave 移出數據的時機偏晚時需要使能 Master 的 MISO 採樣延遲,以確保正確採樣 MISO 值),Slave 模式最大支持到 25Mbps@100M 最小 200K。

  • SpiCsPolarity:片選信號極性。

  • SpiEnableRx:是否使能接收。

       -  SpiHwUnit:指示此設備掛接在哪一路 SPI 控制器上 SPI1-SPI8 對應 CSIB1-CSIB8,當作為 Slave 時意義相同。

       -  SpiTimeClk2Cs:片選信號有效後延時多少秒(實際是以 sclk 的周期為單位)後再出 sclk 信號,對應通用概念建立時間,僅僅在使用硬體 CS 且作為 Master 模式此配置參數有意義。

  • SpiTimeClk2CsEnd:傳輸結束 sclk 信號停止後延時多少秒(實際是多少個 sclk 的 clk 周期)後再驅動片選信號取消片選,對應通用概念的保持時間,僅僅在使用硬體CS且作 Master 模式此配置參數有意義。
  • SpiCsViaGpio:當選擇通過軟體控制 GPIO 來驅動片選信號的情況下這裡需要配置,指定一個 GPIO 引腳作為片選信號的控制。當使用軟體控制 GPIO 來驅動片選信號時需要注意此時硬體 SS0 信號如果不特殊處理,可能會同時出現硬體驅動的片選信號 SS0 和軟體控制的 GPIO 兩個片選信號同時選中兩個外部設備從而導致通信衝突,特殊處理方式參 SpiCsPin 配置項說明。

  • SpiCsIdentifier:Spi 控制器支持四個 CS 引腳信號控制,使用 0-3 對應 SS0-SS3;當 SpiCsSelection 選擇 VIA_GPIO 時,此配置項無效,但要求配置為 0。

  • SpiDataShiftEdge/SpiShiftClockIdleLevel:配置 SPI 通信時序參考後續的表格。

  • SpiCsSelection:配置當前設備使用的 SPI 控制器硬體控制的片選信號還是軟體通過 GPIO 驅動的。


  • SpiCsPin:此項僅在 SpiEnableCs 為 true 且 SpiCsSelection 選擇 VIA_GPIO 時有效;這意味著當前 SPI 控制器的 SS0 引腳上同時接著另一個設備 A,此選項就指示 SS0 對應的引腳編號。其目的提供硬體 SS0 的引腳信息給當前設備 B,以使當前設備在傳輸時可以控制這個引腳以避免 SS0 引腳在當前設備 B 傳輸過程中被硬體驅動導致也設備 A 的片選有效,這樣就會導致同一個 SPI 總線上同時有不止一個外部設備的片選信號有效。例如設備 B 連接到 SPI1 SS0(GPIO_B0),並且 GPIO_A1 將被用作與設備 A CS 信號,因此在設備 A 的數據傳輸過程中,防止 SS0(GPIO_B0) 被硬體驅動導致設備 B 的 Cs 信號同時有效。也請參閱 SpiCsIdentifier 的描述。內部的處理辦法是此時將 SPI1 的 SS0 對應引腳的 CS 腳(GPIO_B0)PinMux 修改到 GPIO 上(斷開 PAD 和 SPI 控制器之間的連接),因此需要注意的是對設備B對應片選腳 (GPIO_A1) 和硬體片選信號 SS0(GPIO_B0) 在 Port 模塊的配置的初始電平和上下拉默認電平要能確保 CS 信號為無效狀態。

  • SpiEnableCs:僅在 SpiCsSelection 選擇 VIA_GPIO 是配置項才有效且表示當前 SPI 控制器的 SS0 腳在使用即 SS0 腳上有外接設備。

  • SpiMisoDelay:是否需要使能 MISO 接收,還有就是 MISO 的時延,因為有一些實際應用,會快一個時鐘信號採樣 MISO 信號,導致接收信號最後一位丟失。
  •  

    圖 (9)


    圖 (10)


    圖 (11)


    圖 (12)


    圖 (13)

     

    4、IAR

    Spi_test.c 函數結構:

    SPI_BUFFER_SIZE_CHANNEL                  

    fifo_init;fifo_show:static void fifo_init(void* addr,uint32 val,uint32 len,uint8 width),第二個參數是 SPI 的值,共 32 位無符號整型;

    Tc_spi_asny_03

    Tc_spi_async_03_less

    async_transmit_slave

    Tc_spi_async_loop_back

    Tc_spi_async_loop_back_early_cs_end

    spi_loop_demo

     Spi_test.c 默認不做更改。



    5、硬體連接


    圖 (14)

    LAP-C PRO(32128M) A0 連接 GPIO_S10 做 SPI7_SS0;

    LAP-C PRO(32128M) A1 連接 GPIO_S11 做 SPI7_SCLK;

    LAP-C PRO(32128M) A2 連接 GPIO_S13 做 SPI7_MOSI;

    LAP-C PRO(32128M) GND 連接 GPIO_S10 做 SPI7_GND;



    6、SPI 測試

    6.1、使用邏輯分析儀 LAP-C PRO(32128M)

    圖 (15)



    圖 (16) 一個 JOB 三個通道:channel_28,channel_29,channel_30

     

    一個片選內只有一個 JOB 的內容。

    channel_28:0010 1000 0010 1000 0010 1000 0010 1000

    channel_29:0010 1001 0010 1001 0010 1001 0010 1001

    channel_30:0011 0000 0011 0000 0011 0000 0011 0000

    一個時鐘周期內傳遞一個 bit 的數據。


    6.2、使用示波器(Tektronix MDO3054)

    圖 (17)


    圖 (18)

    SS0:gpio_s10->示波器通道 1

    SCLK:gpio_s11->示波器通道3

    MOSI:gpio_s13->示波器通道 2

     頻率 8M 如何計算得知:一個 bit 是 120ns,1/120ns≈8.333M。

     

    圖 (19)

    若 SpiChannel_28 的 SpiEbMaxLength 設為 4,則傳輸的數據是 2828=0010 1000 0010 1000。


    圖 (20)

     

    7、串口發命令

    Help->listcase->runcase 1800;



    圖 (21)

     

     

    注1:SPI 四種模式

    SpidataShiftEdge

    SpiShiftClockIdLevel

    Spi mode

    LEADING

    LOW

    MODE1

    TRAILING

    LOW

    MODE0

    LEADING

    HIGH

    MODE3

    TRAILING

    HIGH

    MODE2


    表 (3)

    MODE0:時鐘線空閒時低電平,第一個跳變沿(採樣點)在第一個 bit 的中間

    MODE1:時鐘線空閒時低電平,第二個跳變沿(採樣點)在第一個 bit 的中間

    MODE2:時鐘線空閒時高電平,第一個跳變沿(採樣點)在第一個 bit 的中間

    MODE3:時鐘線空閒時高電平,第二個跳變沿(採樣點)在第一個 bit 的中間

           注2:Spi 會根據 MCU 配置支持 1,3,5 三種數量的多核場景,默認不在 ResM 進行任何配置的情況下,Spi 工作在單核模式所有的資源劃分在 SF 核心上。當有需要將不同 Spi 控制器分在不同核心上時需要在 ResM 模塊中進行配置,詳見 《SemiDrive_E3_MCAL User Guide》。

     

     

    參考資料:

    《E3400&E3600 Series MCU Datasheet Release 00.16》

    《E3400&E3600 MCU Technical Reference Manual Release 00.12》

    《SD103_E3_REF_GATEWAY_ePOWERTRAIN_A02_絲印圖》

    《SD103_E3_REF_GATEWAY_ePOWERTRAIN_A02_SCH》

            《SemiDrive_E3_MCAL User Guide》,適用 MCAL PTG3.0 及後續版本




    歡迎在博文下方留言評論,我們會及時回復您的問題。如有更多需求,歡迎聯繫大聯大世平集團 ATU 部門:atu.sh@wpi-group.com

    作者:Rita Liu / 劉倩

    ★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

    ★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

    評論