應對嵌入式系統(tǒng)設計中的接口不兼容性
自上世紀 60 年代初 IBM 推出具備 8 位 ASCII 代碼存儲的計算機,以及 Gordon Bell 設計出可讓 PDP 系列計算機在 MCU 和外設之間傳輸數(shù)據(jù)的通用異步收發(fā)器 (UART) 以來,數(shù)字通信協(xié)議的數(shù)量就在不斷增長。UART 的主要特點是簡單易用,標準通用,使用壽命長,而且通過編程選項可以提供多通道的靈活性。UART 通過內(nèi)置的故障檢查機制來管理通信通道,而且通過 FIFO 在發(fā)送/接收前后對數(shù)據(jù)進行緩沖, 從而減輕 MCU 的工作負載。
隨后,出現(xiàn)了被認為與 UART 具有兄弟關系的 I2C 和 SPI 標準,二者自 1980 年以來都很受青睞。都便于進行設計和故障調(diào)試、測試非常迅速、因為信號線較少,因而占用的 PCB 面積也較小。不過由于二者在功能和實施方案方面比較相似,所以在用于特定應用時,工程師們常常不知道如何在這兩種通用且高效的接口中做出選擇。
以下,我們就不同應用要求給出一些可資借鑒的小竅門:
SPI 與 I2C 不一樣,不限于 8 位接口,因此能發(fā)送具有任意內(nèi)容和用途的各類消息。相對于 I2C 而言,SPI 還能支持較高的數(shù)據(jù)傳輸速率,而這主要歸功于其雙工功能。
SPI 接口不需要上拉電阻,因而可降低功耗。
I2C 的線路較少,更加簡單,因此橋接到 IC 所需的引腳較少。而與此形成對比的是,SPI 需要 4 條線。
I2C 不需要片選信號線來進行從機確認,具有支持帶內(nèi)尋址的優(yōu)勢。利用 SPI,主機可不用向任何一方發(fā)送數(shù)據(jù)且無需確認。
系統(tǒng)管理總線 (SMBus) 和電源管理總線 (PMBus) 是上世紀 90 年代中期開發(fā)的 I2C總線的兩種常見衍生標準。二者的數(shù)據(jù)傳輸速率、超時和最小時鐘速度、電壓電平、上拉電阻值和電流大小等都不盡相同。SMBus 為系統(tǒng)和電源管理相關任務提供了控制總線。采用 SMBus 的系統(tǒng)在器件間發(fā)送消息,而非斷開單條控制線路;而 PMBus 器件則必須使用實施于業(yè)界標準 SMBus 串行接口之上的 SMBus Version 1.1。PMBus 協(xié)議有助于符合標準的功率轉(zhuǎn)換產(chǎn)品的編程、控制和實時監(jiān)控[1,2]。
接下來出現(xiàn)的就是我們都頗為熟悉的通用串行總線 (USB) 標準了,自 1995 年以來該標準就取代陳舊的 RS-232 接口而不斷受到設計工程師的青睞。這是一種簡單而精致的通信技術,能實現(xiàn)多達 126 個互聯(lián)設備的通信,其采用的協(xié)議定義完善,可確保通過統(tǒng)一的標準化接口插槽連接多個外設。此外,它還通過熱拔插支持即插即用功能。USB 為四線電纜接口,無需另外的電源線(USB 電纜本身即可供電)。
設計挑戰(zhàn)
幾乎任何嵌入式系統(tǒng)(如醫(yī)療設備、電信設備、銷售點系統(tǒng)及其他不同種類應用)的設計都會采用上述各種接口中的一種或多種。此外,每種接口標準都在不斷發(fā)展,帶來更多可供設計人員應用的衍生接口。例如,此前必須的時鐘拉伸特性現(xiàn)在已經(jīng)成為可選特性了,從而可讓主從機的 SCL 線保持在低電平,以阻止總線上的數(shù)據(jù)事務處理(也就是說沒有 SCL 驅(qū)動器的從機不能拉伸時鐘)。再如,大多數(shù)微處理器生成的 RS-232 信號電壓為 0 至 5 伏特之間的 TTL 水平,這通常需要電平轉(zhuǎn)換器芯片(如 MAX232)將 0 至 5 伏特的電壓轉(zhuǎn)換到標準的 RS-232 電壓水平(-15V 至 +15V)。如前所述,UART 在 I2C、SPI 和 USB 出現(xiàn)之前一直在串行數(shù)據(jù)事務處理接口領域占據(jù)著主導地位,由于設計人員已經(jīng)很熟悉 UART 且習慣于以這種標準進行設計工作,從而導致了許多系統(tǒng)只支持 UART 這一種接口。因此,我們現(xiàn)在需要確保 UART 能與其他數(shù)據(jù)協(xié)議相互兼容,這樣才能讓這種系統(tǒng)與其他系統(tǒng)橋接起來。
設計人員面臨的挑戰(zhàn)是如何在不改變目前的 CPU 或 ASIC 的情況下解決傳統(tǒng)系統(tǒng)和新系統(tǒng)之間的不兼容性問題(比如,這些系統(tǒng)采用了不同的接口)。例如,I2C 和 SPI 之間的橋接問題。I2C 接口的數(shù)據(jù)控制 (SDA) 和時鐘 (SCL) 信號通過橋接到兩個專門的 GPIO 引腳提供給外部I2C接口。通過輪詢和中斷實現(xiàn)固件同步。SPI 主機可通過 Tx 緩沖、Rx 緩沖實施。SPIM 硬件從主出從入 (MOSI) 信號上的主 SPI 器件發(fā)送數(shù)據(jù),并同時從主入從出 (MISO) 信號上選定的從 SPI 器件接收數(shù)據(jù)。同樣的 SCLK 信號還用于主從數(shù)據(jù)的發(fā)送和接收。I2C 與 SPI 橋接時將I2C 作為從機,將 SPI 作為主機,其從I2C主機接收命令,并根據(jù)接收到的命令向 SPI 從機寫入或讀取數(shù)據(jù)。
還有一個突出的例子就是 SPI 到 UART 的橋接。UART 接口通過 Rx 線路接收數(shù)據(jù)。數(shù)據(jù)通過 SPI 接口發(fā)送到 SPI 從機。從 SPI 從機接收到的數(shù)據(jù)通過 UART 的 Tx 線路發(fā)送回 “UART 主機”。
不同接口之間的橋接可通過作為微處理器的分立或集成組件的可編程邏輯加以實施。在帶有可編程邏輯的微處理器上實施時,我們可根據(jù)應用需要嵌入一些智能邏輯,分析接收到的數(shù)據(jù)并根據(jù)接收到的命令執(zhí)行操作。也可將其他的數(shù)字和模擬塊配置為 PWM、計時器、計數(shù)器、ADC、DAC、比較器或其他的通信外設(如 IrDA 和I2C)。此外還可將多個 SPI 器件連接到橋接器上,從而讓單一的 UART 與多個 SPI 從器件進行通信。
在簡單的橋接實施方案中,器件固件通過寄存器的讀取和寫入與I2C 塊互動。SPI 信號可通過不同的行和全局互聯(lián)路由到任何 GPIO。SPI 塊可選擇兩種中斷源:TX Reg Empty(默認)中斷與 SPI Complete 中斷。I2C 從中斷也可通過設置寄存器中的位啟用或禁用。
在微處理器上實施橋接還能使設計人員根據(jù)特定的應用修改接口以創(chuàng)建定制接口。片上資源可分配用于調(diào)節(jié)不同通信協(xié)議的數(shù)量和變異性。上述資源還可根據(jù)需要進行再配置,以實施不同的接口,使器件適應于需要與之通信的其他器件。此外,特別是在需要降低成本的環(huán)境中,可再配置資源的可用性使得工程師能重用橋接資源,實施電容感應和/或電壓/電流監(jiān)控功能等其他功能。
不同廠商制定的數(shù)據(jù)事務處理速率也很重要,因為接口 IC 通常作為無源組件用于以高速處理器為中心的系統(tǒng)中。實施具有先進先出 (FIFO) 特性的橋接器使設計人員能在數(shù)據(jù)事務處理期間根據(jù)時間和優(yōu)先級組織和處理數(shù)據(jù),以提高高速串行通信的可靠性并提高系統(tǒng)吞吐量。
右圖顯示的是外部組件集成的一個突出實例。如果在 TTL 電壓電平(0 至 5 伏特)上生成 RS-232 信號,通常需要一個電平轉(zhuǎn)換器芯片(如 MAX232)將 0 至 5 伏特的電壓轉(zhuǎn)換為標準的 RS-232 電壓(-15V 至 +15V)。用戶在系統(tǒng)中植入接口 IC,即可讓現(xiàn)有的處理器與處于 TTL 電平級別的橋接器進行通信,而橋接器則能以 USB 電平將數(shù)據(jù)發(fā)送給 PC,從而不再需要 MAX232 芯片,且降低了設計的物料清單 (BOM) 成本。
橋接還能確保設計方案滿足今后接口發(fā)展的要求。由于在設計初期階段就使用橋接器,設計人員能確保在不替換主微控制器的情況下實現(xiàn)接口之間的兼容性。這對某些接口持續(xù)變動的更專業(yè)的應用而言尤其重要,例如大量涌現(xiàn)的用于音頻的 I2S(Inter-IC Sound)接口、用于感應器的 I/O 鏈接以及用于機動車輛的 CAN(控制器局域網(wǎng))等專門接口。從降低系統(tǒng)級成本和提高功效的角度考慮,能靈活集成上述接口的微控制器必然有助于用戶根據(jù)不同應用要求以能使設計人員從中長期受益的方式定制通信協(xié)議。
評論