在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 數(shù)據(jù)庫/ 15.2 單片機 SPI 通信接口
18. RS485 通信與 Modbus 協(xié)議
17.5 A/D 差分輸入信號
15.8 C 語言復(fù)合數(shù)據(jù)類型(結(jié)構(gòu)體,共用體,枚舉類型)
16.3 NEC 協(xié)議紅外遙控器
13.1 單片機通信時序解析
14.4 單片機 EEPROM 單字節(jié)讀寫操作時序
13.3 多個 .c 文件的初步認(rèn)識
18.2 Modbus 通信協(xié)議介紹
15.1 BCD 碼介紹
18.3 單片機 Modbus 多機通信程序設(shè)計
18.1 單片機 RS485 通信接口、控制線、原理圖及程序?qū)嵗?/span>
15. 實時時鐘 DS1302
14.7 單片機 I2C 和 EEPROM 的綜合編程
17. 模數(shù)轉(zhuǎn)換與數(shù)模轉(zhuǎn)換
16.2 紅外遙控通信原理
13.2 1602 液晶整屏移動程序
17.6 D/A 輸出
17.7 單片機信號發(fā)生器程序
16.4 溫度傳感器 DS18B20
14.6 單片機EEPROM的頁寫入
13.4 單片機計算器程序設(shè)計[詳細(xì)]
17.2 A/D(模數(shù)轉(zhuǎn)換)的主要指標(biāo)
17.4 PCF8591 應(yīng)用程序
17.1 A/D 和 D/A 的基本概念
17.3 PCF8591硬件接口(電路圖引腳圖)
14.3 單片機 EEPROM 簡介
13.5 單片機串口通信原理和控制程序
15.5 DS1302 寄存器介紹
15.2 單片機 SPI 通信接口
15.6 DS1302 通信時序介紹
14.5 單片機 EEPROM 多字節(jié)讀寫操作時序
16. 紅外通信與 DS18B20 溫度傳感器
14.1 單片機 I2C 時序介紹
15.3 實時時鐘芯片 DS1302 介紹
15.9 單片機電子時鐘程序設(shè)計
16.1 紅外光的基本原理
15.4 DS1302 的硬件信息
15.7 DS1302 的 BURST 模式
14.2 單片機 I2C 尋址模式
14. 單片機 I2C 總線與 EEPROM
13. 單片機 1602 液晶與串口的應(yīng)用實例

15.2 單片機 SPI 通信接口

UART、I2C 和 SPI 是單片機系統(tǒng)中最常用的三種通信協(xié)議。前邊我們已經(jīng)學(xué)了 UART 和 I2C 通信協(xié)議,這節(jié)課我們來學(xué)習(xí)剩下的 SPI 通信協(xié)議。

SPI 是英語 Serial Peripheral Interface 的縮寫,顧名思義就是串行外圍設(shè)備接口。SPI 是一種高速的、全雙工、同步通信總線,標(biāo)準(zhǔn)的 SPI 也僅僅使用4個引腳,常用于單片機和 EEPROM、FLASH、實時時鐘、數(shù)字信號處理器等器件的通信。SPI 通信原理比 I2C 要簡單,它主要是主從方式通信,這種模式通常只有一個主機和一個或者多個從機,標(biāo)準(zhǔn)的 SPI 是4根線,分別是 SSEL(片選,也寫作 SCS)、SCLK(時鐘,也寫作 SCK)、MOSI(主機輸出從機輸入 Master Output/Slave Input)和 MISO(主機輸入從機輸出 Master Input/Slave Output)。

SSEL:從設(shè)備片選使能信號。如果從設(shè)備是低電平使能的話,當(dāng)拉低這個引腳后,從設(shè)備就會被選中,主機和這個被選中的從機進(jìn)行通信。

SCLK:時鐘信號,由主機產(chǎn)生,和 I2C 通信的 SCL 有點類似。

MOSI:主機給從機發(fā)送指令或者數(shù)據(jù)的通道。

MISO:主機讀取從機的狀態(tài)或者數(shù)據(jù)的通道。

在某些情況下,我們也可以用3根線的 SPI 或者2根線的 SPI 進(jìn)行通信。比如主機只給從機發(fā)送命令,從機不需要回復(fù)數(shù)據(jù)的時候,那么 MISO 就可以不要;而在主機只讀取從機的數(shù)據(jù),不需要給從機發(fā)送指令的時候,那 MOSI 就可以不要;當(dāng)一個主機一個從機的時候,從機的片選有時可以固定為有效電平而一直處于使能狀態(tài),那么 SSEL 就可以不要;此時如果再加上主機只給從機發(fā)送數(shù)據(jù),那么 SSEL 和 MISO 都可以不要;如果主機只讀取從機送來的數(shù)據(jù),SSEL 和 MOSI 都可以不要。

