By Adam Taylor
到目前為止的文章中,我們已經研究了MicroZed開發板上使用以太網的數據傳輸問題。我們還沒有涉及片上外設通信的問題:實時時鐘,非易失內存以及獨特的傳感器。這些通信涉及到I2C或者SPI總線。下面我們就來看看兩者:
SPI(串行外設接口)是一個原先由摩托羅拉半導體開發的串行、4線、全雙工接口。后來它發展成為一個工業標準,并且在模塊間通信中廣泛使用——比如在外設和處理器或有相同模塊的FPGA間傳輸數據中。SPI通信經常用在半導體內存、ADC、CODEC、MMC和SD內存卡上。SPI系統架構包括一個單一主機或多主機和一個或多個從機。
I2C(內部集成電路,通常發音為“I方C”)接口是一個多主機、2線的串行總線,由飛利浦公司于20世紀80年代開發,目的是開發出和SPI有類似作用的總線。由于2線的特征,其只有半雙工模式。它的優勢在于:你減少了2個管腳——在20世紀80年代,40管腳的DIP封裝就被認為“很大”了,在當時減少2個管腳起到的作用比如今可大的多了。I2C標準得以延續至今源于它的經濟和實用性。
Zynq SoC的PS(處理器系統)結合了兩個I2C和兩個SPI外設接口,其可以和MIO或者Zynq PL(可編程邏輯)上的EMIO接口,如下圖所示:
驅動和配置OLED顯示模塊是在ZedBoard上演示SPI使用的最佳范例。然而MicroZed板上并沒有OLED模塊,我們可以方便的使用一個Digilent OLED PMOD。我們所要做的僅僅是映射I/O管腳即可。
MicroZed板通過SPI總線和OLED模塊通信。然而它還需要一些其它的控制信號來正確地和設備接口:一個電源使能、OLED使能和一個數據/命令標志線。通信協議如下圖所示:
正確的驅動OLED需要以下管腳:
名稱 |
ZedBoard板管腳 |
功能 |
VDD |
U12 |
控制器PSU使能 |
VBAT |
U11 |
OLED PSU使能 |
RES |
U9 |
低電平復位 |
D/C |
U10 |
數據/控制(低電平) |
SCK |
AB12 |
SPI 時鐘 |
SDO |
AA12 |
SPI 數據 |
為了實現OLED顯示,我實例化了一個基于ZedBoard板的Vivado設計,使能SPI0,并且將其連接到EMIO,而不是GPIO。我也定義了四個GPIO EMIO管腳用作OLED的保留接口。
在下圖中可以看到這個:
在我們創建系統、輸出到硬件、開發軟件來控制我們的SPI應用之前,我們必須定義SPI時鐘頻率。該任務被Vivado和SDK分割了,因此我需要解釋必要的東西:
從模塊圖中打開Zynq處理器系統自定義界面,選擇“時鐘配置”。在基本時鐘標簽頁,處于IO外設之下,你會看到SPI時鐘。該選項使你擁有選擇鎖相環(本例中為IO PLL)、所需頻率和真實頻率的能力。在我的系統中,所需頻率和真實頻率分別是166MHz和160MHz。點擊“高級時鐘”顯示更多信息。
本例中為了獲得一個1600MHz的PLL頻率,IO鎖相環將33.333MHz的輸入時鐘頻率(顯示在圖中最上面)倍頻48倍,之后進行10分頻——如上表SPI外設時鐘行中的“First divisor”欄所示——來產生一個160MHz的SPI時鐘。選擇“重載”來更改這些數字。然而進行該操作的時候必須小心。結合波特率分頻器,我們在SPI配置寄存器中設置它,我們可以設置最適合目標外設的SPI頻率。以OLED為例,我們需要操作在3MHz以下,因此我們使用一個最小為64的分頻器來把160MHz降到3MHz。
本系列的下一期博客中將會研究相關的軟件開發。
現在,你可以方便地獲取第一Adam Taylor MicroZed開發板編年史Kindle電子書版本了,很實惠僅需7.5美元。
原文鏈接:
http://forums.xilinx.com/t5/Xcell-Daily-Blog/Adam-Taylor-s-MicroZed-ish-...