輕松學PIC之SPI總線篇
出處:oldli 發(fā)布于:2011-08-29 16:10:22
大家好,通過前一期的學習,我們已經(jīng)對ICD2 仿真燒寫器和增強型PIC 實驗板的使用方法及學習方式有所了解與熟悉,現(xiàn)在我們就趁熱打鐵,再向上跨一步,一起來學習一下SPI 總線器的工作原理及使用方法,這樣我們可以將一些需要保存的數(shù)據(jù)保存到存儲器芯片中,掉電不會失丟,如汽車的里程表,它在不斷地計數(shù),其公里數(shù)就是放在一個SPI 總線的存儲器芯片里面。
一、SPI總線基本概念
SPI ( Serial Peripheral Interface ———串行外設接口) 總線是Motorola 公司推出的一種同步串行接口技術。SPI 總線系統(tǒng)是一種同步串行外設接口, 允許MCU 與各種外圍設備( 如閃存、數(shù)摸轉換、網(wǎng)絡控制器、從MCU) 以串行方式進行通信、數(shù)據(jù)交換。
SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB 的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,現(xiàn)在越來越多的芯片集成了這種通信協(xié)議。其工作模式有兩種:主模式和從模式。SPI 是一種允許一個主設備啟動一個從設備的同步通訊的協(xié)議,從而完成數(shù)據(jù)的交換。
也就是SPI 是一種規(guī)定好的通訊方式。這種通信方式的優(yōu)點是占用端口較少,一般4 根就夠基本通訊了(不算電源線)。同時傳輸速度也很高。一般來說要求主設備要有SPI 控制器(也可用模擬方式),就可以與基于SPI 的芯片通訊了。
二、SPI總線系統(tǒng)結構
SPI 系統(tǒng)可直接與各個廠家生產(chǎn)的多種標準外圍器件直接接口, 一般使用4 條線: 串行時鐘線(SCK) 、主機輸入/ 從機輸出數(shù)據(jù)線SDO、主機輸出/ 從機輸入數(shù)據(jù)線SDI 和低電平有效的從機選擇線SS。SDI 和SDO 用于串行接收和發(fā)送數(shù)據(jù),數(shù)據(jù)高位在前低位在后。在SPI 設置為主機方式時,SDO 是主機讀從機,SDI 是主機寫從機。SCK 用于提供時鐘脈沖將數(shù)據(jù)一位位地傳送。SPI 總線器件間傳送數(shù)據(jù)框圖如圖1 所示。

三、SPI總線的接口特性
利用SPI 總線可在軟件的控制下構成各種系統(tǒng)。如1 個主MCU 和幾個從MCU、幾個從MCU 相互連接構成多主機系統(tǒng)(分布式系統(tǒng))、1 個主MCU 和1 個或幾個從I / O 設備所構成的各種系統(tǒng)等。在大多數(shù)應用場合,可使用1個MCU 作為主控機來控制數(shù)據(jù),并向1 個或幾個從外圍器件傳送該數(shù)據(jù)。從器件只有在主機發(fā)命令時才能接收或發(fā)送數(shù)據(jù)。其數(shù)據(jù)的傳輸格式總是高位(MSB)在前,低位(LSB)在后。
當一個主控機通過SPI 與幾種不同的串行I / O 芯片相連時,必須使用每片的允許控制端,這可通過MCU 的I / O 端口輸出線來實現(xiàn)。
但應特別注意這些串行I / O 芯片的輸入輸出特性:首先是輸入芯片的串行數(shù)據(jù)輸出是否有三態(tài)控制端。平時未選中芯片時,輸出端應處于高阻態(tài)。若沒有三態(tài)控制端,則應外加三態(tài)門。否則MCU 的MISO端只能連接一個外設。其次是外設的串行數(shù)據(jù)輸入是否有允許控制端。
因為只有在此芯片允許時,SCK 脈沖才把串行數(shù)據(jù)移入該外設;在禁止時,SCK 對外設無影響。若原來沒有允許控制端,則增加控制門;當然,也可以在SPI 總線上只連接1 個外設,就不必用允許控制。
通過前文的原理介紹,我們已經(jīng)對SPI 總線的特性以及工作原理有了大致地了解,但當我們拿到一個SPI 總線器件時要正確地應用它,還是一時不知如何下手,比如我們現(xiàn)在要想把一個具體的數(shù)據(jù)存儲放器件中去,需要怎么辦呢?現(xiàn)在,我們來一起看一個數(shù)據(jù)存儲的例子,通過一個實例,相信會給大家?guī)硪粋€感性的認識,下面就以目前單片機系統(tǒng)中廣泛應用的SPI 接口的數(shù)據(jù)存儲器93C46 為例,介紹SPI器件的基本應用。
四、93C46串行存儲器簡介
93C46 是1k 位串行EEPROM 儲存器。
每一個儲存器都可以通過DI/DO 引腳寫入或讀出。它的存儲容量為1024 位,內(nèi)部為128×8位或64×16 位。93C46 為串行三線SPI 操作芯片,在時鐘時序的同步下接收數(shù)據(jù)口的指令。
指令碼為9 位十進制碼,具有7 個指令,讀、擦寫使能、擦除、寫、全擦、全寫及擦除禁止。該芯片擦寫時間快,有擦寫使能保護,可靠性高,擦寫次數(shù)可達100 萬次, 93C46 的引腳功能圖如圖2 所示。

