一、簡(jiǎn)介
嵌入式系統(tǒng)依靠各種協(xié)議進(jìn)行有效的數(shù)據(jù)交互。本文深入了解并全面比較了三種著名的協(xié)議:串行外設(shè)接口 (SPI)、內(nèi)部集成電路 (I2C) 和通用異步接收器/發(fā)送器 (UART)。這些協(xié)議中的每一個(gè)都有不同的目的,并具有獨(dú)特的規(guī)范和操作原理。了解這些技術(shù)對(duì)于參與電子設(shè)計(jì)或嵌入式系統(tǒng)開(kāi)發(fā)的任何人都至關(guān)重要,因?yàn)檫@些協(xié)議通常構(gòu)成此類(lèi)系統(tǒng)內(nèi)設(shè)備通信的支柱。它們支持微控制器和各種外圍設(shè)備(例如傳感器、存儲(chǔ)設(shè)備和顯示模塊)之間的交互,每種設(shè)備都有獨(dú)特的數(shù)據(jù)傳輸需求。通過(guò)探索他們的工作原理,
2. 什么是SPI(串行外設(shè)接口)?
SPI 是一種同步串行通信接口規(guī)范,主要用于嵌入式系統(tǒng)中的短距離通信。它促進(jìn)主設(shè)備和一個(gè)或多個(gè)從設(shè)備之間的全雙工通信。該接口以其簡(jiǎn)單性和高效性而著稱(chēng),使其成為許多嵌入式系統(tǒng)設(shè)計(jì)人員感興趣的選擇。
SPI 基于四個(gè)基本線路:主輸出從輸入 (MOSI)、主輸入從輸出 (MISO)、串行時(shí)鐘 (SCLK) 和從選擇 (SS)。MOSI 線將數(shù)據(jù)從主設(shè)備傳送到從設(shè)備,而 MISO 線則在相反方向上傳送數(shù)據(jù)。由主設(shè)備控制的 SCLK 線對(duì)通信進(jìn)行調(diào)節(jié),而主設(shè)備使用 SS 線來(lái)選擇要與之通信的從設(shè)備。
2.1. 起源和基本原理
SPI協(xié)議是由摩托羅拉在20世紀(jì)80年代中期開(kāi)發(fā)的,SPI旨在為微控制器和外設(shè)之間提供一種簡(jiǎn)單而高效的數(shù)據(jù)交換方式。
從本質(zhì)上講,SPI 通信依賴(lài)于主設(shè)備和從設(shè)備之間的數(shù)據(jù)傳輸,從而實(shí)現(xiàn)全雙工通信。每個(gè)傳輸至少由兩個(gè)設(shè)備組成:一個(gè)主設(shè)備,用于發(fā)起和控制通信;以及一個(gè)從設(shè)備,用于響應(yīng)主設(shè)備。
在典型的 SPI 傳輸中,主設(shè)備在 SCLK 線上生成時(shí)鐘信號(hào),并通過(guò)將其 SS 線設(shè)置為低電壓電平來(lái)選擇從設(shè)備。然后主設(shè)備和從設(shè)備同時(shí)交換數(shù)據(jù),主設(shè)備通過(guò) MOSI 線路向從設(shè)備發(fā)送數(shù)據(jù),從設(shè)備通過(guò) MISO 線路向主設(shè)備發(fā)送數(shù)據(jù)。傳輸根據(jù)需要持續(xù)多個(gè)時(shí)鐘周期,主設(shè)備最終通過(guò)將所選從設(shè)備的 SS 線返回到高電壓電平來(lái)結(jié)束通信。
通過(guò)控制時(shí)鐘信號(hào)和 SS 線,主設(shè)備可以決定通信速度并選擇與哪些設(shè)備進(jìn)行交互,從而使 SPI 成為一種本質(zhì)上靈活且高效的數(shù)據(jù)交換方式。然而,值得注意的是,系統(tǒng)設(shè)計(jì)人員需要考慮的 SPI 局限性包括缺乏內(nèi)置錯(cuò)誤檢查機(jī)制以及每個(gè)從設(shè)備需要專(zhuān)用 SS 線。
2.2. SPI通訊協(xié)議
SPI 通信協(xié)議圍繞同步數(shù)據(jù)交換,其中數(shù)據(jù)傳輸與共享時(shí)鐘信號(hào)相關(guān)聯(lián)。主設(shè)備在SCLK線上產(chǎn)生時(shí)鐘信號(hào),確保數(shù)據(jù)傳輸和接收同步。數(shù)據(jù)分別在 MOSI 和 MISO 線路上移入和移出,從而實(shí)現(xiàn)同時(shí)全雙工通信。
為了啟動(dòng)通信,主設(shè)備通過(guò)將其 SS 線拉低來(lái)選擇從設(shè)備。然后主設(shè)備在 MOSI 線上向從設(shè)備發(fā)送數(shù)據(jù),同時(shí)在 MISO 線上從從設(shè)備接收數(shù)據(jù)。該過(guò)程根據(jù)需要持續(xù)多個(gè)時(shí)鐘周期,主器件通過(guò)將所選從器件的 SS 線返回到高電壓電平來(lái)終止通信。
SPI 通信速度取決于所使用的時(shí)鐘頻率。例如,4 MHz 的時(shí)鐘頻率可實(shí)現(xiàn) 4 Mbps 的最大數(shù)據(jù)速率。這種高數(shù)據(jù)傳輸速率使 SPI 成為需要快速高效數(shù)據(jù)交換的應(yīng)用的絕佳選擇。
值得注意的是,SPI 系統(tǒng)中的每個(gè)從設(shè)備都需要來(lái)自主設(shè)備的專(zhuān)用 SS 線。在可用 GPIO 引腳數(shù)量有限的資源受限環(huán)境中必須考慮此限制。
另一個(gè)考慮因素是 SPI 缺乏內(nèi)置的錯(cuò)誤檢查機(jī)制。因此,可能需要在軟件級(jí)別實(shí)施額外的錯(cuò)誤檢查和處理過(guò)程以確保數(shù)據(jù)完整性。
2.3. SPI的優(yōu)點(diǎn)和缺點(diǎn)
在評(píng)估 SPI 對(duì)不同應(yīng)用的適用性時(shí),了解 SPI 的優(yōu)點(diǎn)和缺點(diǎn)至關(guān)重要。以下是需要考慮的關(guān)鍵點(diǎn):
2.3.1. SPI的優(yōu)點(diǎn):
SPI 具有多種優(yōu)勢(shì),使其成為嵌入式系統(tǒng)中通信的流行選擇。這些優(yōu)勢(shì)包括|:
- 高速數(shù)據(jù)傳輸: 憑借其同步通信機(jī)制,SPI 可實(shí)現(xiàn)快速高效的數(shù)據(jù)傳輸,非常適合需要高速通信的應(yīng)用。與 UART 和 I2C 等其他串行通信協(xié)議相比,SPI 提供明顯更高的數(shù)據(jù)傳輸速率。例如,時(shí)鐘頻率為 10 MHz,每次傳輸 8 位,可實(shí)現(xiàn)的最大數(shù)據(jù)速率為 10 Mbps。這允許主設(shè)備和從設(shè)備之間快速交換數(shù)據(jù),從而增強(qiáng)整體系統(tǒng)性能。
- 全雙工通信: SPI 的主要優(yōu)勢(shì)之一是它能夠支持同時(shí)發(fā)送和接收數(shù)據(jù)。當(dāng)主設(shè)備在主設(shè)備輸出從設(shè)備輸入 (MOSI) 線上向從設(shè)備發(fā)送數(shù)據(jù)時(shí),它可以在同一時(shí)鐘周期內(nèi)通過(guò)主設(shè)備輸入從設(shè)備輸出 (MISO) 線路從從設(shè)備接收數(shù)據(jù)。這種全雙工功能在實(shí)時(shí)雙向數(shù)據(jù)交換至關(guān)重要的應(yīng)用中特別有利,例如傳感器接口或數(shù)據(jù)采集系統(tǒng)。
- 多功能性和易于實(shí)施: SPI 的簡(jiǎn)單性和靈活性使其在各種嵌入式系統(tǒng)中相對(duì)容易實(shí)施。該接口可以使用微控制器中的專(zhuān)用硬件模塊集成或以軟件實(shí)現(xiàn),具體取決于應(yīng)用的具體要求。其簡(jiǎn)單的設(shè)計(jì)和明確定義的通信協(xié)議簡(jiǎn)化了開(kāi)發(fā)過(guò)程,減少了時(shí)間和精力。此外,許多微控制器提供內(nèi)置 SPI 外設(shè),無(wú)需額外的外部組件。
- 任意數(shù)據(jù)大小: SPI 對(duì)傳輸?shù)臄?shù)據(jù)大小沒(méi)有限制。主設(shè)備可以根據(jù)需要繼續(xù)移出數(shù)據(jù),從而允許傳輸任意長(zhǎng)度的數(shù)據(jù)。此功能在需要傳輸大量數(shù)據(jù)的場(chǎng)景(例如內(nèi)存或顯示界面)中尤其有用。此外,SPI支持不同的數(shù)據(jù)格式,包括8位、16位甚至自定義的數(shù)據(jù)格式,提供了滿(mǎn)足各種數(shù)據(jù)要求的靈活性。
- 支持多個(gè)從設(shè)備: SPI 允許同一總線上的一個(gè)主設(shè)備和多個(gè)從設(shè)備之間進(jìn)行通信。每個(gè)從設(shè)備都分配有一條專(zhuān)用的從設(shè)備選擇 (SS) 線,主設(shè)備可以控制該線來(lái)選擇所需的從設(shè)備進(jìn)行通信。這使得系統(tǒng)能夠使用單個(gè) SPI 總線與多個(gè)外設(shè)(例如傳感器、執(zhí)行器或存儲(chǔ)芯片)交互,從而簡(jiǎn)化系統(tǒng)設(shè)計(jì)并減少所需的通信接口數(shù)量。
2.3.2. SPI的缺點(diǎn):
盡管有其優(yōu)點(diǎn),SPI 也有一些限制和需要考慮的因素。這些包括:
- 缺乏內(nèi)置錯(cuò)誤檢查: SPI 的一個(gè)顯著缺點(diǎn)是缺乏內(nèi)置錯(cuò)誤檢查機(jī)制。雖然其高速通信是一個(gè)顯著的優(yōu)勢(shì),但它也為由于信號(hào)噪聲、時(shí)鐘抖動(dòng)或電壓尖峰等因素造成的潛在數(shù)據(jù)錯(cuò)誤留下了空間。在數(shù)據(jù)完整性至關(guān)重要的系統(tǒng)中,可能需要在軟件級(jí)別實(shí)施額外的錯(cuò)誤檢查和處理過(guò)程。這可能涉及校驗(yàn)和、CRC(循環(huán)冗余校驗(yàn))或數(shù)據(jù)包確認(rèn)機(jī)制等技術(shù),以確??煽康臄?shù)據(jù)傳輸。
- 可擴(kuò)展性有限: 隨著 SPI 總線中設(shè)備數(shù)量的增加,所需從機(jī)選擇 (SS) 線的數(shù)量也會(huì)增加,因?yàn)槊總€(gè)從機(jī)設(shè)備都需要來(lái)自主機(jī)的專(zhuān)用 SS 線。在資源有限的環(huán)境中,這會(huì)很快耗盡可用通用輸入/輸出 (GPIO) 引腳的數(shù)量。此外,更多數(shù)量的設(shè)備可能會(huì)導(dǎo)致功耗和總線復(fù)雜性增加。因此,在設(shè)計(jì)基于SPI的系統(tǒng)時(shí),必須仔細(xì)考慮從設(shè)備的數(shù)量和可用資源。
- 不適合長(zhǎng)距離通信: 雖然 SPI 擅長(zhǎng)嵌入式系統(tǒng)內(nèi)的短距離通信,但它不太適合長(zhǎng)距離通信。隨著速度的增加和距離的增加,SPI 變得更容易受到信號(hào)衰減、電磁干擾和時(shí)序問(wèn)題等問(wèn)題的影響。對(duì)于長(zhǎng)距離通信,通常首選速度較慢但更強(qiáng)大的協(xié)議,例如 RS-485 或 CAN,因?yàn)樗鼈兪菍?zhuān)門(mén)為克服這些挑戰(zhàn)而設(shè)計(jì)的。
- 功耗: 在電源效率至關(guān)重要的應(yīng)用中,SPI 可能不是最佳選擇。與 I2C 等其他通信協(xié)議不同,由于 SPI 的同步特性以及每個(gè)從設(shè)備需要額外的 SS 線,因此 SPI 通常需要更多功率。這可能是電池供電設(shè)備或優(yōu)先考慮降低功耗的應(yīng)用中的一個(gè)問(wèn)題。應(yīng)采用謹(jǐn)慎的電源管理技術(shù)來(lái)減輕此限制,例如在不使用時(shí)選擇性地啟用或禁用從屬設(shè)備。
3. 什么是I2C(內(nèi)部集成電路)?
內(nèi)部集成電路(I2C)是一種同步串行通信協(xié)議,最初由飛利浦半導(dǎo)體(現(xiàn)為恩智浦半導(dǎo)體)于 20 世紀(jì) 80 年代初開(kāi)發(fā)。它專(zhuān)為同一電路板上不同組件之間的短距離板內(nèi)通信而設(shè)計(jì),從而實(shí)現(xiàn)信息交換。I2C 利用時(shí)鐘信號(hào)進(jìn)行同步,并提供獨(dú)特的功能,允許多個(gè)主設(shè)備和從設(shè)備在單個(gè)通信設(shè)置上共存,從而實(shí)現(xiàn)靈活而復(fù)雜的架構(gòu)。該協(xié)議利用兩條雙向開(kāi)漏線,稱(chēng)為串行數(shù)據(jù)線 (SDA) 和串行時(shí)鐘線 (SCL),它們通過(guò)電阻上拉并由 I2C 總線上的所有設(shè)備使用??偩€上的設(shè)備可以充當(dāng)發(fā)送器(主機(jī))或接收器(從機(jī))。3.1。起源和基本原理
I2C 協(xié)議由飛利浦半導(dǎo)體于 20 世紀(jì) 80 年代開(kāi)發(fā),作為一種簡(jiǎn)單的板內(nèi)通信解決方案,由于其簡(jiǎn)單性和高效性而獲得廣泛采用。I2C 縮寫(xiě)代表內(nèi)部集成電路,強(qiáng)調(diào)其促進(jìn)同一板上不同集成電路 (IC) 之間通信的目的。
I2C 通信的基本原理圍繞“主設(shè)備”和“從設(shè)備”的概念。主設(shè)備通過(guò)提供時(shí)鐘信號(hào)并控制整個(gè)傳輸過(guò)程來(lái)發(fā)起通信,而從設(shè)備則響應(yīng)主設(shè)備的請(qǐng)求并參與數(shù)據(jù)交換。
I2C 的一個(gè)值得注意的方面是其尋址系統(tǒng),其中連接到 I2C 總線的每個(gè)設(shè)備都有一個(gè)唯一的地址,主設(shè)備使用該地址與其進(jìn)行通信。這種尋址方案允許多個(gè)設(shè)備在總線上共存而不會(huì)發(fā)生沖突,從而促進(jìn)高效可靠的通信。
I2C 通信通過(guò)兩條線進(jìn)行:串行數(shù)據(jù)線 (SDA) 和串行時(shí)鐘線 (SCL)。SDA線負(fù)責(zé)承載數(shù)據(jù),而SCL線提供同步數(shù)據(jù)傳輸?shù)臅r(shí)鐘信號(hào)。此設(shè)置簡(jiǎn)化了連接過(guò)程并支持并發(fā)傳輸和接收數(shù)據(jù)。I2C 中的數(shù)據(jù)傳輸是面向位的,每個(gè)字節(jié)由八個(gè)數(shù)據(jù)位組成。
作為一種多主協(xié)議,I2C 允許多個(gè)主設(shè)備連接到總線。這種靈活性使任何主站都可以發(fā)起通信,從而使該協(xié)議適合復(fù)雜的系統(tǒng)。此外,I2C 還結(jié)合了總線仲裁和沖突檢測(cè)機(jī)制,以確保多個(gè)主設(shè)備同時(shí)控制總線時(shí)的有序通信。這種穩(wěn)健性有助于提高 I2C 作為通信協(xié)議的多功能性和可靠性。
3.2. I2C通訊協(xié)議
I2C 通信協(xié)議遵循主從配置,其中一個(gè)或多個(gè)主設(shè)備控制一個(gè)或多個(gè)從設(shè)備。主設(shè)備提供時(shí)鐘信號(hào)并發(fā)起通信,從設(shè)備響應(yīng)主設(shè)備的請(qǐng)求并參與數(shù)據(jù)交換。I2C 中的通信是雙向的,允許主設(shè)備和從設(shè)備發(fā)送和接收數(shù)據(jù)。
I2C 的一個(gè)顯著特征是其兩線接口,包括串行數(shù)據(jù)線 (SDA) 和串行時(shí)鐘線 (SCL)。SDA線負(fù)責(zé)數(shù)據(jù)傳輸,而SCL線提供時(shí)鐘信號(hào),保證設(shè)備之間的同步。兩條線路都是雙向的,允許數(shù)據(jù)雙向流動(dòng)。它們是漏極開(kāi)路的,這意味著設(shè)備可以將線路拉低(0 伏)以指示邏輯“0”,或讓它浮高(高達(dá)指定電壓,通常為 3.3V 或 5V)以指示邏輯“1”。上拉電阻是必要的,以確保當(dāng)沒(méi)有設(shè)備主動(dòng)將線路拉低時(shí),線路返回到高狀態(tài)。
在 I2C 事務(wù)中,主機(jī)通過(guò)創(chuàng)建 START 條件來(lái)啟動(dòng)該過(guò)程,在 SCL 線為高電平時(shí)將 SDA 線拉低。該信號(hào)提醒總線上的所有設(shè)備傳輸即將開(kāi)始。然后,主設(shè)備發(fā)送它想要與之通信的從設(shè)備的 7 位或 10 位地址,并附有一個(gè)指示是否打算寫(xiě)入從設(shè)備 (0) 或從從設(shè)備讀取 (1) 的位。
收到地址后,被尋址的從機(jī)通過(guò)在下一個(gè)時(shí)鐘脈沖期間將 SDA 線拉低來(lái)確認(rèn)接收。一旦主機(jī)收到此確認(rèn),它就可以繼續(xù)發(fā)送或接收數(shù)據(jù)。每個(gè)數(shù)據(jù)字節(jié)后面都有一個(gè)確認(rèn)位。當(dāng)主機(jī)完成數(shù)據(jù)的發(fā)送或接收時(shí),它會(huì)產(chǎn)生一個(gè)停止條件,在該條件下,它會(huì)釋放SDA線以使其變?yōu)楦唠娖?,而SCL線保持高電平。
為了保持總線的完整性,I2C 協(xié)議采用了錯(cuò)誤檢查措施。其中包括在多主系統(tǒng)中使用確認(rèn)位以及仲裁和沖突檢測(cè)機(jī)制。即使多個(gè)主設(shè)備爭(zhēng)奪總線控制權(quán),這些功能也能確保通信平穩(wěn)可靠。
I2C支持不同的速度模式,以滿(mǎn)足不同的應(yīng)用需求。標(biāo)準(zhǔn) I2C 設(shè)備通常支持高達(dá)每秒 100K 位的數(shù)據(jù)速率。快速模式設(shè)備可將其擴(kuò)展至每秒 400K 位,而高速設(shè)備可實(shí)現(xiàn)高達(dá)每秒 3.4Mbits 的數(shù)據(jù)速率。這些不同的速度模式使 I2C 能夠滿(mǎn)足各種設(shè)備的需求,從較慢、低功耗的組件到更快、更復(fù)雜的設(shè)備。
3.3. I2C的優(yōu)點(diǎn)和缺點(diǎn)
3.3.1. I2C的優(yōu)點(diǎn)
- 簡(jiǎn)單性和線路效率: I2C 僅使用兩條線路(SDA(串行數(shù)據(jù)線)和 SCL(串行時(shí)鐘線))提供簡(jiǎn)單而高效的通信解決方案,而與總線上的設(shè)備數(shù)量無(wú)關(guān)。這種簡(jiǎn)單性降低了電路設(shè)計(jì)的復(fù)雜性,最大限度地減少了 PCB(印刷電路板)上的連接器和走線數(shù)量,從而節(jié)省了成本并實(shí)現(xiàn)了緊湊的系統(tǒng)設(shè)計(jì)。
- 多主多從配置: I2C支持多主多從配置,允許多個(gè)主設(shè)備與同一總線上的多個(gè)從設(shè)備進(jìn)行通信。這種靈活性使得分布式處理架構(gòu)的實(shí)現(xiàn)成為可能,其中多個(gè)微控制器、傳感器和其他外設(shè)可以無(wú)縫地交換數(shù)據(jù)。它促進(jìn)復(fù)雜嵌入式系統(tǒng)內(nèi)的并行通信通道和實(shí)時(shí)數(shù)據(jù)交換。
- 尋址方案: I2C 采用內(nèi)置尋址方案,可實(shí)現(xiàn)主設(shè)備和指定從設(shè)備之間的直接通信,無(wú)需額外的線路來(lái)選擇設(shè)備。每個(gè) I2C 設(shè)備都有一個(gè)唯一的地址,通常為 7 或 10 位長(zhǎng),可實(shí)現(xiàn)高效的數(shù)據(jù)路由,并且無(wú)需手動(dòng)配置或外部解碼邏輯。該尋址方案在單個(gè)總線上支持多達(dá) 128 個(gè)(7 位尋址)或 1024 個(gè)(10 位尋址)設(shè)備。
- 速度模式: I2C 支持不同的速度模式,以適應(yīng)各種設(shè)備和應(yīng)用。標(biāo)準(zhǔn)模式(高達(dá)每秒 100K 位)適合速度較慢的外設(shè)和低功耗組件??焖倌J剑ǜ哌_(dá)每秒 400K 位)可實(shí)現(xiàn)更快的數(shù)據(jù)傳輸,使其適合中速設(shè)備。高速模式(高達(dá)每秒 3.4Mbits)可滿(mǎn)足需要設(shè)備之間快速數(shù)據(jù)交換的高性能應(yīng)用程序的需求。選擇合適的速度模式取決于系統(tǒng)的具體要求。
- 同步通信: I2C 是一種同步通信協(xié)議,這意味著它依靠時(shí)鐘信號(hào)來(lái)同步設(shè)備之間的數(shù)據(jù)傳輸。主設(shè)備產(chǎn)生時(shí)鐘信號(hào),保證精確的時(shí)序協(xié)調(diào)。這種同步可以實(shí)現(xiàn)可靠、準(zhǔn)確的數(shù)據(jù)傳輸,這對(duì)于數(shù)據(jù)完整性至關(guān)重要的應(yīng)用至關(guān)重要。I2C 的同步特性簡(jiǎn)化了通信接口的設(shè)計(jì)并有利于錯(cuò)誤檢測(cè)和糾正。
3.3.2. I2C的缺點(diǎn)
- 距離限制: I2C 主要設(shè)計(jì)用于單個(gè)電路板內(nèi)或位置較近的組件之間的短距離通信??偩€的電容和上拉電阻的電阻限制了可實(shí)現(xiàn)的最大通信距離。隨著 SDA 和 SCL 線長(zhǎng)度的增加,總電容也會(huì)增加,從而導(dǎo)致上升時(shí)間變慢和潛在的信號(hào)衰減。對(duì)于長(zhǎng)距離通信,其他協(xié)議,如 UART(通用異步接收器/發(fā)送器)或 SPI(串行外設(shè)接口)可能更合適。
- 速度限制: 雖然 I2C 支持不同的速度模式,但其高速模式(高達(dá)每秒 3.4Mbits)可能與 SPI 等其他協(xié)議的數(shù)據(jù)傳輸速率不匹配。需要極高速通信的應(yīng)用程序可能會(huì)受益于提供更快數(shù)據(jù)速率的替代協(xié)議。然而,在選擇通信協(xié)議時(shí),考慮速度、復(fù)雜性和系統(tǒng)要求之間的權(quán)衡非常重要。
- 上拉電阻: I2C 需要使用連接到 SDA 和 SCL 線的上拉電阻。這些電阻器維持總線上默認(rèn)的高邏輯電平。選擇適當(dāng)?shù)碾娮柚祵?duì)于確??煽康男盘?hào)電平和正確的總線操作至關(guān)重要。電阻值不足或過(guò)高都會(huì)影響信號(hào)完整性并導(dǎo)致通信錯(cuò)誤。上拉電阻值的計(jì)算取決于總線電容、所需上升時(shí)間和電源電壓等因素。
- 尋址限制: I2C 協(xié)議支持有限數(shù)量的唯一地址,通常為 7 或 10 位長(zhǎng),這限制了可連接到單個(gè)總線的設(shè)備的最大數(shù)量。在設(shè)備數(shù)量較多的場(chǎng)景下,可能會(huì)出現(xiàn)地址沖突,需要采取地址復(fù)用或協(xié)議轉(zhuǎn)換器等額外措施來(lái)克服限制。仔細(xì)規(guī)劃和考慮設(shè)備尋址方案對(duì)于避免沖突并確保成功通信至關(guān)重要。
- 時(shí)鐘拉伸: I2C 允許從設(shè)備在數(shù)據(jù)傳輸期間通過(guò)稱(chēng)為時(shí)鐘拉伸的機(jī)制減慢主設(shè)備的時(shí)鐘信號(hào)。雖然時(shí)鐘拉伸可確保同步并防止數(shù)據(jù)丟失,但它可能會(huì)引入時(shí)序延遲,從而影響整體系統(tǒng)性能,尤其是在時(shí)間關(guān)鍵型應(yīng)用中。正確處理時(shí)鐘拉伸并理解其對(duì)系統(tǒng)時(shí)序的影響對(duì)于可靠的 I2C 通信非常重要。
4. 什么是UART(通用異步接收器/發(fā)送器)?
UART 是通用異步接收器/發(fā)送器的縮寫(xiě),是廣泛用于異步串行通信的基本硬件通信協(xié)議。它作為微控制器和外圍設(shè)備之間的重要接口,促進(jìn)通過(guò)串行傳輸?shù)臄?shù)據(jù)交換。
UART 的核心是將來(lái)自處理器的數(shù)據(jù)字節(jié)轉(zhuǎn)換為連續(xù)的數(shù)據(jù)位流,然后通過(guò)單條通信線路串行傳輸。類(lèi)似地,傳入的數(shù)據(jù)以相反的順序轉(zhuǎn)換以供接收設(shè)備處理。與同步通信協(xié)議不同,UART 不依賴(lài)共享時(shí)鐘信號(hào)來(lái)進(jìn)行數(shù)據(jù)同步。
通過(guò) UART 傳輸?shù)拿總€(gè)數(shù)據(jù)字都由各種組件組成。它以起始位開(kāi)始,指示數(shù)據(jù)幀的開(kāi)始。數(shù)據(jù)位跟隨起始位并代表正在傳輸?shù)膶?shí)際信息??蛇x奇偶校驗(yàn)位可用于錯(cuò)誤檢測(cè),使接收器能夠識(shí)別并糾正傳輸錯(cuò)誤。最后,一個(gè)或兩個(gè)停止位標(biāo)記數(shù)據(jù)幀的結(jié)束,在傳輸下一幀之前提供必要的時(shí)間間隙。
UART 在嵌入式系統(tǒng)中無(wú)處不在,在工業(yè)自動(dòng)化、電信、汽車(chē)電子和消費(fèi)電子等不同領(lǐng)域都有應(yīng)用。它們?cè)谖⒖刂破髋c傳感器、顯示器、內(nèi)存模塊和無(wú)線收發(fā)器等外圍設(shè)備之間的通信方面發(fā)揮著至關(guān)重要的作用。
4.1. 起源和基本原理
UART 技術(shù)的起源可以追溯到計(jì)算的早期,當(dāng)時(shí)獨(dú)立的 UART 芯片在 20 世紀(jì) 60 年代開(kāi)發(fā)出來(lái)。隨著集成電路的進(jìn)步,UART 功能被集成到微控制器和微處理器中,從而實(shí)現(xiàn)更緊湊、更高效的實(shí)施。
UART 基于兩個(gè)移位寄存器之間的交互進(jìn)行操作:發(fā)送移位寄存器 (TSR) 和接收移位寄存器 (RSR)。該過(guò)程從處理器將一個(gè)字節(jié)的數(shù)據(jù)寫(xiě)入發(fā)送保持寄存器(THR)開(kāi)始。然后,數(shù)據(jù)被傳輸?shù)桨l(fā)送移位寄存器 (TSR),在那里進(jìn)行串行化,將其轉(zhuǎn)換為包含起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位的連續(xù)位流。
串行化數(shù)據(jù)通過(guò)傳輸數(shù)據(jù) (TXD) 線以波特率發(fā)生器確定的速度逐位傳輸。波特率發(fā)生器由可編程時(shí)鐘源驅(qū)動(dòng),設(shè)置數(shù)據(jù)傳輸率,通常稱(chēng)為波特率。在接收端,UART 設(shè)備捕獲來(lái)自接收數(shù)據(jù) (RXD) 線的傳入位,在接收移位寄存器 (RSR) 內(nèi)執(zhí)行反序列化,并將數(shù)據(jù)字節(jié)存儲(chǔ)在接收緩沖寄存器 (RBR) 中,以供后續(xù)處理。處理器。
UART 的硬件實(shí)現(xiàn)可實(shí)現(xiàn)高效、自主的數(shù)據(jù)傳輸,減輕處理器處理低級(jí)通信任務(wù)的負(fù)擔(dān)。UART 通信的這種異步特性使處理器能夠?qū)W⒂趫?zhí)行更高級(jí)別的功能,并增強(qiáng)系統(tǒng)的整體性能和響應(yīng)能力。
4.2. UART通訊協(xié)議
UART通信協(xié)議的特點(diǎn)是通過(guò)兩條專(zhuān)用線發(fā)送和接收數(shù)據(jù):發(fā)送(TX)線和接收(RX)線。與依賴(lài)共享時(shí)鐘信號(hào)的同步通信協(xié)議不同,UART 以異步模式運(yùn)行,兩個(gè)通信設(shè)備在啟動(dòng)通信之前必須就波特率達(dá)成一致。
UART 數(shù)據(jù)幀由多個(gè)組件組成。它以起始位開(kāi)始,該起始位始終設(shè)置為邏輯低 (0),并用作指示數(shù)據(jù)幀開(kāi)始的信號(hào)機(jī)制。在起始位之后,實(shí)際數(shù)據(jù)位以順序方式傳輸,范圍從 5 到 9 位,具體取決于配置??梢园粋€(gè)可選的奇偶校驗(yàn)位,用于錯(cuò)誤檢測(cè)和糾正目的。奇偶校驗(yàn)位允許接收器通過(guò)檢查奇偶校驗(yàn)錯(cuò)誤來(lái)驗(yàn)證接收數(shù)據(jù)的完整性。
在數(shù)據(jù)位之后,一或兩個(gè)停止位標(biāo)記數(shù)據(jù)幀的結(jié)束。這些停止位始終設(shè)置為邏輯高 (1),并在連續(xù)數(shù)據(jù)幀之間提供時(shí)間間隙,確保發(fā)送器和接收器之間的正確同步。
在數(shù)據(jù)傳輸期間,UART發(fā)送器將傳輸線從空閑狀態(tài)(邏輯高)拉至起始位(邏輯低),指示數(shù)據(jù)幀的開(kāi)始。然后接收器以商定的波特率讀取后續(xù)位。接收到數(shù)據(jù)位后,接收器預(yù)計(jì)會(huì)遇到設(shè)置為邏輯高的停止位。如果接收到的位不高,則表明傳輸錯(cuò)誤。
UART 通信的顯著特征之一是其全雙工性質(zhì),可以同時(shí)發(fā)送和接收數(shù)據(jù)。這是通過(guò)單獨(dú)的發(fā)送和接收線路實(shí)現(xiàn)的,允許雙向數(shù)據(jù)流。此外,UART通信協(xié)議支持設(shè)備到設(shè)備通信,無(wú)需主從配置,適合各種應(yīng)用。
憑借其簡(jiǎn)單性、多功能性和廣泛采用,UART 仍然是嵌入式系統(tǒng)領(lǐng)域的重要通信協(xié)議,并在微控制器和外圍設(shè)備之間實(shí)現(xiàn)無(wú)縫數(shù)據(jù)交換方面發(fā)揮著關(guān)鍵作用。
4.3. UART的優(yōu)點(diǎn)和缺點(diǎn)
4.3.1. UART的優(yōu)點(diǎn)
- 實(shí)施簡(jiǎn)單方便: UART 通信實(shí)施起來(lái)很簡(jiǎn)單,只需要兩根線即可實(shí)現(xiàn)完整的雙工數(shù)據(jù)傳輸(TX 和 RX 線)。這種簡(jiǎn)單性使得系統(tǒng)設(shè)置變得簡(jiǎn)單且經(jīng)濟(jì)高效,尤其是在資源受限的嵌入式系統(tǒng)中。
- 全雙工通信: UART 可同時(shí)接收和傳輸數(shù)據(jù),從而有效利用通信線路。兩個(gè)設(shè)備都可以獨(dú)立發(fā)送和接收數(shù)據(jù),無(wú)需顯式握手。
- 獨(dú)立操作: 沒(méi)有時(shí)鐘信號(hào)簡(jiǎn)化了接線,并允許設(shè)備獨(dú)立工作,最大限度地減少同步問(wèn)題。每個(gè)設(shè)備都基于其內(nèi)部時(shí)鐘運(yùn)行,使得 UART 非常適合設(shè)備具有不同時(shí)鐘源或時(shí)鐘同步具有挑戰(zhàn)性的應(yīng)用。
- 支持更長(zhǎng)的數(shù)據(jù)幀: UART 支持具有 5 至 9 個(gè)數(shù)據(jù)位的數(shù)據(jù)幀,提供了在特定應(yīng)用中適應(yīng)不同數(shù)據(jù)大小的靈活性。當(dāng)處理非標(biāo)準(zhǔn)數(shù)據(jù)格式或需要大量位數(shù)來(lái)表示數(shù)據(jù)時(shí),此功能特別有用。
- 點(diǎn)對(duì)點(diǎn)通信: UART 有助于兩個(gè)設(shè)備之間的直接通信,無(wú)需主設(shè)備或從設(shè)備配置。它允許點(diǎn)對(duì)點(diǎn)通信,使設(shè)備能夠在沒(méi)有中央控制單元的情況下無(wú)縫交換數(shù)據(jù)。這使得 UART 適用于無(wú)線傳感器網(wǎng)絡(luò)或設(shè)備互連等應(yīng)用。
4.3.2. UART的缺點(diǎn)
- 同步要求: UART 的異步特性需要將接收器和發(fā)送器預(yù)設(shè)為相同的波特率,以便正確傳輸數(shù)據(jù)。在數(shù)據(jù)速率不斷變化的情況下或設(shè)備以不同時(shí)鐘速度運(yùn)行時(shí),此要求可能不切實(shí)際。在這種情況下,可能需要額外的措施,例如動(dòng)態(tài)波特率調(diào)整或流量控制協(xié)議。
- 潛在的同步問(wèn)題: 如果通信設(shè)備的系統(tǒng)時(shí)鐘存在變化,則缺乏專(zhuān)用時(shí)鐘線可能會(huì)導(dǎo)致同步問(wèn)題。時(shí)鐘漂移或時(shí)鐘源不一致會(huì)導(dǎo)致時(shí)序錯(cuò)誤并影響數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。
- 有限的錯(cuò)誤檢測(cè): UART 的錯(cuò)誤檢測(cè)僅限于奇偶校驗(yàn),奇偶校驗(yàn)會(huì)向數(shù)據(jù)幀添加一個(gè)額外的位以用于錯(cuò)誤檢測(cè)。然而,奇偶校驗(yàn)只能檢測(cè)奇數(shù)或偶數(shù)個(gè)位錯(cuò)誤,并且不如循環(huán)冗余校驗(yàn) (CRC) 等更高級(jí)的錯(cuò)誤檢查方法強(qiáng)大。此限制可能會(huì)導(dǎo)致未檢測(cè)到的錯(cuò)誤,特別是在容易出現(xiàn)高水平噪聲或干擾的環(huán)境中。
- 缺乏尋址: UART 本身并不支持尋址,這使得在同一總線上本地容納多個(gè)設(shè)備變得具有挑戰(zhàn)性。如果沒(méi)有尋址,總線上的所有設(shè)備都會(huì)接收傳輸?shù)臄?shù)據(jù),需要額外的機(jī)制(例如基于軟件的尋址)來(lái)區(qū)分和處理預(yù)期數(shù)據(jù)。
- 速度有限: UART 的速度受到其設(shè)計(jì)和實(shí)現(xiàn)的限制。雖然這種限制對(duì)于慢速通信系統(tǒng)來(lái)說(shuō)不是問(wèn)題,但對(duì)于高速應(yīng)用來(lái)說(shuō)可能是一個(gè)重大限制。例如,標(biāo)準(zhǔn) UART 接口可能支持每秒 115200 位的最大速度(波特率),這對(duì)于某些高速應(yīng)用(如實(shí)時(shí)系統(tǒng)或高速數(shù)據(jù)記錄)可能不夠。在這種情況下,替代通信協(xié)議或更高速的接口(例如 SPI 或以太網(wǎng))可能更合適。
5. 詳細(xì)比較:SPI、I2C、UART
5.1. 速度和數(shù)據(jù)吞吐量
速度
在比較原始數(shù)據(jù)速度時(shí),SPI 成為三者中最快的協(xié)議。它的時(shí)鐘速度高達(dá) 10 MHz,并且可以在某些微控制器上實(shí)現(xiàn)更高的速度。接下來(lái)是 I2C,提供 100 kHz 的標(biāo)準(zhǔn)模式運(yùn)行速度、400 kHz 的快速模式以及速度高達(dá) 3.4 MHz 的高速模式。另一方面,UART 通常以 9600、19200 或 115200 比特每秒 (bps) 等速度運(yùn)行,使其成為三者中最慢的。
數(shù)據(jù)吞吐量
數(shù)據(jù)吞吐量不僅受到速度的影響,還受到速度利用效率的影響。SPI是全雙工協(xié)議,可以同時(shí)發(fā)送和接收數(shù)據(jù),效率很高。此外,由于 SPI 不使用尋址,因此避免了傳輸?shù)刂纷止?jié)的開(kāi)銷(xiāo),從而進(jìn)一步提高了吞吐量。
相比之下,I2C 作為半雙工協(xié)議運(yùn)行,在其通信中包含地址和確認(rèn)位。盡管時(shí)鐘速度不錯(cuò),但這會(huì)帶來(lái)額外的開(kāi)銷(xiāo)并降低數(shù)據(jù)吞吐量。雖然 I2C 確實(shí)支持多主機(jī)設(shè)置,但仲裁和沖突檢測(cè)的需求可能會(huì)進(jìn)一步降低有效數(shù)據(jù)吞吐量。
UART 與 SPI 類(lèi)似,作為全雙工協(xié)議運(yùn)行。然而,它通常以較慢的速度運(yùn)行。此外,UART 在每個(gè)數(shù)據(jù)幀中包含起始位和停止位以實(shí)現(xiàn)同步,這會(huì)增加開(kāi)銷(xiāo)并降低有效數(shù)據(jù)吞吐量。
5.2. 能量消耗
在嵌入式系統(tǒng)中,特別是在電池供電的應(yīng)用中,考慮通信協(xié)議的功耗至關(guān)重要。SPI 的功耗
SPI 具有高時(shí)鐘速度和全雙工通信,通常會(huì)導(dǎo)致更高的功耗。每次數(shù)據(jù)傳輸都涉及時(shí)鐘脈沖,時(shí)鐘速度越高,消耗的功率就越多。此外,SPI 需要多條線路進(jìn)行通信,每條線路都會(huì)增加功耗。不過(guò),SPI 確實(shí)有一個(gè)優(yōu)點(diǎn):它不一定需要在數(shù)據(jù)和時(shí)鐘線上加上拉電阻,這與 I2C 不同,可以在一定程度上降低功耗。建議查閱所使用的特定 SPI 設(shè)備的數(shù)據(jù)表以了解詳細(xì)的功耗規(guī)格。I2C 的功耗
由于速度較慢,I2C 的功耗比 SPI 低。此外,其兩線配置需要維護(hù)的線路更少,從而降低了靜態(tài)功耗。然而,I2C 中數(shù)據(jù)和時(shí)鐘線上需要上拉電阻,這會(huì)增加其功耗。I2C的功耗根據(jù)上拉電阻值和總線電容等因素而變化。對(duì)于精確的功耗數(shù)據(jù),建議參考 I2C 器件的數(shù)據(jù)表。
UART的功耗
UART 的功耗通常低于 SPI 和 I2C,主要是因?yàn)槠鋽?shù)據(jù)速率較慢。每單位時(shí)間的轉(zhuǎn)換越少,動(dòng)態(tài)功耗就越低。然而,在空閑模式下,UART 可能會(huì)消耗更多功率,因?yàn)樗鼘⒕€路保持在邏輯“高”狀態(tài)。然而,許多 UART 實(shí)現(xiàn)都包含省電模式,例如睡眠模式,當(dāng) UART 不主動(dòng)傳輸時(shí),該模式可顯著降低功耗。詳細(xì)功耗信息建議參考具體UART器件的數(shù)據(jù)手冊(cè)。5.3.復(fù)雜性和易于實(shí)施
在系統(tǒng)中實(shí)現(xiàn)通信協(xié)議的復(fù)雜性取決于多種因素,包括要連接的設(shè)備數(shù)量、錯(cuò)誤檢查的需要、硬件支持的可用性以及編程支持的級(jí)別
SPI 的復(fù)雜性和易于實(shí)施
SPI 實(shí)現(xiàn)屬于中等復(fù)雜度范圍。每個(gè)設(shè)備需要四根電線,這會(huì)使硬件設(shè)計(jì)變得麻煩,特別是當(dāng)涉及多個(gè)設(shè)備時(shí)。然而,只要一次只有一個(gè)設(shè)備進(jìn)行通信,無(wú)需尋址就可以使代碼實(shí)現(xiàn)變得簡(jiǎn)單。值得注意的是,SPI 通常需要更多的軟件控制,特別是在處理多個(gè)設(shè)備時(shí),因?yàn)槲⒖刂破鞅仨毠芾韱为?dú)的片選 (CS) 線。使用 Arduino 或類(lèi)似的微控制器可以通過(guò)社區(qū)提供的可用庫(kù)和示例代碼來(lái)簡(jiǎn)化流程。
I2C 的復(fù)雜性和易于實(shí)施
I2C 在復(fù)雜性和易于實(shí)現(xiàn)之間取得了平衡。其兩線接口簡(jiǎn)化了硬件設(shè)計(jì),尤其是在涉及多個(gè)設(shè)備的設(shè)置中。然而,其尋址方案以及啟動(dòng)和停止條件的管理增加了軟件方面的復(fù)雜性。盡管如此,I2C 的內(nèi)置錯(cuò)誤檢查功能(例如確認(rèn) (ACK) 位和仲裁)可以簡(jiǎn)化魯棒通信系統(tǒng)的設(shè)計(jì)。參考特定 I2C 設(shè)備的數(shù)據(jù)表并利用 Arduino 或其他微控制器的可用 I2C 庫(kù)可以幫助實(shí)現(xiàn)過(guò)程。
UART 的復(fù)雜性和實(shí)施的簡(jiǎn)易性
UART 接口是實(shí)現(xiàn)起來(lái)最簡(jiǎn)單的接口之一,使其成為直接點(diǎn)對(duì)點(diǎn)通信的有吸引力的選擇。兩線接口由發(fā)送線和接收線組成,設(shè)置簡(jiǎn)單,并且缺少時(shí)鐘信號(hào)簡(jiǎn)化了時(shí)序問(wèn)題。然而,UART 缺乏內(nèi)置的錯(cuò)誤檢查機(jī)制。因此,如果需要錯(cuò)誤檢查,則必須考慮額外的軟件復(fù)雜性。此外,使用 UART 進(jìn)行多設(shè)備通信并不像使用 SPI 和 I2C 那樣簡(jiǎn)單,因?yàn)樗ǔP枰~外的硬件或復(fù)雜的軟件層來(lái)實(shí)現(xiàn)。參考特定 UART 設(shè)備的數(shù)據(jù)表并利用 Arduino 或其他微控制器的可用 UART 庫(kù)可以幫助實(shí)現(xiàn)過(guò)程。
6. 實(shí)際應(yīng)用和用例
6.1. SPI應(yīng)用
實(shí)時(shí)系統(tǒng)
在低延遲通信至關(guān)重要的實(shí)時(shí)系統(tǒng)中,SPI 的全雙工同步操作可提供所需的性能。例如,在數(shù)字信號(hào)處理應(yīng)用中,通常需要從模數(shù)轉(zhuǎn)換器 (ADC) 讀取數(shù)據(jù),同時(shí)將數(shù)據(jù)寫(xiě)入數(shù)模轉(zhuǎn)換器 (DAC)。SPI 的快速、并發(fā)數(shù)據(jù)傳輸和接收能力使其成為此類(lèi)應(yīng)用的合適選擇。
此外,在實(shí)時(shí)控制系統(tǒng)中,例如機(jī)器人系統(tǒng)或工業(yè)自動(dòng)化,SPI可用于中央處理單元(CPU)和各種外設(shè)之間的高速通信。這樣可以有效交換傳感器數(shù)據(jù)、控制信號(hào)和執(zhí)行器命令,從而實(shí)現(xiàn)精確、及時(shí)的系統(tǒng)響應(yīng)。
數(shù)據(jù)流
SPI 也常用于數(shù)據(jù)流應(yīng)用,特別是在多媒體和音頻/視頻處理領(lǐng)域。一個(gè)這樣的例子是將音頻或視頻數(shù)據(jù)傳輸?shù)骄幗獯a器。鑒于其高速數(shù)據(jù)傳輸速率,SPI 可以輕松處理高比特率數(shù)據(jù)流。一個(gè)值得注意的例子是某些媒體播放器中的 MP3 音頻解碼,其中解碼的音頻數(shù)據(jù)使用 SPI 從微控制器發(fā)送到 DAC。
此外,SPI 的全雙工特性允許同時(shí)進(jìn)行數(shù)據(jù)傳輸和接收,使其適合實(shí)時(shí)音頻處理應(yīng)用。例如,在音頻混合器或數(shù)字音頻工作站中,SPI 可用于在不同處理模塊之間交換多個(gè)音頻通道或與外部音頻接口連接。
SD 卡和 LCD
SPI 協(xié)議廣泛應(yīng)用于 SD 卡和液晶顯示 (LCD) 模塊等外設(shè)。對(duì)于 SD 卡,SPI 允許高速數(shù)據(jù)寫(xiě)入和讀取,這對(duì)于需要大量數(shù)據(jù)存儲(chǔ)的應(yīng)用至關(guān)重要。這在物聯(lián)網(wǎng)(IoT)系統(tǒng)中尤其重要,其中數(shù)據(jù)記錄和存儲(chǔ)對(duì)于捕獲和分析傳感器數(shù)據(jù)至關(guān)重要。
同樣,LCD 模塊通常利用 SPI 進(jìn)行快速數(shù)據(jù)傳輸,以實(shí)現(xiàn)快速屏幕刷新,從而實(shí)現(xiàn)動(dòng)態(tài)和響應(yīng)式顯示更新。這對(duì)于需要實(shí)時(shí)信息顯示的應(yīng)用尤其重要,例如醫(yī)療設(shè)備、工業(yè)控制面板和消費(fèi)電子產(chǎn)品。
6.2. I2C 應(yīng)用
傳感器集成
I2C 的主要應(yīng)用之一是將各種傳感器集成到系統(tǒng)中。傳感器通常以相對(duì)較低的速率輸出數(shù)據(jù),因此 I2C 的速度綽綽有余。例如,氣象站或可穿戴設(shè)備中的溫度傳感器、濕度傳感器或加速度計(jì)通常采用 I2C 將數(shù)據(jù)傳輸?shù)轿⒖刂破?。這簡(jiǎn)化了設(shè)計(jì),因?yàn)橹恍鑳筛娋€即可連接多個(gè)傳感器。
此外,I2C 對(duì)多主配置的支持可實(shí)現(xiàn)復(fù)雜物聯(lián)網(wǎng)系統(tǒng)中傳感器和中央處理單元 (CPU) 之間的高效通信。CPU 可以通過(guò)順序?qū)ぶ凡z索所需信息來(lái)訪問(wèn)來(lái)自多個(gè) I2C 設(shè)備的傳感器數(shù)據(jù),從而實(shí)現(xiàn)全面的環(huán)境監(jiān)測(cè)和控制。
低速外圍設(shè)備
I2C 協(xié)議經(jīng)常用于連接需要與微控制器進(jìn)行可靠通信的低速外圍設(shè)備。這些設(shè)備可包括數(shù)字電位計(jì)、EEPROM、實(shí)時(shí)時(shí)鐘和各種類(lèi)型的傳感器。例如,通過(guò) I2C 連接的數(shù)字電位器可用于控制音頻放大器的音量。在這種情況下,I2C 的速度(在快速模式下高達(dá) 400kHz 或 1MHz)足以滿(mǎn)足該目的,并且在同一總線上輕松連接多個(gè)設(shè)備是一個(gè)顯著的優(yōu)勢(shì)。
此外,I2C 對(duì)時(shí)鐘拉伸的支持允許外圍設(shè)備在需要更多時(shí)間處理數(shù)據(jù)或完成操作時(shí)暫時(shí)減慢總線速度。此功能可確保微控制器和外圍設(shè)備之間可靠且同步的通信,從而增強(qiáng)整體系統(tǒng)性能和穩(wěn)定性。
機(jī)載通訊
I2C 也是設(shè)備不同組件之間板載通信的常見(jiàn)選擇,例如主板上或嵌入式系統(tǒng)內(nèi)不同 IC 之間的通信。在這種情況下,組件之間的距離較短,使得 I2C 相對(duì)較低的速度不再是問(wèn)題,而它僅用兩條總線連接多個(gè)設(shè)備的能力在降低布線復(fù)雜性方面提供了顯著的優(yōu)勢(shì)。
例如,在復(fù)雜的 IoT 設(shè)備或智能家居自動(dòng)化系統(tǒng)中,I2C 可用于在微控制器、傳感器、執(zhí)行器和顯示模塊之間建立通信。這可以實(shí)現(xiàn)不同子系統(tǒng)之間的無(wú)縫數(shù)據(jù)交換和協(xié)調(diào),從而促進(jìn)高效的控制、監(jiān)控和用戶(hù)交互。
6.3. 串口應(yīng)用
GPS接收器
UART 廣泛應(yīng)用于與 GPS 接收器的通信。GPS 模塊通常以與 UART 通信速度兼容的低波特率輸出位置信息。具有 GPS 模塊的系統(tǒng)通常會(huì)使用 UART 來(lái)接收位置數(shù)據(jù)、執(zhí)行必要的計(jì)算或處理,并可能將配置數(shù)據(jù)發(fā)送到 GPS 模塊。UART 通信簡(jiǎn)單的點(diǎn)對(duì)點(diǎn)特性以及不需要時(shí)鐘同步的事實(shí)非常適合此類(lèi)應(yīng)用。
此外,UART 的靈活性允許與其他導(dǎo)航相關(guān)傳感器(例如羅盤(pán)或陀螺儀)輕松集成,為車(chē)輛跟蹤、導(dǎo)航系統(tǒng)和無(wú)人機(jī) (UAV) 等應(yīng)用提供全面的定位和方向信息。
微控制器到微控制器通信
UART 也常用于兩個(gè)微控制器之間的通信。如果兩個(gè)設(shè)備需要交換適量的數(shù)據(jù)并且彼此距離相當(dāng)近,則 UART 是一個(gè)可靠的選擇。沒(méi)有時(shí)鐘線可以簡(jiǎn)化電路設(shè)計(jì)并可能節(jié)省硬件資源。UART可以直接連接兩個(gè)微控制器,也可以使用藍(lán)牙等無(wú)線模塊建立連接。
在復(fù)雜的系統(tǒng)中,多個(gè)微控制器需要協(xié)作和共享數(shù)據(jù),UART可以用作相互通信通道,實(shí)現(xiàn)不同單元之間的同步、任務(wù)分配和數(shù)據(jù)交換。這在分布式控制系統(tǒng)、機(jī)器人和物聯(lián)網(wǎng)應(yīng)用中經(jīng)常出現(xiàn),這些應(yīng)用需要多個(gè)處理單元之間的無(wú)縫協(xié)調(diào)。
調(diào)試和診斷端口
在許多嵌入式系統(tǒng)中,UART被用作調(diào)試端口。工程師使用這些端口打印調(diào)試信息、檢查各種系統(tǒng)組件的狀態(tài)并執(zhí)行其他診斷任務(wù)。例如,在嵌入式設(shè)備的啟動(dòng)過(guò)程中,有關(guān)系統(tǒng)狀態(tài)的有價(jià)值的信息被打印到 UART 控制臺(tái)。較慢的數(shù)據(jù)速率和簡(jiǎn)單的通信協(xié)議足以實(shí)現(xiàn)此目的,并且不需要額外的時(shí)鐘信號(hào)或同步對(duì)于系統(tǒng)開(kāi)發(fā)人員來(lái)說(shuō)是一個(gè)優(yōu)勢(shì)。
UART 作為調(diào)試和診斷端口的作用超出了最初的開(kāi)發(fā)階段。它允許實(shí)時(shí)監(jiān)控系統(tǒng)行為、識(shí)別潛在問(wèn)題或錯(cuò)誤,并提供用于固件更新或配置更改的界面。這有助于在嵌入式系統(tǒng)的整個(gè)使用壽命期間對(duì)其進(jìn)行維護(hù)和故障排除。
電腦周邊設(shè)備
UART 作為 PC 接口的傳統(tǒng)在許多現(xiàn)代設(shè)備中仍然存在。它可以在老式鼠標(biāo)、鍵盤(pán)甚至打印機(jī)中找到。此外,一些與 PC 接口的現(xiàn)代外設(shè)(例如某些類(lèi)型的傳感器或開(kāi)發(fā)板)可能會(huì)使用 UART 進(jìn)行通信,無(wú)論是本機(jī)還是通過(guò) USB 轉(zhuǎn) UART 橋接器。它提供了一種簡(jiǎn)單可靠的通信機(jī)制,可以以最小的開(kāi)銷(xiāo)輕松實(shí)現(xiàn)。
UART與PC的兼容性及其標(biāo)準(zhǔn)化接口使其成為將各種外圍設(shè)備連接到計(jì)算機(jī)的便捷選擇。從鼠標(biāo)和鍵盤(pán)等輸入設(shè)備到顯示器和打印機(jī)等輸出設(shè)備,UART 可實(shí)現(xiàn)無(wú)縫數(shù)據(jù)傳輸和控制,確保用戶(hù)與計(jì)算機(jī)系統(tǒng)之間可靠且高效的交互。
7. 選擇正確的協(xié)議:SPI、I2C、UART 速度要求和數(shù)據(jù)傳輸速度
選擇通信協(xié)議時(shí),設(shè)備的速度要求是一個(gè)關(guān)鍵因素。SPI 在高速數(shù)據(jù)傳輸方面表現(xiàn)突出,數(shù)據(jù)速率通常達(dá)到 10 MHz 甚至更高。這使得 SPI 成為需要快速高效數(shù)據(jù)傳輸?shù)膽?yīng)用的理想選擇。另一方面,UART 更適合低速應(yīng)用,典型數(shù)據(jù)速率約為 115200 bps。UART的數(shù)據(jù)傳輸速度使其適合需要交換中等數(shù)據(jù)量的場(chǎng)景。I2C 介于兩者之間,在高速模式下提供的最大數(shù)據(jù)速率為 3.4 Mbps。雖然不如 SPI 快,但 I2C 的數(shù)據(jù)傳輸速度仍然足以滿(mǎn)足許多應(yīng)用的需要。
數(shù)據(jù)完整性和錯(cuò)誤檢測(cè)
確保數(shù)據(jù)完整性對(duì)于通信協(xié)議至關(guān)重要。SPI雖然缺乏固有的錯(cuò)誤檢查機(jī)制,但通過(guò)其全雙工通信模式提供即時(shí)反饋。這允許接收設(shè)備驗(yàn)證傳輸數(shù)據(jù)的準(zhǔn)確性。相比之下,I2C 和 UART 都具有內(nèi)置的錯(cuò)誤檢測(cè)機(jī)制。I2C 使用確認(rèn)位來(lái)確認(rèn)每個(gè)字節(jié)的接收,提供了確保數(shù)據(jù)完整性的可靠方法。UART 使用奇偶校驗(yàn)位進(jìn)行錯(cuò)誤檢測(cè),允許接收設(shè)備在數(shù)據(jù)傳輸過(guò)程中檢測(cè)并糾正錯(cuò)誤。
設(shè)備數(shù)量以及多主設(shè)備與單主設(shè)備
可連接到通信總線的設(shè)備數(shù)量是一個(gè)重要的考慮因素。I2C 支持總線上的多個(gè)設(shè)備,每個(gè)設(shè)備都有唯一的地址。這使得 I2C 非常適合多個(gè)傳感器或外設(shè)需要與中央微控制器通信的應(yīng)用。SPI 還可以通過(guò)為每個(gè)設(shè)備使用單獨(dú)的從選擇線來(lái)容納多個(gè)設(shè)備,從而允許根據(jù)需要與各個(gè)設(shè)備進(jìn)行通信。然而,隨著設(shè)備數(shù)量的增加,管理專(zhuān)用從選擇線可能變得具有挑戰(zhàn)性,從而導(dǎo)致可擴(kuò)展性問(wèn)題。UART 是一種點(diǎn)對(duì)點(diǎn)通信協(xié)議,如果沒(méi)有額外的硬件或軟件管理,它本身并不支持多個(gè)設(shè)備。它主要設(shè)計(jì)用于兩個(gè)設(shè)備之間的直接通信。
功耗和電源效率
功耗是一個(gè)關(guān)鍵的考慮因素,特別是在低功耗應(yīng)用或電池供電的設(shè)備中。I2C 具有開(kāi)漏總線架構(gòu),需要上拉電阻來(lái)保持信號(hào)完整性。與 SPI 或 UART 相比,這可能會(huì)導(dǎo)致更高的功耗。然而,值得注意的是,通信協(xié)議的功耗還取決于其他因素,例如工作頻率和數(shù)據(jù)傳輸速率。在高數(shù)據(jù)速率應(yīng)用中,SPI 由于其較高的時(shí)鐘頻率可能會(huì)消耗更多功率。因此,在評(píng)估電源效率時(shí),必須考慮應(yīng)用的具體要求和限制。
易于實(shí)施和硬件資源
實(shí)施通信協(xié)議的難易程度是另一個(gè)關(guān)鍵因素。UART 的實(shí)現(xiàn)相對(duì)簡(jiǎn)單,因?yàn)樗恍枰獙?zhuān)用的時(shí)鐘線。然而,缺乏標(biāo)準(zhǔn)化的通信協(xié)議可能會(huì)使軟件設(shè)計(jì)復(fù)雜化,特別是在不同制造商的設(shè)備之間建立通信時(shí)。SPI 需要更多引腳進(jìn)行通信,通常使用單獨(dú)的線路進(jìn)行主輸出、主輸入和從輸出。盡管有額外的引腳,SPI 仍提供了直接且高效的數(shù)據(jù)傳輸機(jī)制,使其更易于實(shí)現(xiàn)。I2C 需要較少的通信線路,并具有可尋址總線上多個(gè)設(shè)備的優(yōu)點(diǎn)。然而,對(duì)唯一地址的需求以及 I2C 協(xié)議的復(fù)雜性可能會(huì)在實(shí)施過(guò)程中帶來(lái)挑戰(zhàn)。此外,
選擇合適的通信協(xié)議,無(wú)論是SPI、I2C還是UART,取決于多種因素,包括所需的數(shù)據(jù)傳輸速度、數(shù)據(jù)完整性需求、要連接的設(shè)備數(shù)量、功耗限制、實(shí)施的難易程度、以及可用的硬件資源。通過(guò)仔細(xì)評(píng)估這些因素,設(shè)計(jì)人員可以確定符合其應(yīng)用特定要求的最合適的協(xié)議。
八、結(jié)論
**#樂(lè)享周末分享吧#**通信協(xié)議 SPI、I2C 和 UART 在嵌入式系統(tǒng)的操作中發(fā)揮著至關(guān)重要的作用。在設(shè)計(jì)需要在組件之間進(jìn)行高效數(shù)據(jù)交換的系統(tǒng)時(shí),了解這些協(xié)議的優(yōu)點(diǎn)和缺點(diǎn)至關(guān)重要。SPI 擅長(zhǎng)高速通信,使其適用于快速并發(fā)數(shù)據(jù)傳輸至關(guān)重要的應(yīng)用。I2C 的優(yōu)點(diǎn)是可以用更少的資源尋址多個(gè)設(shè)備,從而提供系統(tǒng)設(shè)計(jì)的靈活性。當(dāng)需要點(diǎn)對(duì)點(diǎn)通信時(shí),尤其是在需要可靠數(shù)據(jù)傳輸?shù)妮^長(zhǎng)距離上,UART 脫穎而出。
九. 常見(jiàn)問(wèn)題 (FAQ)
Q1:SPI如何處理與多個(gè)從設(shè)備的通信?
在 SPI 中,與多個(gè)從設(shè)備的通信通過(guò)單獨(dú)的從選擇 (SS) 線進(jìn)行管理。連接到 SPI 總線的每個(gè)從設(shè)備都有其專(zhuān)用的 SS 線。主設(shè)備通過(guò)將其 SS 線拉低來(lái)選擇特定的從設(shè)備,從而實(shí)現(xiàn)與該特定從設(shè)備的數(shù)據(jù)交換。
Q2:I2C和SPI可以在同一個(gè)系統(tǒng)中一起工作嗎?
是的,I2C 和 SPI 可以在同一系統(tǒng)中共存,因?yàn)樗鼈儽舜霜?dú)立運(yùn)行。某些組件可以使用 I2C,而其他組件則可以使用 SPI。然而,需要仔細(xì)管理共享總線以避免沖突并確保設(shè)備之間的正確通信。
Q3:為什么UART不需要時(shí)鐘線?
UART 不需要專(zhuān)用時(shí)鐘線,因?yàn)樗钱惒酵ㄐ艆f(xié)議。發(fā)送和接收設(shè)備不依賴(lài)共享時(shí)鐘信號(hào),而是就數(shù)據(jù)傳輸?shù)念A(yù)定波特率達(dá)成一致。每個(gè)數(shù)據(jù)字節(jié)由起始位和停止位組成,允許接收設(shè)備識(shí)別和解釋傳入的數(shù)據(jù)。
Q4:為什么SPI比I2C和UART更快?
由于多種因素,與 I2C 和 UART 相比,SPI 實(shí)現(xiàn)了更高的數(shù)據(jù)傳輸速率。首先,SPI 在其數(shù)據(jù)幀中不攜帶尋址信息,從而更有效地利用帶寬。其次,SPI以全雙工模式運(yùn)行,可以同時(shí)進(jìn)行數(shù)據(jù)發(fā)送和接收。此外,SPI 使用的時(shí)鐘速度通常高于 I2C 和 UART,進(jìn)一步提高了其更快的性能。
Q5:I2C 如何處理總線上的沖突?
I2C 采用沖突處理機(jī)制來(lái)解決總線上的沖突。如果兩個(gè)設(shè)備同時(shí)開(kāi)始傳輸,就會(huì)發(fā)生沖突。在這種情況下,發(fā)送“1”的設(shè)備而另一個(gè)發(fā)送“0”的設(shè)備將失去仲裁。失敗的設(shè)備檢測(cè)到?jīng)_突并立即停止傳輸,從而允許獲勝的設(shè)備繼續(xù)不間斷地通信。
評(píng)論
查看更多