三种串行总线协议的区别(SPI、I2C和UART)
SPI、I2C跟UART三種串行總線協議的區別:
(如果想了解SPI和I2C更多詳細內容,可看?SPI總線(一):基本原理篇,?SPI總線(二):驅動分析篇,SPI總線(三):驅動實例,i2c總線(基本原理),普通IO模擬i2c總線,簡單i2c設備驅動實例系列文章)
SPI接口詳細講解 - 百度文庫
嵌入式硬件基礎之SPI總線詳解_Tian Jincheng's Blog-CSDN博客_spi硬件詳解
第一個,區別當然是名字:
?????SPI(Serial Peripheral Interface:串行外設接口);
?????I2C(INTER IC BUS)
?????UART(Universal Asynchronous Receiver Transmitter:通用異步收發器)
第二,區別在電氣信號線上:
?????SPI總線由三條信號線組成:串行時鐘(SCLK)、串行數據輸出(SDO)、串行數據輸入(SDI)。SPI總線可以實現 多個SPI設備互相連接。提供SPI串行時鐘的SPI設備為SPI主機或主設備(Master),其他設備為SPI從機或從設備(Slave)。主從設備間可以實現全雙工通信,當有多個從設備時,還可以增加一條從設備選擇線。
?????如果用通用IO口模擬SPI總線,必須要有一個輸出口(SDO),一個輸入口(SDI),另一個口則視實現的設備類型而定,如果要實現主從設備,則需輸入輸出口,若只實現主設備,則需輸出口即可,若只實現從設備,則只需輸入口即可。
?????I2C總線是雙向、兩線(SCL、SDA)、串行、多主控(multi-master)接口標準,具有總線仲裁機制,非常適合在器件之間進行近距離、非經常性的數據通信。在它的協議體系中,傳輸數據時都會帶上目的設備的設備地址,因此可以實現設備組網。
?????如果用通用IO口模擬I2C總線,并實現雙向傳輸,則需一個輸入輸出口(SDA),另外還需一個輸出口(SCL)。(注:I2C資料了解得比較少,這里的描述可能很不完備)
?????UART總線是異步串口,因此一般比前兩種同步串口的結構要復雜很多,一般由波特率產生器(產生的波特率等于傳輸波特率的16倍)、UART接收器、UART發送器組成,硬件上由兩根線,一根用于發送,一根用于接收。
?????顯然,如果用通用IO口模擬UART總線,則需一個輸入口,一個輸出口。
第三,從第二點明顯可以看出,SPI和UART可以實現全雙工,但I2C不行;
第四,看看牛人們的意見吧!
?????wudanyu:I2C線更少,我覺得比UART、SPI更為強大,但是技術上也更加麻煩些,因為I2C需要有雙向IO的支持,而且使用上拉電阻,我覺得抗干擾能力較弱,一般用于同一板卡上芯片之間的通信,較少用于遠距離通信。SPI實現要簡單一些,UART需要固定的波特率,就是說兩位數據的間隔要相等,而SPI則無所謂,因為它是有時鐘的協議。
?????quickmouse:I2C的速度比SPI慢一點,協議比SPI復雜一點,但是連線也比標準的SPI要少。
1、解剖SPI總線
SPI 接口一般使用 4 條線通信,MISO 主設備數據輸入,從設備數據輸出。MOSI 主設備數據輸出,從設備數據輸入。SCLK 時鐘信號,由主設備產生。CS 從設備片選信號,由主設備控制。
SPI接口在Master控制下產生的從器件使能信號和時鐘信號,兩個雙向移位寄存器按位傳輸進行數據交換,傳輸數據高位在前,低位在后(MSB)。在SCK的下降沿上數據改變,上升沿一位數據被存入移位寄存器。
2、解剖SPI flash
搞懂了SPI協議之后,下面就讓小編來帶你輕松操作SPI flash芯片。對flash芯片的操作,一般包括對flash芯片的擦除,編程和讀取,各大廠商的SPI flash芯片都大同小異,操作命令基本是沒什么變化的,當我們拿到一款芯片,要特別注意芯片的容量,操作分區,下面以旺宏的芯片為例為大家講解。
其實,無論是對芯片的擦除,編程還是讀取操作,我們大致可以按照以下的套路來:寫命令---寫地址---寫(讀)數據。正如以下的時序圖一樣清晰明了,我們先把片選信號拉低,再發個0x02頁編程命令,再發個地址,就可以輕松寫數據了。
依樣畫葫蘆,擦除操作也是一樣,甚至更簡單,但是我們要注意循環判斷狀態寄存器的WIP位直至為0為擦除完成,具體循環時間視芯片而定。
另外,我們要特別注意SPI flash的 OTP區,即(ONE?TIME PROGRAMMABLE),也就是說這個區域只能編程一次,編程之后不能再修改及擦除,因此我們操作的時候要特別注意。對OTP區域的讀寫之前,我們首先要發送進入OTP區域的命令,其他的操作和以上普通flash區域的操作是一樣的。
掌握以上方法,我們就可以輕松操作SPI flash芯片了,當然,對時序這種底層的操作,還需要不斷學習和積累
SPI接口介紹(轉)
這幾天碰到了使用SPI接口的flash,才知道flash還可以是串行的,看來以前真是井底之蛙啊,找了一些SPI接口的資料都不全,后來找到一點英文資料,翻譯了一下,加上我的個人理解,湊成一篇了,希望對初學者有點幫助。
???SPI接口的全稱是"Serial Peripheral Interface",意為串行外圍接口,是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應用在EEPROM,FLASH,實時時鐘,AD轉換器,還有數字信號處理器和數字信號解碼器之間。
???SPI接口是在CPU和外圍低速器件之間進行同步串行數據傳輸,在主器件的移位脈沖下,數據按位傳輸,高位在前,地位在后,為全雙工通信,數據傳輸速度總體來說比I2C總線要快,速度可達到幾Mbps。
???SPI接口是以主從方式工作的,這種模式通常有一個主器件和一個或多個從器件,其接口包括以下四種信號:
(1)MOSI – 主器件數據輸出,從器件數據輸入
(2)MISO – 主器件數據輸入,從器件數據輸出
(3)SCLK – 時鐘信號,由主器件產生
(4)/SS??– 從器件使能信號,由主器件控制
在點對點的通信中,SPI接口不需要進行尋址操作,且為全雙工通信,顯得簡單高效。
?
?在多個從器件的系統中,每個從器件需要獨立的使能信號,硬件上比I2C系統要稍微復雜一些。
?
SPI接口在內部硬件實際上是兩個簡單的移位寄存器,傳輸的數據為8位,在主器件產生的從器件使能信號和移位脈沖下,按位傳輸,高位在前,低位在后。如下圖所示,在SCLK的下降沿上數據改變,同時一位數據被存入移位寄存器。
?SPI接口內部硬件圖示:
?最后,SPI接口的一個缺點:沒有指定的流控制,沒有應答機制確認是否接收到數據。
SPI interface
SPI接口介紹
????SPI是由美國摩托羅拉公司推出的一種同步串行傳輸規范,常作為單片機外設芯片串行擴展接 口。SPI有4個引腳:SS(從器件選擇線)、SDO(串行數據輸出線)、SDI(串行數據輸入線)和SCK(同步串行時鐘線)。SPI可以用全雙工通信 方式同時發送和接收8(16)位數據,過程如下:主機啟動發送過程,送出時鐘脈沖信號,主移位寄存器的數據通過SDO移入到從移位寄存器,同時從移位寄存 器中的數據通過SDI移人到主移位寄存器中。8(16)個時鐘脈沖過后,時鐘停頓,主移位寄存器中的8(16)位數據全部移人到從移位寄存器中,隨即又被 自動裝入從接收緩沖器中,從機接收緩沖器滿標志位(BF)和中斷標志位(SSPIF)置“1”。同理,從移位寄存器中的8位數據全部移入到主寄存器中,隨 即又被自動裝入到主接收緩沖器中.主接收緩沖器滿標志位(BF)和中斷標志位(SSPIF)置“1”。主CPU檢測到主接收緩沖器的滿標志位或者中斷標志 位置1后,就可以讀取接收緩沖器中的數據。同樣,從CPU檢測到從接收緩沖器滿標志位或中斷標志位置1后,就可以讀取接收緩沖器中的數據,這樣就完成了一 次相互通信過程。這里設置dsPIC30F6014為主控制器,ISD4002為從器件,通過SPI口完成通信控制的過程。
?
SPI總線協議
SPI是一個環形總線結構,由ss(cs)、sck、sdi、sdo構成,其時序其實很簡單,主要是在sck的控制下,兩個雙向移位寄存器進行數據交換。
???????假設下面的8位寄存器裝的是待發送的數據10101010,上升沿發送、下降沿接收、高位先發送。
???????那么第一個上升沿來的時候 數據將會是sdo=1;寄存器=0101010x。下降沿到來的時候,sdi上的電平將所存到寄存器中去,那么這時寄存器=0101010sdi,這樣在 8個時鐘脈沖以后,兩個寄存器的內容互相交換一次。這樣就完成里一個spi時序。
???????例子:
???????假設主機和從機初始化就緒:并且主機的sbuff=0xaa,從機的sbuff=0x55,下面將分步對spi的8個時鐘周期的數據情況演示一遍:假設上升沿發送數據
| 脈沖 | 主機sbuff | 從機sbuff | sdi | sdo |
| 0 | 10101010 | 01010101 | 0 | 0 |
| 1上 | 0101010x | 1010101x | 0 | 1 |
| 1下 | 01010100 | 10101011 | 0 | 1 |
| 2上 | 1010100x | 0101011x | 1 | 0 |
| 2下 | 10101001 | 01010110 | 1 | 0 |
| 3上 | 0101001x | 1010110x | 0 | 1 |
| 3下 | 01010010 | 10101101 | 0 | 1 |
| 4上 | 1010010x | 0101101x | 1 | 0 |
| 4下 | 10100101 | 01011010 | 1 | 0 |
| 5上 | 0100101x | 1011010x | 0 | 1 |
| 5下 | 01001010 | 10110101 | 0 | 1 |
| 6上 | 1001010x | 0110101x | 1 | 0 |
| 6下 | 10010101 | 01101010 | 1 | 0 |
| 7上 | 0010101x | 1101010x | 0 | 1 |
| 7下 | 00101010 | 11010101 | 0 | 1 |
| 8上 | 0101010x | 1010101x | 1 | 0 |
| 8下 | 01010101 | 10101010 | 1 | 0 |
? ? ? 這 樣就完成了兩個寄存器8位的交換,上面的上表示上升沿、下表示下降沿,sdi、sdo相對于主機而言的。其中ss引腳作為主機的時候,從機可以把它拉底被 動選為從機,作為從機的是時候,可以作為片選腳用。根據以上分析,一個完整的傳送周期是16位,即兩個字節,因為,首先主機要發送命令過去,然后從機根據 主機的名準備數據,主機在下一個8位時鐘周期才把數據讀回來
? ? ? SPI 總線是Motorola公司推出的三線同步接口,同步串行3線方式進行通信:一條時鐘線SCK,一條數據輸入線MOSI,一條數據輸出線MISO;用于 CPU與各種外圍器件進行全雙工、同步串行通訊。SPI主要特點有:可以同時發出和接收串行數據;可以當作主機或從機工作;提供頻率可編程時鐘;發送結束 中斷標志;寫沖突保護;總線競爭保護等。圖3示出SPI總線工作的四種方式,其中使用的最為廣泛的是SPI0和SPI3方式(實線表示,??SPI總線四種工作方式
SPI總線接口及時序
???SPI 模塊為了和外設進行數據交換,根據外設工作要求,其輸出串行同步時鐘極性和相位可以進行配置,時鐘極性(CPOL)對傳輸協議沒有重大的影響。如果 CPOL=0,串行同步時鐘的空閑狀態為低電平;如果CPOL=1,串行同步時鐘的空閑狀態為高電平。時鐘相位(CPHA)能夠配置用于選擇兩種不同的傳 輸協議之一進行數據傳輸。如果CPHA=0,在串行同步時鐘的第一個跳變沿(上升或下降)數據被采樣;如果CPHA=1,在串行同步時鐘的第二個跳變沿 (上升或下降)數據被采樣。SPI主模塊和與之通信的外設音時鐘相位和極性應該一致。SPI總線接口時序如圖所示。
SPI功能模塊的設計
根據功能定義及SPI的工作原理,將整個IP Core分為8個子模塊:uC接口模塊、時鐘分頻模塊、發送數據FIFO模塊、接收數據FIFO模塊、狀態機模塊、發送數據邏輯模塊、接收數據邏輯模塊以及中斷形式模塊。
深入分析SPI的四種傳輸協議可以發現,根據一種協議,只要對串行同步時鐘進行轉換,就能得到其余的三種協議。為了簡化設計規定,如果要連續傳輸多個數據,在兩個數據傳輸之間插入一個串行時鐘的空閑等待,這樣狀態機只需兩種狀態(空閑和工作)就能正確工作。
SPI接口:板內常見SPI接口詳細介紹 - 知乎
1-接口概述
SPI = Serial Peripheral Interface,是串行外圍設備接口,是一種高速,全雙工,同步的通信總線。常規只占用四根線,節約了芯片管腳,PCB的布局省空間。現在越來越多的芯片集成了這種通信協議,常見的有EEPROM、FLASH、AD轉換器等。
? 優點:
支持全雙工,push-pull的驅動性能相比open-drain信號完整性更好;
支持高速(100MHz以上);
協議支持字長不限于8bits,可根據應用特點靈活選擇消息字長;
硬件連接簡單;
? 缺點:
相比IIC多兩根線;
沒有尋址機制,只能靠片選選擇不同設備;
沒有從設備接受ACK,主設備對于發送成功與否不得而知;
典型應用只支持單主控;
相比RS232 RS485和CAN總線,SPI傳輸距離短;
2-硬件結構
SPI總線定義兩個及以上設備間的數據通信,提供時鐘的設備為主設備Master,接收時鐘的設備為從設備Slave;
? 信號定義如下:
SCK : Serial Clock 串行時鐘
MOSI : Master Output, Slave Input 主發從收信號
MISO : Master Input, Slave Output 主收從發信號
SS/CS : Slave Select 片選信號
? 電路連接如下:
單個主設備和單個從設備
單個主設備和多個從設備,通過多個片選信號或者菊花鏈方式實現;
3-寄存器類型
Motorola定義的SPI寄存器包括:
SPI Control Register 1 (SPICR1) 控制寄存器1
SPI Control Register 2 (SPICR2) 控制寄存器2
SPI Baud Rate Register (SPIBR) 波特率寄存器
SPI Status Register (SPISR) 狀態寄存器 (只讀 其余均可讀可寫)
SPI Data Register (SPIDR) 數據寄存器
通過往寄存器中寫入不同的值,設置SPI模塊的不同屬性。
4- 傳輸模式
通過設置控制寄存器SPICR1中的CPOL和CPHA位,將SPI可以分成四種傳輸模式。
CPOL,即Clock Polarity,決定時鐘空閑時的電平為高或低。對于SPI數據傳輸格式沒有顯著影響。
1 = 時鐘低電平時有效,空閑時為高
0 = 時鐘高電平時有效,空閑時為低
CPHA,即Clock Phase,定義SPI數據傳輸的兩種基本模式。
1 = 數據采樣發生在時鐘(SCK)偶數(2,4,6,...,16)邊沿(包括上下邊沿)
0 = 數據采樣發生在時鐘(SCK)奇數(1,3,5,...,15)邊沿(包括上下邊沿)
四種模式如下圖所示:
先看第一列兩張圖(CPHA = 0),采樣發生在第一個時鐘跳變沿,即數據采樣發生在SCK奇數邊沿;再看第二列(CPHA =1),采樣發生在第二個時鐘跳變沿,即數據采樣發生在SCK偶數邊沿。
第一行兩張圖,第二行兩張圖(CPOL = 1),SCK空閑狀態為高電平。
主從設備進行SPI通訊時,要確保它們的傳輸模式設置相同。
其中mode0和mode3最為常見,SPI接口的flash中均會有標注。
5-讀寫操作
? 標準SPI讀寫為例
片選---讀指令---地址---數據讀出
片選---寫指令---地址---數據寫入
??Dual I/O Fast Read Sequence Diagram?雙路IO
??Quad I/O Fast Read Sequence Diagram?四路IO
參考
總結
以上是生活随笔為你收集整理的三种串行总线协议的区别(SPI、I2C和UART)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对数函数定义域和值域_对数函数的定义域,
- 下一篇: Reds 过期策略 内存淘汰策略 持久化