裸機開發-spi

概述

本節主要分析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 存儲器

總結

示例代碼分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章