SPI是一種高速的、全雙工、同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。 TI AM62x處理器擁有4路SPI以及1路QSPI,豐富的SPI接口可以同時接多個設(shè)備,飛凌OK6254-C開發(fā)板的NOR Flash就接在了OSPI(QSPI)總線上。
一、SPI的工作流程和時序 在介紹AM62x的SPI之前,我們先來了解一下SPI是如何工作的。通常SPI通過4個引腳與外部器件相連: MISO: 主設(shè)備輸入/從設(shè)備輸出引腳。該引腳在從模式下發(fā)送數(shù)據(jù),在主模式下接收數(shù)據(jù); MOSI: 主設(shè)備輸出/從設(shè)備輸入引腳。該引腳在主模式下發(fā)送數(shù)據(jù),在從模式下接收數(shù)據(jù); CLK: 串口時鐘,作為主設(shè)備的輸出,從設(shè)備的輸入; NSS: 從設(shè)備選擇。這是一個可選的引腳,用來選擇從設(shè)備。
SPI的工作流程是這樣的—— 主機先將NSS信號拉低,這樣保證開始接收數(shù)據(jù); 當(dāng)接收端檢測到時鐘的邊沿信號時,它將立即讀取數(shù)據(jù)線上的信號,這樣就得到了一位數(shù)據(jù)(1bit); 由于時鐘是隨數(shù)據(jù)一起發(fā)送的,因此指定數(shù)據(jù)的傳輸速度并不重要,盡管設(shè)備將具有可以運行的最高速度; 主機發(fā)送到從機時:主機產(chǎn)生相應(yīng)的時鐘信號,然后數(shù)據(jù)一位一位地將從MOSI信號線上進行發(fā)送到從機; 主機接收從機數(shù)據(jù):如果從機需要將數(shù)據(jù)發(fā)送回主機,則主機將繼續(xù)生成預(yù)定數(shù)量的時鐘信號,并且從機會將數(shù)據(jù)通過MISO信號線發(fā)送。
SPI工作時序圖如下:
![]()
二、AM62x中SPI總線的特點 在AM62x這款芯片中,TI將SPI的MISO與MOSI設(shè)計為d0和d1,哪一個作為輸入,哪一個作為輸出,是由設(shè)備樹中的ti,pindir-d0-out-d1-in= <1>來設(shè)置的。 默認這個屬性值為0,即d0是輸入,d1是輸出。當(dāng)為1時,d0為輸出,d1為輸入。 三、AM62x的SPI應(yīng)用 1. menuconfig配置 將這個該項選中,SPI驅(qū)動將編譯進內(nèi)核中。 makemenuconfi DeviceDrivers -> SPIsupport -> Usermode SPI device driver support
注:在飛凌OK6254-C開發(fā)板中,已經(jīng)將SPI驅(qū)動編譯進去。 2. 設(shè)備樹配置 01. 選擇需要使用的spi,這里我們用spi0,節(jié)點為&main_spi0; 02. 將該節(jié)點所用的引腳復(fù)用為相應(yīng)的功能。
![]()
03.描述節(jié)點的屬性,具體配置項的功能見注釋。
![]()
3、編譯燒錄 在源碼路徑下輸入以下命令:
![]()
沒有報錯即為編譯成功。 將源碼路徑下的image中的OK6254-C.dtb放到開發(fā)板的/boot目錄中,重啟開發(fā)板。 4. SPI測試 將spi0_D0和spi0_D1短接 重啟開發(fā)板后,在/dev目錄下看到多出兩個spidev設(shè)備。 使用我們的測試程序
![]()
四、總結(jié) AM62x上有著豐富的SPI資源,而SPI又可以作為許多設(shè)備的總線,這使得AM62x能夠接入許多SPI接口的設(shè)備。因此在那些對SPI有著比較多需求的應(yīng)用場景下,基于TI AM62x設(shè)計開發(fā)的OK6254-C開發(fā)板無疑是一個非常好的選擇。
|