設(shè)計(jì)人員經(jīng)常面臨兩個微控制器 I/O 問題。第一個問題是,最適合應(yīng)用的微控制器不具備合適的 I/O 能力組合。第二個問題是,已推出的產(chǎn)品線需要增加 I/O。
出現(xiàn)第一個問題時,開發(fā)人員經(jīng)常不得不購買更昂貴且功能更強(qiáng)的微控制器。而面對第二個問題時,切換到新的微控制器以及隨之而來的軟件移植所需的成本及時間可能會多得令人難以承受。
要同時解決這兩個問題,一種潛在的解決方案是使用外部 I/O 擴(kuò)展器件,這種器件通??蛇B接到微控制器的 SPI 或 I2C 總線。這樣就能避免在引腳數(shù)以及可能的性能和封裝方面,對微控制器做出過多的規(guī)定。同時,這種方法還能讓產(chǎn)品設(shè)計(jì)具有前瞻性,以應(yīng)對功能蠕變、目標(biāo)市場擴(kuò)張、客戶功能請求和微控制器選擇不當(dāng)(這種情況時有發(fā)生)等問題。
本文將討論典型的微控制器 I/O 要求,并介紹一些合適的外部擴(kuò)展器件,然后說明如何使用這些片外資源來增加通用輸入和輸出、存儲器存儲、脈沖寬度調(diào)制 (PWM) 甚至看門狗定時器功能。
選擇擴(kuò)展接口
微控制器配有多個不同的片載外設(shè)接口,可用于與外部設(shè)備通信。根據(jù)微控制器的不同,這些接口可能包括(僅列舉幾例):
- 串行外設(shè)接口 (SPI)
- 內(nèi)部集成電路 (I2C) 總線
- 通用串行總線 (USB)
- 通用異步接收器/發(fā)送器 (UART)
- 控制器區(qū)域網(wǎng)絡(luò) (CAN)
- Wi-Fi
其中最適合與外部擴(kuò)展設(shè)備通信的接口是 I2C 和 SPI。
I2C 是一種兩線總線,傳統(tǒng)的運(yùn)行速率為 100 千位/秒 (kb/s) 或 400 kb/s,但也有一些可支持 1 Mb/s 或更快速度的高速設(shè)備。其中一條線是專用的時鐘引腳,而另一條線則用于主設(shè)備和從設(shè)備之間的雙向通信。通常情況下,微控制器充當(dāng)主設(shè)備,外部設(shè)備充當(dāng)從設(shè)備。從設(shè)備可使用 7 位或 10 位尋址方案進(jìn)行尋址。
SPI 是一種三線總線接口,運(yùn)行速率介于 1 Mb/s和 12 Mb/s 之間。SPI 總線配有專用的主設(shè)備輸出數(shù)據(jù)線、從設(shè)備輸出數(shù)據(jù)線和時鐘。微控制器同樣配置為主設(shè)備,使用“從設(shè)備選擇”線與從設(shè)備通信。每個與微控制器連接的從設(shè)備都需要一個專用輸出引腳,用于選擇它進(jìn)行通信。不難想象,如果開發(fā)人員有很多想要連接的外部設(shè)備,他們可能很快就會用盡 I/O 線,然后選擇從設(shè)備。
例如,如果開發(fā)人員使用 STMicroelectronics 的 STM32L011D4P7,可供使用的 I/O 線共有 11 條。僅 SPI 數(shù)據(jù)和時鐘就需要三條 I/O 線,剩下的八條線除了與從設(shè)備通信,還需要執(zhí)行系統(tǒng)所需的所有其他功能。雖然這完全可以滿足許多應(yīng)用的要求,但某些時候,設(shè)計(jì)人員仍可能需要對 I/O 進(jìn)行擴(kuò)展。
一般情況下,經(jīng)驗(yàn)法則非常簡單:添加以下功能時使用 I2C 總線:
- I/O
- PWM
- EEPROM
- 看門狗定時器
- SPI 總線應(yīng)該用于增加諸如為 SD 卡提供高速存儲器訪問等功能。
- 擴(kuò)展通用 I/O
- 有相當(dāng)多的集成電路可支持通過 I2C 接口來擴(kuò)展輸入和輸出。以下是一些有趣的示例:
- Texas Instruments 的 TCA9534PWR
- NXP Semiconductors 的 PCA8574
- Semtech Corporation 的 SX1520I087TRT
PCA8574 是一款特別有趣的器件,因?yàn)樗话粋€用于執(zhí)行輸入和輸出的寄存器。單個寄存器極大地精簡了配置器件以及讀寫引腳所需的軟件數(shù)量(圖 2)。微控制器通過 I2C 與 PCA8574 通信,并根據(jù) A0 至 A2 引腳的配置方式對此器件進(jìn)行尋址。這一特性增加了設(shè)計(jì)的靈活性,因此開發(fā)人員可以為 PCA8574 選擇從設(shè)備地址,并且可在一個設(shè)計(jì)中使用多個從設(shè)備地址。

