使用外接裝置解決微控制器 I/O 擴充問題

作者:Jacob Beningo

資料提供者:DigiKey 北美編輯群

在微控制器 I/O 方面,設計人員常面臨兩個問題。第一個問題是,有最適合應用的微控制器,卻缺少合適的 I/O 能力組合。第二個問題在於,已發佈的產品系列需要增加額外的 I/O。

在第一種情況下,開發人員通常必須購買價格更高、能力更強的微控制器。在第二種情況下,改用新的微控制器並進行相關的軟體移植可能會在成本和時間上受到限制。

有個潛力解決方案能解決這兩個問題,就是使用外接式 I/O 擴充裝置 (通常接至微控制器 SPI 或 I2C 匯流排)。如此一來,就不必基於引腳數以及可能需要的效能和覆蓋區考量,而選用規格過高的微控制器。同時,這種方法可讓產品設計滿足未來需求,能應對功能衍生、目標市場擴張、客戶請求新功能,以及挑錯微控制器等多種狀況。

本文將探討典型的微控制器 I/O 需求並介紹一些合適的外接擴充裝置,然後會說明如何使用這些晶片外資源,以便提供額外的一般用途輸入與輸出、記憶體儲存、脈寬調變 (PWM),甚至是監控設備計時器功能。

選擇擴充介面

微控制器的晶片上有幾個不同的周邊裝置介面,可用來與外接裝置通訊。實際介面視微控制器而定,以下簡單列出幾個:

  • 序列週邊裝置介面 (SPI)
  • 內部整合電路 (I2C) 匯流排
  • 通用序列匯流排 (USB)
  • 通用型非同步接收器/發射器 (UART)
  • 控制器區域網路 (CAN)
  • Wi-Fi

最適合與外接擴充裝置通訊的介面是 I2C 與 SPI。

I2C 屬於雙線匯流排,傳統運作速率為 100 Kbit/s 或 400 Kbit/s,但目前有推出一些高速元件可支援 1 Mbit/s 或更快的速度。其中一條線是專用的時脈引腳,而另一條線則用於主控元件和從屬元件之間的雙向通訊。通常,微控制器會當作主控元件,外接裝置則當作從屬元件。從屬元件可使用 7 位元或 10 位元定址方法來定址。

SPI 屬於三線匯流排介面,運作速率介於 1 Mbit/s 至 12 Mbit/s。SPI 匯流排具有專用的主控輸出數據線、從屬輸出數據線和時脈。在此微控制器同樣配置為主控元件,利用「從屬選擇」線與從屬元件通訊。每個連接到微控制器的從屬元件,都需要專用的輸出引腳,才可選擇用來進行通訊。不難想像,假如開發人員想連接很多外接裝置,可能很快就會耗盡用來選擇從屬元件的 I/O 線。

舉例來說,如果開發人員使用 STMicroelectronicsSTM32L011D4P7,則有 11 條 I/O 線可供使用 (圖 1)。光是 SPI 數據與時脈就需要三條 I/O 線,其餘八條線用來與從屬元件通訊,以及執行系統所需的任何其他功能。這對許多應用來說都沒問題,但有些時候,設計人員可能需要擴充 I/O。

STMicroelectronics 的 STM32L011D4P7 Arm® Cortex®-M7 處理器圖片

圖 1:STM32L011D4P7 是一款 Arm® Cortex®-M0+ 處理器,僅有 11 個 I/O 引腳。(圖片來源:STMicroelectronics)

一般來說,經驗法則很簡單,就是在添增以下功能時使用 I2C 匯流排:

  • I/O
  • PWM
  • EEPROM
  • 監控設備計時器

若要添加 SD 卡的高速記憶體存取等功能,則應使用 SPI 匯流排。

擴充一般用途 I/O

有很多 IC 都可透過 I2C 介面來擴充輸入與輸出。一些值得關注的例子包括:

其中,PCA8574 特別值得關注,因為只使用單一暫存器來執行輸入和輸出。只用一個暫存器,可大幅降低配置元件和讀寫引腳所需的軟體量 (圖 2)。微控制器透過 I2C 與 PCA8574 通訊,並根據 A0 至 A2 引腳的配置方式對元件進行定址。如此能讓設計更有彈性,因此開發人員能針對 PCA8574 選擇從屬位址,並在單一設計中擁有好幾個此元件。

NXP 的 PCA8574 8 位元 I/O I2C 擴充裝置示意圖

圖 2:NXP 的 PCA8574 是一款準雙向操作的 8 位元 I/O I2C 擴充裝置。此產品只使用一個 I2C 暫存器來讀寫,可在引腳上執行 I/O 功能,是個非常簡單好用的元件。(圖片來源:NXP Semiconductors)

在預設情況下,P0 至 P7 會在電源啟動後配置為輸入。無論引腳是配置為輸入還是輸出,讀取此單一內部暫存器即可指出元件上每個引腳的狀態。PCA8574 能讓引腳同時作為輸入和輸出,因此對暫存器寫入時,也會設定相應位元的輸出。

輸出驅動由一個弱內部電阻上拉,此電阻很容易因輸入值而過載。如果任何輸入狀態發生變化,INT 引腳會切換至低位,讓微控制器知道輸入狀態已經改變。微控制器接著即可調用 I2C 讀取新的值。

擴充 PWM

PWM 擴充器是非常實用的擴充裝置。在驅動 LED 時,此裝置特別有用。微控制器未執行任何作業時,可進入睡眠狀態,並由 PWM 擴充器負責驅動 LED 的狀態。

採用 E-SwitchPV6F240SSG RGB 按鈕或是 Schurter Electronic Components3-101-399 SPST RGB 按鈕的 RGB 按鈕電路,正是 PWM 擴充器用途的完美展現範例 (圖 3)。