3線和2線的 SPI 大家要知道怎么回事,實際使用也是有應(yīng)用的,但是當(dāng)我們提及 SPI 的時候,一般都是指標(biāo)準(zhǔn) SPI,都是指4根線的這種形式。

SPI 通信的主機也是我們的單片機,在讀寫數(shù)據(jù)時序的過程中,有四種模式,要了解這四種模式,首先我們得學(xué)習(xí)以下兩個名詞。

CPOL:Clock Polarity,就是時鐘的極性。時鐘的極性是什么概念呢?通信的整個過程分為空閑時刻和通信時刻,如果 SCLK 在數(shù)據(jù)發(fā)送之前和之后的空閑狀態(tài)是高電平,那么就是 CPOL=1,如果空閑狀態(tài) SCLK 是低電平,那么就是 CPOL=0。

CPHA:Clock Phase,就是時鐘的相位。

主機和從機要交換數(shù)據(jù),就牽涉到一個問題,即主機在什么時刻輸出數(shù)據(jù)到 MOSI 上而從機在什么時刻采樣這個數(shù)據(jù),或者從機在什么時刻輸出數(shù)據(jù)到 MISO 上而主機什么時刻采樣這個數(shù)據(jù)。同步通信的一個特點就是所有數(shù)據(jù)的變化和采樣都是伴隨著時鐘沿進(jìn)行的,也就是說數(shù)據(jù)總是在時鐘的邊沿附近變化或被采樣。而一個時鐘周期必定包含了一個上升沿和一個下降沿,這是周期的定義所決定的,只是這兩個沿的先后并無規(guī)定。又因為數(shù)據(jù)從產(chǎn)生的時刻到它的穩(wěn)定是需要一定時間的,那么,如果主機在上升沿輸出數(shù)據(jù)到 MOSI 上,從機就只能在下降沿去采樣這個數(shù)據(jù)了。反之如果一方在下降沿輸出數(shù)據(jù),那么另一方就必須在上升沿采樣這個數(shù)據(jù)。

CPHA=1,就表示數(shù)據(jù)的輸出是在一個時鐘周期的第一個沿上,至于這個沿是上升沿還是下降沿,這要視 CPOL 的值而定,CPOL=1 那就是下降沿,反之就是上升沿。那么數(shù)據(jù)的采樣自然就是在第二個沿上了。

CPHA=0,就表示數(shù)據(jù)的采樣是在一個時鐘周期的第一個沿上,同樣它是什么沿由 CPOL 決定。那么數(shù)據(jù)的輸出自然就在第二個沿上了。仔細(xì)想一下,這里會有一個問題:就是當(dāng)一幀數(shù)據(jù)開始傳輸?shù)谝粋€ bit 時,在第一個時鐘沿上就采樣該數(shù)據(jù)了,那么它是在什么時候輸出來的呢?有兩種情況:一是 SSEL 使能的邊沿,二是上一幀數(shù)據(jù)的最后一個時鐘沿,有時兩種情況還會同時生效。

我們以 CPOL=1/CPHA=1 為例,把時序圖畫出來給大家看一下,如圖15-1所示。

http://wiki.jikexueyuan.com/project/mcu-tutorial-three/images/10.png" alt="" />

圖15-1 SPI 通信時序圖(一)

大家看圖15-1所示,當(dāng)數(shù)據(jù)未發(fā)送時以及發(fā)送完畢后,SCK 都是高電平,因此 CPOL=1。可以看出,在 SCK 第一個沿的時候,MOSI 和 MISO 會發(fā)生變化,同時 SCK 第二個沿的時候,數(shù)據(jù)是穩(wěn)定的,此刻采樣數(shù)據(jù)是合適的,也就是上升沿即一個時鐘周期的后沿鎖存讀取數(shù)據(jù),即 CPHA=1。注意最后最隱蔽的 SSEL 片選,這個引腳通常用來決定是哪個從機和主機進(jìn)行通信。剩余的三種模式,我們把圖畫出來,簡化起見把 MOSI 和 MISO 合在一起了,大家仔細(xì)對照看看研究一下,把所有的理論過程都弄清楚,有利于你對 SPI 通信的深刻理解,如圖15-2所示。

http://wiki.jikexueyuan.com/project/mcu-tutorial-three/images/11.png" alt="" />

圖15-2 SPI 通信時序圖(二)

在時序上,SPI 是不是比 I2C 要簡單的多?沒有了起始、停止和應(yīng)答,UART 和 SPI 在通信的時候,只負(fù)責(zé)通信,不管是否通信成功,而 I2C 卻要通過應(yīng)答信息來獲取通信成功失敗的信息,所以相對來說,UART 和 SPI 的時序都要比 I2C 簡單一些。