圖 2:NXP 的 PCA8574 是一款準(zhǔn)雙向 8 位 I/O I2C 擴(kuò)展器。該擴(kuò)展器只有一個 I2C 寄存器可供讀寫,從而在其引腳上執(zhí)行 I/O 功能,因此是一款非常簡單、精巧的器件。(圖片來源:NXP Semiconductors)
默認(rèn)情況下,P0 至 P7 在上電時配置為輸入。讀取單個內(nèi)部寄存器時將為器件上的各個引腳指定狀態(tài),無論該引腳配置為輸入還是輸出。PCA8574 允許引腳同時用作輸入和輸出,因此對寄存器的寫入也會設(shè)置相應(yīng)的位輸出。
輸出驅(qū)動由微弱的內(nèi)部電阻器上拉,該電阻器很容易因輸入值而過載。如果任何一個輸入狀態(tài)發(fā)生變化,INT 引腳將切換為低電平,讓微控制器知道輸入狀態(tài)發(fā)生了變化。然后,微控制器可以調(diào)用 I2C 來讀取新值。
擴(kuò)展 PWM
PWM 擴(kuò)展器是一款非常有用的擴(kuò)展器件。該器件在驅(qū)動 LED 時特別有用。當(dāng)微控制器未執(zhí)行任何操作時,可將其設(shè)為休眠模式,此時 PWM 擴(kuò)展器可負(fù)責(zé)驅(qū)動 LED 狀態(tài)。
關(guān)于如何使用 PWM 擴(kuò)展器的完美范例經(jīng)常出現(xiàn)在 RGB 按鈕電路中,該電路可使用 E-Switch 的 PV6F240SSG RGB 按鈕或 Schurter Electronic Components 的 3-101-399 SPST RGB 按鈕(圖 3)。
Schurter 的 RGB 按鈕在 SPST 按鈕周圍配有紅綠藍(lán) LED,可允許開發(fā)人員創(chuàng)建亮色圖案。這些類型的應(yīng)用非常適合 PWM 擴(kuò)展芯片。
Maxim Integrated 的 MAX7315 便是一款適用于 I2C 接口的 PWM 擴(kuò)展芯片。MAX7315 配有 8 個 PWM 端口,并具有 LED 強(qiáng)度控制功能,這樣可以輕松涵蓋驅(qū)動 RGB 開關(guān)所需的 3 個通道,使得單個器件能夠驅(qū)動若干開關(guān)和一些獨(dú)立的 LED。此外,MAX7315 還有第 9 個端口,可以用作轉(zhuǎn)換檢測中斷或通用輸出。
MAX7315 I2C 接口比 NXP 的 PCA8574 稍微復(fù)雜一些,因?yàn)樗鄠€寄存器。因此,開發(fā)人員必須尋址從設(shè)備,提供其有興趣讀取或?qū)懭氲拇鎯ζ鞯刂?,然后?zhí)行寫入或讀取。MAX7315 的存儲器映射如圖 4 所示。