Schurter 的 RGB 按鈕圖片

圖 3:Schurter 的 RGB 按鈕在按鈕周圍具有紅色、綠色和藍色 LED,能讓開發人員設計出彩色燈光圖案。這些類型的元件最適合由 PWM 擴充晶片驅動。(圖片來源:Schurter)

Schurter 的 RGB 按鈕在 SPST 按鈕周圍具有紅色、綠色和藍色 LED,能讓開發人員設計出彩色燈光圖案。這些類型的應用非常適合 PWM 擴充晶片。

Maxim IntegratedMAX7315 便是一款適合用於 I2C 的 PWM 擴充晶片。MAX7315 提供八個 PWM 埠,並具有 LED 光強度控制功能。這樣能輕鬆涵蓋驅動 RGB 開關所需的三個通道,能讓單一元件驅動幾個開關和一些獨立式 LED。此外,還有第 9 個連接埠,可當作切換偵測中斷或一般用途輸出。

MAX7315 I2C 介面比 NXP 的 PCA8574 稍微複雜一些,因為其中包含超過一個暫存器。因此,開發人員必須為從屬元件定址,並提供想讀取或寫入的記憶體位址,然後執行讀取或寫入。圖 4 顯示 MAX7315 的記憶體對應情況。

暫存器 位址碼 (十六進位) 自動遞增位址
Rad 輸入埠 0x00 0x00 (無變化)
閃爍相位 0 輸出 0x01 0x01 (無變化)
連接埠配置 0x03 0x03 (無變化)
閃爍相位 1 輸出 0x09 0x09 (無變化)
主控,O8 強度 0x0E 0x0E (無變化)
配置 0x0F 0x0F (無變化)
輸出強度 P1、P0 0x10 0x11
輸出強度 P3、P2 0x11 0x12
輸出強度 P5、P4 0x12 0x13
輸出強度 P7、P6 0x13 0x10

圖 4:MAX7315 PWM 控制器擁有 8 個輸出連接埠,其中含有 LED 強度功能。此元件的暫存器對應很簡單,因此能輕鬆存取進階 PWM 功能。(圖片來源:Maxim Integrated)

MAX7315 的暫存器對應很簡單,因此能輕鬆存取進階 PWM 功能。

配有 WDT、EEPROM 和 PWM 的組合擴充器

如圖所示,I2C 匯流排 I/O 擴充器當作為獨立元件使用時,功能非常強大。這是因為其中僅含有 I/O 或 PWM 等特定功能。此類擴充器 (例如 Cypress Semiconductor 的 CY8C9520A 多埠 I/O 擴充器) 在單一 IC 封裝中包含多個周邊擴充引腳。CY8C9520A 提供三種款式:20 位元、40 位元或 60 位元擴充。這些引腳可配置為輸入、輸出或 PWM (圖 5)。

Cypress Semiconductor 的 CY8C9520 示意圖

圖 5:Cypress Semiconductor 的 CY8C9520 是配有 EEPROM 的 20 位元、40 位元或 60 位元 I/O 擴充器。此產品能讓擴充引腳配置為輸入、輸出或 PWM。(圖片來源:Cypress Semiconductor)

除了 I/O 擴充功能外,CY8C9520 還含有 EEPROM,可用來儲存序號等重要的應用設定,以及其他重要的配置參數。

若仔細檢視圖 5,您會看見 GPort 2 上有個 WD6 引腳。這是監控設備計時器輸出引腳,可在微控制器未能成功通訊時進行重設,並控制 CY8C9529 監控設備。開發人員可完全配置監控設備的設定,並可藉由這些設定來提高應用程式碼的完備程度。

擴充微控制器功能的秘訣和竅門

目前有許多技術有助於擴充微控制器的功能。以下提供一些有用的秘訣和竅門:

  • 使用 I2C 介面連接外接裝置。此介面只需要兩個引腳,並可支援多個從屬元件。
  • 在將某個零件加入硬體設計之前,請先購買開發板,或是將晶片焊接到擴充板上,測試是否符合您所有的系統需求。
  • 使用 I2C 匯流排工具來介接擴充裝置,並瞭解其運作方式。這能大幅加快軟體開發的速度。
  • 在軟體開發期間,使用匯流排分析儀來監控與外接裝置的通訊,將除錯時間縮到最短。
  • 如果可行,請選擇配有外接監控設備計時器的裝置。這可當作工具,提升系統設計的完備性。
  • 若要介接晶片外記憶體以獲取配置數據以外的數據,請使用 SPI 等高速介面。
  • 如果裝置回傳否定應答 (NAK) 或是匯流排崩潰,請確保微控制器的 I2C 驅動器能處理該情況。若收到非預期的回應,這些驅動器偶爾會忽略錯誤並進入無限迴圈。

結論

當設計達到微控制器再也沒有多餘 I/O 的情形時,開發人員不需要推翻其設計從頭開始。相反地,可以使用外接式周邊晶片在系統中增添額外功能。

 
DigiKey logo

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。

關於作者

Image of Jacob Beningo

Jacob Beningo

Jacob Beningo 是嵌入式軟體顧問,目前與超過十幾個國家的客戶合作,透過產品品質、成本和上市時間的改善,促成業務的大幅轉型。他曾在嵌入式軟體開發技術上發表超過兩百篇文章,是深思熟慮的講師和技術培訓師,共擁有三個學位,包括密西根大學的工程碩士學位。歡迎透過以下方法洽詢,電郵:[email protected]、網站:www.beningo.com,亦可登記取得他發行的Embedded Bytes 每月電子報

關於出版者

DigiKey 北美編輯群