當前位置:
首頁 > 最新 > 為Zynq SoC和Zynq UltraScale+MPSoC實現SPI介面

為Zynq SoC和Zynq UltraScale+MPSoC實現SPI介面

Arty Z7之乾貨一籮筐

這次我們拿來講講如何為Zynq實現SPI介面

最近,Digilent開源技術社區收到了兩個關於如何在Zynq SoC和Zynq UltraScale + MPSoC上實現SPI介面的問題。在回答了這些問題之後,我認為有必要寫一篇如何實現SPI的文章,在此分享。

當我們在設計中使用Zynq SoC或Zynq UltraScale + MPSoC時,可以有兩種方法來實現SPI介面:

使用PS端的SPI控制器(PS端有兩個SPI控制器)

在PL端使用配置成標準SPI通信的AXI Quad SPI (QSPI) IP模塊

我們可以根據應用的要求來選擇使用哪種方法實現SPI控制器。兩種SPI的實現方式都支持四種SPI模式,並且都可以作為SPI主設備或SPI從設備。下表列出了它們之間的一些差異:

首先,我們演示一下如何使用PS端的SPI控制器進行SPI傳輸。在Zynq MIO configuration選項卡中選中SPI控制器,這就將SPI包含在了設計中。在這個例子中,我將把SPI信號連接到DigilentARTY Z7開發板的SPI介面,這需要通過PL I/O使用EMIO。

圖:啟用SPI並將埠映射到EMIO

在選擇好相應的選項後,唯一要做的就是連接SPI埠的I/O。具體要如何進行連接取決於我們是需要配置一個SPI主設備還是從設備。在SPI控制器上,每個SPI埠都有對應的可用輸入(xxx_i)輸出埠(xxx_o)。埠的正確連接十分關鍵,如果連接錯誤,當運行應用程序時,將得到完全錯誤的運行結果,這可能需要花費我們幾個小時的時間來尋找問題的源頭。另外,當配置成SPI從設備時,有一個名稱為Slave Select的輸入;而當用作SPI主設備時,將有三個選擇引腳。

當正確配置好I/O並創建了工程,我們就可以使用應用軟體中的SPI配置選項將SPI控制器配置成為主設備或從設備。使用PS SPI控制器配置和傳輸數據,需要使用由XSPIps.H定義的BSP(板卡支持包)所提供的API介面。在第一個例子中,我們將SPI控制器配置為SPI主設備。

默認情況下,SPI使用8位傳輸。但是,我們也可以將傳輸配置成更大的16或32位。對於8位傳輸,我們在C程序中可以使用u8數據類型。對於16位或32位傳輸,分別使用16位或32位對數據進行讀寫緩存。

一開始,這可能會導致一些問題或生成編譯器警告,因為執行如下所示的兩個數據傳輸API函數都需要發送和接收緩衝區的數據類型為u8:

s32 XSpiPs_Transfer(XSpiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, u32 ByteCount);

s32 XSpiPs_PolledTransfer(XSpiPs *InstancePtr, u8 *SendBufPtr, u8 *RecvBufPtr, u32 ByteCount);

為了解決使用u16和u32數據類型的問題,我們需要將緩衝區轉換為u8指針,如下所示:

XSpiPs_PolledTransfer(&SpiInstance, (u8*)&TxBuffer, (u8*)&RxBuffer, 8);

這樣設置將就使得我們能夠傳輸大小為8,16或32位的數據了。為了演示這一設置,我將SPI主設備IO連接到DigilentDigital Discovery口袋儀器來測試傳輸的數據。在應用軟體中使用上述方法將數據寬度從8位變為16位。

圖:Arty Z7開發板與Digital Discovery口袋儀器

圖:Zynq SoC PS SPI主設備發送四個8位字

圖:PS SPI主設備發送四個16位字

另一個實現SPI介面的方法是使用AXI QSPI IP核,使用這種方法需要在Vivado中進行的設置比較多,需要花費比較長的時間。在AXI QSPI配置對話框中,我們可以配置傳輸的寬度、頻率和從設備的數量。最重要的一個選項就是選擇AXI QSPI IP核是作為SPI主設備還是從設備。如果要配置成SPI主設備,就必須選中enable master mode選項。如果要配置成為從設備,則必須取消該選項以確保SPISel輸入引腳的存在。當SPI IP核作為從設備時,該引腳需要連接到主設備的slave select.埠。

圖:配置AXI Quad SPI

與PS SPI控制器一樣,BSP也為SPI IP提供一個API介面。我們可以用它來開發應用軟體,這個API是在文件XSPI.h中定義的。作為例子的第二部分,我將使用這個API來配置AXI QSPI作為SPI從設備。

為了演示創建軟體後AXI QSPI核可以正確的以SPI從設備方式進行工作。我再次使用DigilentDigital Discovery口袋儀器作為SPI主設備,使數據在兩者之間傳輸。

圖:SPI從設備收發數據(藍色的數據由Zynq SPI Slave輸出)


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FPGA開發圈 的精彩文章:

TAG:FPGA開發圈 |