圖 4:MAX7315 PWM 控制器配有 8 個輸出端口,其中包括 LED 強(qiáng)度功能。該器件的寄存器映射非常簡單,允許輕松訪問高級 PWM 功能。(圖片來源:Maxim Integrated)
MAX7315 的寄存器映射非常簡單,允許輕松訪問高級 PWM 功能。
配有 WDT、EEPROM 和 PWM 的組合型擴(kuò)展器
如圖所示,I2C 總線 I/O 擴(kuò)展器在用作獨(dú)立器件時可能非常強(qiáng)大。也就是說,這種擴(kuò)展器只包含諸如 I/O 或 PWM 等特定功能。例如 Cypress Semiconductor 的 CY8C9520A 多端口 I/O 擴(kuò)展器,這類擴(kuò)展器在一個 IC 封裝中包含了多個外設(shè)擴(kuò)展。CY8C9520A 共有三種擴(kuò)展形式:20 位、40 位或 60 位擴(kuò)展。然后可將這些引腳配置為輸入、輸出或 PWM(圖 5)。

圖 5:Cypress Semiconductor 的 CY8C9520 是一款配有 EEPROM 的 20 位、40 位或 60 位 I/O 擴(kuò)展器。該擴(kuò)展器允許將擴(kuò)展引腳配置為輸入、輸出或 PWM。(圖片來源:Cypress Semiconductor)
除 I/O 擴(kuò)展外,CY8C9520 還配有 EEPROM,可用于存儲重要的應(yīng)用設(shè)置(如序列號)以及其他重要的配置參數(shù)。
仔細(xì)查看圖 5,您會看到 GPort 2 上的 WD6 引腳。該引腳是一個看門狗定時器輸出引腳,可在微控制器無法通信時用于復(fù)位微控制器,以及操控 CY8C9529 看門狗。看門狗設(shè)置是完全可配置的,并且可用于為應(yīng)用程序代碼增加額外的穩(wěn)健性。
擴(kuò)展微控制器功能的技巧和訣竅
目前有許多技術(shù)可幫助擴(kuò)展微控制器的功能。以下是一些有幫助的技巧和訣竅:
使用 I2C 連接外部設(shè)備。該接口只需兩個引腳,并且支持多個從設(shè)備。
在將某個零件設(shè)計(jì)成硬件之前,先購買一個開發(fā)板,或?qū)⑿酒附拥綌U(kuò)展板上,測試其能否滿足您的系統(tǒng)需求。
使用 I2C 總線工具與擴(kuò)展器件連接,并了解其工作情況,這樣可大幅提升軟件的開發(fā)速度。
在軟件開發(fā)過程中,使用總線分析器監(jiān)視與外部設(shè)備的通信,最大限度縮短調(diào)試時間。
如果可能,選擇配有外部看門狗定時器的器件,這可以作為一種工具,為系統(tǒng)設(shè)計(jì)增加穩(wěn)健性。
在連接片外存儲器獲取數(shù)據(jù)(非配置數(shù)據(jù))時,請使用 SPI 等高速接口。
如果設(shè)備返回否定應(yīng)答 (NAK) 信號,或者總線受到拖累,請確保微控制器的 I2C 驅(qū)動程序可以處理此類問題。對于這些驅(qū)動程序來說,在收到意外響應(yīng)時忽略錯誤并進(jìn)入無限循環(huán)的情況并不罕見。
結(jié)論
當(dāng)設(shè)計(jì)進(jìn)展到微控制器無法繼續(xù)提供更多 I/O 時,開發(fā)人員無需將現(xiàn)有的設(shè)計(jì)推倒重來。相反,他們可以使用外設(shè)芯片,以便為系統(tǒng)增加額外的功能。
評論