基于PIC單片機與串行閃存的SPI接口設計
引 言
PIC單片機以性能穩定、品種眾多等特點(diǎn)在工業(yè)控制、儀器儀表、家電、通信等領(lǐng)域得到廣泛應用。雖然很多型號自身集成了存儲器,但在很多情況下難以滿(mǎn)足系統對大容量存儲的要求,需要外擴非易失性的存儲器。與并行Flash存儲器相比,串行Flash存儲器占用MCU引腳少,體積小,易于擴展,接線(xiàn)簡(jiǎn)單,工作可靠,故而越來(lái)越多地應用在各類(lèi)電子產(chǎn)品和工業(yè)測控系統中。本文主要討論PIC16F877A單片機與串行閃存M25P16之間的SPI通信,在要求大容量數據存儲且MCU引腳資源有限的情況下具有實(shí)用價(jià)值。
1 SPI工作原理
SPI(Serial Peripheral Interface)是一種常用的串行通信協(xié)議,用于MCU系統與外圍設備的通信,可用來(lái)連接存儲器、A/D轉換器、D/A轉換器、實(shí)時(shí)時(shí)鐘、LCD驅動(dòng)器、傳感器,甚至其他處理器。SPI主要使用4個(gè)信號:MOSI(主機輸出/從機輸人)、MISO(主機輸入/從機輸出)、SCK(串行時(shí)鐘)和CS(片選)。其中,SCK由主機產(chǎn)生,作為傳輸的同步時(shí)鐘,控制所有數據傳輸。主機通過(guò)觸發(fā)從設備的CS決定二者之間的SPI傳輸是否能夠進(jìn)行。主機和外設都包含1個(gè)串行移位寄存器。主機通過(guò)向自己的SPI串行寄存器寫(xiě)入1個(gè)字節來(lái)發(fā)起1次傳輸,然后通過(guò)MOSI信號線(xiàn)將數據傳給外設,同時(shí)外設將自己移位寄存器中的內容通過(guò)MISO信號線(xiàn)返回給主機,如圖1所示。這樣,兩個(gè)移位寄存器中的內容就交換了。也就是說(shuō),外設的寫(xiě)操作和讀操作是同步完成的。在實(shí)際應用中,如果只進(jìn)行寫(xiě)操作,則主機只需忽略收到的字節即可;如果主機要讀外設的數據,必須發(fā)送1個(gè)字節來(lái)引發(fā)從機的傳輸,發(fā)送的這個(gè)字節可以是任意數據。
2 M25P16簡(jiǎn)介
M25P16是16 Mb的串行閃存,具有先進(jìn)的寫(xiě)保護機制,支持速度高達50 MHz的SPI總線(xiàn)的存取操作。該存儲器有32個(gè)扇區,每個(gè)扇區256頁(yè),每頁(yè)256字節。工作電壓范圍2.7~3.6 V,工作溫度范圍-40~+85℃。數據保存長(cháng)達20年,每個(gè)扇區可擦寫(xiě)/編程100 000次。
M25P16支持的操作指令共有12條。指令格式為:
其中,8位的命令字是必需的,地址、啞元以及數據字節的有無(wú)和長(cháng)度會(huì )因指令的不同而有所差別,詳情如表1所列。所有的命令碼、地址、串行輸入/輸出的數據,均是高位在前,低位在后。
對M25P16操作時(shí),先選中芯片(即片選信號S拉低),然后串行輸入操作指令字節,緊接著(zhù)串行輸入地址字節(0或3字節),必要時(shí)還要加入啞讀字節,最后串行輸入/輸出數據字節,然后把片選信號拉高,之后M25P16啟動(dòng)內部控制邏輯,自行完成相應的操作。
評論