一、SPI總線基本概念
SPI ( Serial Peripheral Interface ———串行外設接口) 總線是Motorola 公司推出的一種同步串行接口技術。SPI 總線系統是一種同步串行外設接口, 允許MCU 與各種外圍設備( 如閃存、數摸轉換、網絡控制器、從MCU) 以串行方式進行通信、數據交換。
SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節約了芯片的管腳,同時為PCB 的布局上節省空間,提供方便,正是出于這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議。其工作模式有兩種:主模式和從模式。SPI 是一種允許一個主設備啟動一個從設備的同步通訊的協議,從而完成數據的交換。
也就是SPI 是一種規定好的通訊方式。這種通信方式的優點是占用端口較少,一般4 根就夠基本通訊了(不算電源線)。同時傳輸速度也很高。一般來說要求主設備要有SPI 控制器(也可用模擬方式),就可以與基于SPI 的芯片通訊了。
二、SPI總線系統結構
SPI 系統可直接與各個廠家生產的多種標準外圍器件直接接口, 一般使用4 條線: 串行時鐘線(SCK) 、主機輸入/ 從機輸出數據線SDO、主機輸出/ 從機輸入數據線SDI 和低電平有效的從機選擇線SS。SDI 和SDO 用于串行接收和發送數據,數據高位在前低位在后。在SPI 設置為主機方式時,SDO 是主機讀從機,SDI 是主機寫從機。SCK 用于提供時鐘脈沖將數據一位位地傳送。SPI 總線器件間傳送數據框圖如圖1 所示。
三、SPI總線的接口特性
利用SPI 總線可在軟件的控制下構成各種系統。如1 個主MCU 和幾個從MCU、幾個從MCU 相互連接構成多主機系統(分布式系統)、1 個主MCU 和1 個或幾個從I / O 設備所構成的各種系統等。在大多數應用場合,可使用1個MCU 作為主控機來控制數據,并向1 個或幾個從外圍器件傳送該數據。從器件只有在主機發命令時才能接收或發送數據。其數據的傳輸格式總是高位(MSB)在前,低位(LSB)在后。
當一個主控機通過SPI 與幾種不同的串行I / O 芯片相連時,必須使用每片的允許控制端,這可通過MCU 的I / O 端口輸出線來實現。
但應特別注意這些串行I / O 芯片的輸入輸出特性:首先是輸入芯片的串行數據輸出是否有三態控制端。平時未選中芯片時,輸出端應處于高阻態。若沒有三態控制端,則應外加三態門。否則MCU 的MISO端只能連接一個外設。其次是外設的串行數據輸入是否有允許控制端。
因為只有在此芯片允許時,SCK 脈沖才把串行數據移入該外設;在禁止時,SCK 對外設無影響。若原來沒有允許控制端,則增加控制門;當然,也可以在SPI 總線上只連接1 個外設,就不必用允許控制。
通過前文的原理介紹,我們已經對SPI 總線的特性以及工作原理有了大致地了解,但當我們拿到一個SPI 總線器件時要正確地應用它,還是一時不知如何下手,比如我們現在要想把一個具體的數據存儲放器件中去,需要怎么辦呢?現在,我們來一起看一個數據存儲的例子,通過一個實例,相信會給大家帶來一個感性的認識,下面就以目前單片機系統中廣泛應用的SPI 接口的數據存儲器93C46 為例,介紹SPI器件的基本應用。
四、93C46串行存儲器簡介
93C46 是1k 位串行EEPROM 儲存器。
每一個儲存器都可以通過DI/DO 引腳寫入或讀出。它的存儲容量為1024 位,內部為128×8位或64×16 位。93C46 為串行三線SPI 操作芯片,在時鐘時序的同步下接收數據口的指令。
指令碼為9 位十進制碼,具有7 個指令,讀、擦寫使能、擦除、寫、全擦、全寫及擦除禁止。該芯片擦寫時間快,有擦寫使能保護,可靠性高,擦寫次數可達100 萬次, 93C46 的引腳功能圖如圖2 所示。
圖2 93C46 的引腳圖
表1 :93C46 串行EEPROM 指令格式選擇表