|
電子設(shè)備之間的通信就像人類之間的交流,雙方都需要說相同的語言。在電子產(chǎn)品中,這些語言稱為通信協(xié)議。 之前有單獨地分享了SPI、UART、I2C通信的文章,這篇對它們做一些對比。 串行 VS 并行電子設(shè)備通過發(fā)送數(shù)據(jù)位從而實現(xiàn)相互交談。位是二進制的,只能是1或0。通過電壓的快速變化,位從一個設(shè)備傳輸?shù)搅硪粋€設(shè)備。在以5V工作的系統(tǒng)中,“0”通過0V的短脈沖進行通信,而“1”通過5V的短脈沖進行通信。 數(shù)據(jù)位可以通過并行或串行的形式進行傳輸。 在并行通信中,數(shù)據(jù)位在導(dǎo)線上同時傳輸。下圖顯示了二進制(01000011)中字母“C”的并行傳輸: 在串行通信中,位通過單根線一一發(fā)送。下圖顯示了二進制(01000011)中字母“C”的串行傳輸: SPI通信SPI是一種常見的設(shè)備通用通信協(xié)議。它有一個獨特優(yōu)勢就是可以無中斷傳輸數(shù)據(jù),可以連續(xù)地發(fā)送或接收任意數(shù)量的位。而在I2C和UART中,數(shù)據(jù)以數(shù)據(jù)包的形式發(fā)送,有著限定位數(shù)。 在SPI設(shè)備中,設(shè)備分為主機與從機系統(tǒng)。主機是控制設(shè)備(通常是微控制器),而從機(通常是傳感器,顯示器或存儲芯片)從主機那獲取指令。 一套SPI通訊共包含四種信號線:MOSI (Master Output/Slave Input) – 信號線,主機輸出,從機輸入。MISO (Master Input/Slave Output) – 信號線,主機輸入,從機輸出。SCLK (Clock) – 時鐘信號。SS/CS (Slave Select/Chip Select) – 片選信號。 SPI協(xié)議特點 實際上,從機的數(shù)量受系統(tǒng)負載電容的限制,它會降低主機在電壓電平之間準確切換的能力。 工作原理 時鐘信號 每個時鐘周期傳輸一位數(shù)據(jù),因此數(shù)據(jù)傳輸?shù)乃俣热Q于時鐘信號的頻率。 時鐘信號由于是主機配置生成的,因此SPI通信始終由主機啟動。 設(shè)備共享時鐘信號的任何通信協(xié)議都稱為同步。SPI是一種同步通信協(xié)議,還有一些異步通信不使用時鐘信號。 例如在UART通信中,雙方都設(shè)置為預(yù)先配置的波特率,該波特率決定了數(shù)據(jù)傳輸?shù)乃俣群蜁r序。 片選信號 主機通過拉低從機的CS/SS來使能通信。 在空閑/非傳輸狀態(tài)下,片選線保持高電平。在主機上可以存在多個CS/SS引腳,允許主機與多個不同的從機進行通訊。 如果主機只有一個片選引腳可用,則可以通過以下方式連接這些從器件: MOSI和MISO 主機通過MOSI以串行方式將數(shù)據(jù)發(fā)送給從機,從機也可以通過MISO將數(shù)據(jù)發(fā)送給主機,兩者可以同時進行。所以理論上,SPI是一種全雙工的通訊協(xié)議。 傳輸步驟 1. 主機輸出時鐘信號 2. 主機拉低SS / CS引腳,激活從機 3. 主機通過MOSI將數(shù)據(jù)發(fā)送給從機 4. 如果需要響應(yīng),則從機通過MISO將數(shù)據(jù)返回給主機 使用SPI有一些優(yōu)點和缺點,如果在不同的通信協(xié)議之間進行選擇,則應(yīng)根據(jù)項目要求進行充分考量。 優(yōu)劣 優(yōu)點 SPI通訊無起始位和停止位,因此數(shù)據(jù)可以連續(xù)流傳輸而不會中斷;沒有像I2C這樣的復(fù)雜的從站尋址系統(tǒng),數(shù)據(jù)傳輸速率比I2C更高(幾乎快兩倍)。獨立的MISO和MOSI線路,可以同時發(fā)送和接收數(shù)據(jù)。 缺點 SPI使用四根線(I2C和UART使用兩根線),沒有信號接收成功的確認(I2C擁有此功能),沒有任何形式的錯誤檢查(如UART中的奇偶校驗位等)。 UART代表通用異步接收器/發(fā)送器也稱為串口通訊,它不像SPI和I2C這樣的通信協(xié)議,而是微控制器中的物理電路或獨立的IC。
UART通信![]() ![]() 工作原理 ![]() ![]() 起始位: UART數(shù)據(jù)傳輸線通常在不傳輸數(shù)據(jù)時保持在高電壓電平。開始傳輸時發(fā)送UART在一個時鐘周期內(nèi)將傳輸線從高電平拉低到低電平,當接收UART檢測到高電壓到低電壓轉(zhuǎn)換時,它開始以波特率的頻率讀取數(shù)據(jù)幀中的位。 數(shù)據(jù)幀: 數(shù)據(jù)幀內(nèi)包含正在傳輸?shù)膶嶋H數(shù)據(jù)。如果使用奇偶校驗位,則可以是5位,最多8位。如果不使用奇偶校驗位,則數(shù)據(jù)幀的長度可以為9位。 校驗位: 奇偶校驗位是接收UART判斷傳輸期間是否有任何數(shù)據(jù)更改的方式。接收UART讀取數(shù)據(jù)幀后,它將對值為1的位數(shù)進行計數(shù),并檢查總數(shù)是偶數(shù)還是奇數(shù),是否與數(shù)據(jù)相匹配。 停止位: 為了向數(shù)據(jù)包的結(jié)尾發(fā)出信號,發(fā)送UART將數(shù)據(jù)傳輸線從低電壓驅(qū)動到高電壓至少持續(xù)兩位時間。 傳輸步驟
![]() 2.發(fā)送UART將起始位,奇偶校驗位和停止位添加到數(shù)據(jù)幀: ![]() 3.整個數(shù)據(jù)包從發(fā)送UART串行發(fā)送到接收UART。接收UART以預(yù)先配置的波特率對數(shù)據(jù)線進行采樣: ![]() 4.接收UART丟棄數(shù)據(jù)幀中的起始位,奇偶校驗位和停止位: ![]() 5.接收UART將串行數(shù)據(jù)轉(zhuǎn)換回并行數(shù)據(jù),并將其傳輸?shù)浇邮斩说臄?shù)據(jù)總線: ![]() 優(yōu)劣 沒有任何通信協(xié)議是完美的,但是UART非常擅長于其工作。以下是一些利弊,可幫助您確定它們是否適合您的項目需求: 優(yōu)點
缺點
I2C通信I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可傳送信息。它結(jié)合了 SPI 和 UART 的優(yōu)點,您可以將多個從機連接到單個主機(如SPI那樣),也可以使用多個主機控制一個或多個從機。當您想讓多個微控制器將數(shù)據(jù)記錄到單個存儲卡或?qū)⑽谋撅@示到單個LCD時,這將非常有用。 ![]() SDA (Serial Data) – 數(shù)據(jù)線。 SCL (Serial Clock) – 時鐘線。 I2C是串行通信協(xié)議,因此數(shù)據(jù)沿著SDA一點一點地傳輸。與SPI一樣,I2C也需要時鐘同步信號且時鐘始終由主機控制。 ![]() 工作原理 I2C的數(shù)據(jù)傳輸是以多個msg的形式進行,每個msg都包含從機的二進制地址幀,以及一個或多個數(shù)據(jù)幀,還包括開始條件和停止條件,讀/寫位和數(shù)據(jù)幀之間的ACK / NACK位: ![]() 啟動條件:當SCL是高電平時,SDA從高電平向低電平切換。 停止條件:當SCL是高電平時,SDA由低電平向高電平切換。 ![]() 地址幀:每個從屬設(shè)備唯一的7位或10位序列,用于主從設(shè)備之間的地址識別。 讀/寫位:一位,如果主機是向從機發(fā)送數(shù)據(jù)則為低電平,請求數(shù)據(jù)則為高電平。 ACK/NACK:消息中的每個幀后均帶有一個ACK/NACK位。如果成功接收到地址幀或數(shù)據(jù)幀,接收設(shè)備會返回一個ACK位用于表示確認。 尋址 由于I2C沒有像SPI那樣的片選線,因此它需要使用另一種方式來確認某一個從設(shè)備,而這個方式就是 —— 尋址 。 主機將要通信的從機地址發(fā)送給每個從機,然后每個從機將其與自己的地址進行比較。如果地址匹配,它將向主機發(fā)送一個低電平ACK位。如果不匹配,則不執(zhí)行任何操作,SDA線保持高電平。 讀/寫位 地址幀的末尾包含一個讀/寫位。如果主機要向從機發(fā)送數(shù)據(jù),則為低電平。如果是主機向從機請求數(shù)據(jù),則為高電平。 數(shù)據(jù)幀 當主機檢測到從機的ACK位后,就可以發(fā)送第一個數(shù)據(jù)幀了。數(shù)據(jù)幀始終為8位,每個數(shù)據(jù)幀后緊跟一個ACK / NACK位,來驗證接收狀態(tài)。當發(fā)送完所有數(shù)據(jù)幀后,主機可以向從機發(fā)送停止條件來終止通信。 傳輸步驟 1. 在SCL線為高電平時,主機通過將SDA線從高電平切換到低電平來啟動總線通信。 2. 主機向總線發(fā)送要與之通信的從機的7位或10位地址,以及讀/寫位: ![]() 3. 每個從機將主機發(fā)送的地址與其自己的地址進行比較。如果地址匹配,則從機通過將SDA線拉低一位返回一個ACK位。如果主機的地址與從機的地址不匹配,則從機將SDA線拉高。 ![]() 4. 主機發(fā)送或接收數(shù)據(jù)幀: ![]() 5. 傳輸完每個數(shù)據(jù)幀后,接收設(shè)備將另一個ACK位返回給發(fā)送方,以確認已成功接收到該幀: ![]() 6. 隨后主機將SCL切換為高電平,然后再將SDA切換為高電平,從而向從機發(fā)送停止條件。 單個主機VS多個從機 由于I2C使用尋址功能,可以通過一個主機控制多個從機。使用7位地址時,最多可以使用128(27)個唯一地址。使用10位地址并不常見,但可以提供1,024(210)個唯一地址。如果要將多個從機連接到單個主機時,請使用4.7K歐的上拉電阻將它們連接,例如將SDA和SCL線連接到Vcc: ![]() 多個主機VS多個從機 I2C支持多個主機同時與多個從機相連,當兩個主機試圖通過SDA線路同時發(fā)送或接收數(shù)據(jù)時,就會出現(xiàn)問題。因此每個主機都需要在發(fā)送消息之前檢測SDA線是低電平還是高電平。如果SDA線為低電平,則意味著另一個主機正在控制總線。如果SDA線高,則可以安全地發(fā)送數(shù)據(jù)。如果要將多個主機連接到多個從機,請使用4.7K歐的上拉電阻將SDA和SCL線連接到Vcc: ![]() 優(yōu)劣 與其他協(xié)議相比,I2C可能聽起來很復(fù)雜。以下是一些利弊,可幫助您確定它們是否適合您的項目需求: 優(yōu)點
缺點
|
|
|
來自: tu324 > 《通訊系統(tǒng)》