圖2 93C46 的引腳圖
表1 :93C46 串行EEPROM 指令格式選擇表

指令說明:
① 讀(READ):當下達10XXXXXX 指令后,地址(XXXXXXXX) 的數(shù)據(jù)在SCK=1 時由DO輸出。
② 寫(WRITE):在寫入數(shù)據(jù)前, 必須先下達寫使能(EWEN) 指令, 然后再下達01XXXXXX 指令后, 當SCK=1 時, 會把數(shù)據(jù)碼寫入指定地址(XXXXXXXX);而DO=0 時,表示還在進行寫操作, 寫入結束后DO 會轉為高電平。寫入動作完成后,必須再下達寫禁止(EWDS)命令。
?、?清除(ERASE): 下達清除指令11XXXXXX 后會將地址(XXXXXXXX)的數(shù)據(jù)清除。
?、?寫使能(EWEN):下達0011XXXX 指令后,才可以進行寫(WRITE)操作。
?、?寫禁止(EWDS):下達0000XXXX 指令后,才可重復進行寫入(WRITE)操作。
⑥ 芯片清除(ERAL):下達0010XXXX 指令后,全部禁止。
?、?芯片寫入(WRAL):下達0001XXXX指令后,全部寫入“0”。
我們的例子程序功能是要實現(xiàn)對93C46 存儲器的讀寫操作,并驗證數(shù)據(jù)是否正確。程序先分別向0x02 和0x03 兩個地址寫入0x55 和0xAA,然后讀其中一個地址,并將讀到的數(shù)據(jù)顯示出來驗證是否正確。程序默認是讀0x02 地址內(nèi)的數(shù)據(jù),讀者也可以修改地址數(shù)據(jù)來讀其它地址數(shù)據(jù)。
首先, 我們來看一下增強型PIC 實驗板上的93C46 接口電路, 因為我們需要將軟件和硬件相結合進行考慮如何來編程,完成該實驗的硬件原理圖如圖3 所示,U6 為實驗板上的93C46 芯片, 單片機的RB1、RB2、RB4、RB5 分別與芯片的CS、CLK、DI、DO 腳相連,七段數(shù)碼管D5、D7、D8 組成了顯示單元,字形碼的數(shù)據(jù)通過RC 口送入,各數(shù)碼管掃描顯示信號分別不同的RA 口進行控制。

圖3 硬件原理圖
對于單片機軟件的編程,我們使用MPLabIDE 軟件來進行C 語言編程,它是我們的編程環(huán)境,同時我們可以通過使用ICD2 仿真燒寫器和增強型PIC 實驗板連接進行程序的仿真調試和燒寫步驟,具體的操作步驟,我們已經(jīng)在前幾期做了詳細的說明和介紹,在此就不再重復說明,讀者朋友可以參閱以前的文章或直接登陸我們的網(wǎng)站查看資料?,F(xiàn)在我們可以輸入程序代碼進行調試了, 我們在MPLab IDE軟件中新建工程, 加入源程序代碼,同時進行芯片型號的選擇和配置位的設置,我們實驗所用的芯片型號為PIC16F877A。由于篇幅限制,程序的源代碼請上網(wǎng)站www.ele169.com 或www.hificat.com。 流程框圖如圖4 示。

圖4 讀寫演示程序的流程圖
編好程序后將編譯好的HEX通過ICD2 仿真燒寫器燒入單片機芯片,上電運行,效果如圖5 所示。“0170”是我們事先寫入存儲器芯片再將其讀出來的十進制值。

圖5 從93C46 讀出的數(shù)據(jù)通過數(shù)碼管顯示
看到這里,相信你現(xiàn)在已經(jīng)可以完成一些數(shù)據(jù)存儲方面的實驗。
上一篇:輕松學PIC之數(shù)碼管
版權與免責聲明
凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權均屬于維庫電子市場網(wǎng),轉載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關法律責任。
本網(wǎng)轉載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉載時,必須保留本網(wǎng)注明的作品出處,并自負版權等法律責任。
如涉及作品內(nèi)容、版權等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關權利。
- 熱設計決定壽命:電源散熱分析與優(yōu)化方法2026/3/4 14:28:27
- 連接器接觸件材料對性能的影響2026/3/4 14:18:30
- 開關頻率對電源設計的影響2026/3/4 14:05:10
- MOSFET漏源擊穿電壓Vds解析2026/3/4 13:51:21
- 晶體管與MOSFET的區(qū)別詳解2026/3/3 14:36:02









