概述
本節主要分析spi的工作原理,並以eeprom爲例詳述其操作機制
spi原理
spi簡介
SPI,是Serial Peripheral interface的縮寫,即串行外圍設備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在 EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,管腳上只佔用四根線來完成通訊(CS、SCLK、MISO、MOSI),節約了芯片的管腳,同時爲PCB的佈局上節省空間,提供方便,正是出於這種簡單易用的特性,現在越來越多的芯片集成了這種通信協議,比如AT91RM9200.
硬件結構
SCLK:時鐘信號,由主設備產生
MOSI:主設備數據輸出,從設備數據輸入 (master output slave input)
MISO:主設備數據輸入,從設備數據輸出 (master input slave output)
SS:從設備使能信號,由主設備控制,片選信號(只有片選信號爲預先規定的使能信號時(高電位或低電位),對此芯片的操作纔有效,這就允許在同一總線上連接多個SPI設備成爲可能)
Notes:
- 數據一位一位的通過MISO、MOSI兩根線傳輸
- 依據SCLK的脈衝,在時鐘的上升沿或者下降沿進行採樣,兩個雙向移位寄存器進行數據交換
- SCLK由主設備控制,但具體時鐘頻率需要視從設備要求而定
- MISO、MOSI只是物理傳輸載體,SPI協議規定了載體數據內容的格式(即命令、地址、數據)
itop 4412 spi控制器
SPI方框圖
SPI控制器包含6類寄存器,以達到上述控制目的:
1.SPI控制寄存器(SPCONn)
SPCONn 位 描述 初始狀態
SPI 模式選擇。決定如何讀/寫SPTDAT
SMOD [6:5] 00 = 查詢模式01 = 中斷模式 00
10 = DMA 模式11 = 保留
SCK 使能。決定是否希望SCK 使能(主機)
ENSCK [4] 0 = 禁止1 = 使能 0
主/從機選擇。決定希望的模式(主機或從機)
MSTR [3] 0 = 禁止1 = 使能
注意:從機模式中,這需要主機初始化Tx/Rx 的建立時間。 0
時鐘極性選擇。決定時鐘是高電平有效還是低電平有效
CPOL [2] 0 = 低電平有效1 = 高電平有效 0
時鐘相位選擇。選擇2 種基本不同傳輸格式之一
CPHA [1] 0 = 格式A 1 = 格式B 0
自動發送雜數據模式使能。決定是否必須接收數據
TAGD [0] 0 = 普通模式1 =自動發送雜數據模式
注意:普通模式中,如果只希望接收數據則應該發送空0xFF 數據。 0
2.SPI狀態寄存器(SPSTAn)
SPSTAn 位 描述 初始狀態
保留 [7:3] – –
數據衝突錯誤標誌。如果當傳輸正在進行中時寫了SPTDATn 或讀了
DCOL [2] SPRDATn 此標誌置位,並且可以通過讀取SPSTAn 清除。 0
0 = 未發現1 = 發生衝突錯誤
多主機錯誤標誌。當SPI 配製爲主機時如果nSS 信號變爲有效低電平
並且SPPINn 的ENMUL 位爲多主機錯誤檢測模式則置位此標誌。通
過讀取SPSTAn 清除MULF。
MULF [1] 0 = 未發現1 = 發現多主機錯誤 0
傳輸就緒標誌。此位指示出SPTDATn 或SPRDATn 準備好了放送或接
REDY [0] 收。通過寫數據到SPTDATn 自動清零此標誌。 1
0 = 未就緒1 = 數據Tx/Rx 就緒
3.SPI引腳控制寄存器
SPPINn 位 描述 初始狀態
保留 [7:3] – –
多主機錯誤檢測使能。當SPI 系統爲主機時nSS 引腳用作輸入來檢測
ENMUL [2] 多主機錯誤。
0 = 禁止(通用) 1 = 多主機錯誤檢測使能
保留 [1] –
決定當1 字節發送完成時MOSI 的驅動或釋放(主機)。
KEEP [0] 0 = 釋放1 = 驅動爲之前電平
當SPI 系統使能時,除nSS 引腳外的其它引腳的方向是由SPCONn 寄存器的MSTR 位控制的。nSS 引腳的
方向通常爲輸入。
當SPI 爲主機時,如果SPPIN 的ENMUL 位有效,則nSS 引腳被用於檢查多主機錯誤,並且應該使用另一個
GPIO 來選擇一個從機。
如果 SPI 配製爲從機,nSS 引腳用於主機選擇作爲從機的SPI
SPIMISO(MISO)和SPIMOSI(MOSI)數據引腳是用於發送和接收串行數據。當SPI 配製爲主機時,SPIMISO
(MISO)爲主機數據輸入線,SPIMOSI(MOSI)爲主機數據輸出線,SPICLK(SCK)爲時鐘輸出線。當SPI 變
爲從機時,這些引腳執行相反作用。多主機系統中,分別配製SPICLK(SCK)引腳、SPIMOSI(MOSI)引腳和
SPIMISO(MISO)引腳作爲一組。當其它SPI 器件工作在主機選擇S3C2440A SPI 作爲從機時主機SPI 可以發覺
多主機錯誤。當察覺到這種錯誤時,立即執行以下動作。但是如果希望檢測此錯誤則必須事先置位SPPINn 的
ENMUL 位。
1. SPCONn 的MSTR 位強制爲0 來工作在從機模式中。
2. 置位SPSTAn 的MULF 標誌並且發生SPI 中斷。
4.SPI波特率預分頻寄存器
SPPREn 位 描述 初始狀態
預分頻值 [7:0] 決定SPI 時鐘率。 00
波特率 = PCLK / 2 / (預分頻值 + 1)
5.SPI發送數據寄存器
SPPREn 位 描述 初始狀態
Tx數據寄存器[7:0] 此字段包含通過SPI 通道要發送的數據 0x00
6.SPI接收數據寄存器
SPRDAT n 位 描述 初始狀態
Rx數據寄存器[7:0] 此字段包含通過SPI 通道接收到的數據 0xFF
Notes:CPOL和CPHA
eeprom 存儲器
總結
示例代碼分析