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