什么是tca9539,tca9539的基礎(chǔ)知識(shí)?


一、概述
TCA9539 是德州儀器(Texas Instruments,簡(jiǎn)稱 TI)推出的一款基于 I2C 總線接口的 16 位通用數(shù)字輸入/輸出擴(kuò)展器(I/O Expander)。隨著現(xiàn)代嵌入式系統(tǒng)和單片機(jī)(MCU)應(yīng)用規(guī)模的不斷擴(kuò)大,原生 MCU 或微控制器板載的 GPIO(通用輸入/輸出)資源往往無(wú)法滿足日益豐富的外設(shè)控制需求。此時(shí),借助 I/O 擴(kuò)展器通過(guò) I2C 總線方式增加 GPIO 引腳數(shù)量成為一種常見(jiàn)且經(jīng)濟(jì)的解決方案。TCA9539 提供了高達(dá) 16 根可編程的雙向數(shù)字 I/O 引腳,并且具備多個(gè)軟件可配置特性,例如中斷輸出、上拉電阻使能、寄存器配置靈活等,廣泛應(yīng)用于工業(yè)控制、家電智能化、消費(fèi)電子、智能儀表、通信設(shè)備等領(lǐng)域。
TCA9539 在功能上與 TCA9538、TCA9534 等系列芯片相似,但其 I/O 數(shù)量更大,封裝引腳數(shù)也相對(duì)增加,為工程師在 PCB 設(shè)計(jì)時(shí)提供了更高的靈活性。該芯片所支持的工作電壓范圍從 2.3V 到 5.5V,適用于多種電源方案;內(nèi)部上拉電阻可通過(guò)寄存器開(kāi)關(guān)控制,方便與開(kāi)漏(Open-Drain)或推挽(Push-Pull)輸出的外部器件聯(lián)用;同時(shí)具有可配置的中斷機(jī)制,一旦某一路輸入引腳狀態(tài)發(fā)生變化,即可通過(guò)中斷輸出通知主控芯片,大大節(jié)省了輪詢資源,并提升了整體系統(tǒng)的響應(yīng)速度和功耗效率。
二、TCA9539 的基本參數(shù)與特性
為了幫助讀者更全面地理解 TCA9539,在此對(duì)其主要技術(shù)參數(shù)和功能特性進(jìn)行梳理。
供電電壓范圍
2.3V~5.5V:支持寬范圍單電源供電,可兼容 3.3V、5V 等常見(jiàn)電壓域。
典型工作電流:在靜態(tài)模式下約為 0.2mA(具體數(shù)值視溫度及電壓而定),有助于在低功耗場(chǎng)景中使用。
I2C 接口
支持標(biāo)準(zhǔn)模式(Standard Mode,最高速率 100kHz)和快速模式(Fast Mode,最高速率 400kHz)。
器件七位地址由硬件地址引腳(A0、A1、A2)決定,可連接多個(gè)同型號(hào)擴(kuò)展器于同一總線上。
數(shù)字 I/O 引腳
共 16 根 I/O 引腳,分為兩組:P0_0 至 P0_7 一組,P1_0 至 P1_7 另一組。
每組 I/O 引腳可獨(dú)立配置為輸入或輸出模式,通過(guò)寄存器進(jìn)行設(shè)置。
輸入模式下,支持打開(kāi)/關(guān)閉內(nèi)部上拉電阻(約 40kΩ 左右)。
輸出模式下,支持推挽輸出,可承受典型 ±25mA 電流(注意在實(shí)際工程應(yīng)用時(shí)要考慮 PCB 布線和負(fù)載能力)。
中斷功能
具有可編程中斷輸出(INT)。一旦任意配置為輸入模式的引腳狀態(tài)發(fā)生變化,中斷引腳會(huì)變?yōu)榈碗娖剑ㄖ骺匦酒M(jìn)行后續(xù)讀寄存器操作。
中斷機(jī)制:通過(guò)中斷極性寄存器(Configuration Register)配置,支持電平觸發(fā)。
封裝形式
常見(jiàn)封裝:16 引腳 TSSOP(縮小型表面貼封裝),也有少量 HVQFN(30 引腳)等封裝形式,適用于不同尺寸和散熱需求的 PCB 設(shè)計(jì)。
溫度范圍
商用級(jí):–40℃+85℃,部分版本可支持工業(yè)級(jí)溫度范圍(–40℃+105℃)。
當(dāng)溫度升高時(shí),靜態(tài)電流會(huì)略微上升,但對(duì)數(shù)字 I/O 功能影響較小。
其它特性
斷電保護(hù):I/O 引腳在芯片失電時(shí)不會(huì)對(duì)外部電路造成大電流泄露(Ioff 保護(hù))。
系統(tǒng)復(fù)位時(shí),所有寄存器復(fù)位到默認(rèn)值(輸入模式,上拉失能,中斷屏蔽)。
ESD 保護(hù):所有引腳具備較高的靜電防護(hù)能力,有利于減少生產(chǎn)和調(diào)試過(guò)程中的意外損壞。
三、引腳說(shuō)明與功能描述
TCA9539 封裝通常有兩種形式:TSSOP-16 和 HVQFN-30,這里以最為常見(jiàn)的 TSSOP-16 封裝(型號(hào)示例:TCA9539D(TSSOP-16))為例,結(jié)合引腳功能進(jìn)行介紹。
VCC(引腳 1)
功能:芯片的正電源輸入端,典型電壓范圍 2.3V~5.5V。
使用注意:建議在 VCC 引腳與 GND 之間并聯(lián)一個(gè) 0.1μF 陶瓷電容,用于濾除電源噪聲,保證數(shù)字邏輯穩(wěn)定。
GND(引腳 8)
功能:地參考。所有 I/O 信號(hào)與內(nèi)部邏輯均以 GND 為參考電位,PCB 走線時(shí)需確保地線無(wú)噪聲、阻抗較低。
SCL(引腳 15)
功能:I2C 總線時(shí)鐘線輸入。主控設(shè)備(如 MCU)通過(guò)該引腳向 TCA9539 發(fā)送讀/寫時(shí)鐘信號(hào)。
注意事項(xiàng):SCL 引腳為開(kāi)漏(open-drain)輸出,需要外部上拉電阻(典型 4.7kΩ~10kΩ)連接到 VCC。
SDA(引腳 14)
功能:I2C 總線數(shù)據(jù)線輸入/輸出(雙向)。與 SCL 類似,也為開(kāi)漏輸出,需要外部上拉電阻。
注意:在多主機(jī)或多從機(jī)環(huán)境下,要確保總線上的沖突檢測(cè)機(jī)制,避免兩個(gè)器件同時(shí)輸出信號(hào)導(dǎo)致短路或數(shù)據(jù)沖突。
A0、A1、A2(引腳 2、3、4)
功能:硬件地址引腳(Address Pin),用于指定器件的 I2C 從地址。
地址映射:七位 I2C 地址格式一般為 0b0100[A2][A1][A0],其中 A2、A1、A0 為引腳電平(0 或 1)。
使用:通過(guò)外部接地或接 VCC 方式配置地址,使得多片 TCA9539 可以共用同一 I2C 總線。最多可接入 23=8 片器件,地址范圍:0x74~0x7B(十六進(jìn)制)。
INT(引腳 5)
功能:中斷輸出。默認(rèn)情況下為高電平(若開(kāi)漏輸出,需上拉外部電阻)。當(dāng)任意輸入引腳狀態(tài)與配置的中斷觸發(fā)條件匹配時(shí),芯片會(huì)將 INT 拉低,主控設(shè)備檢測(cè)到中斷后可讀取中斷標(biāo)志寄存器,確定具體變化的引腳。
特性說(shuō)明:一旦中斷被觸發(fā),需要通過(guò) I2C 讀操作對(duì) Input Port Register 進(jìn)行訪問(wèn)后,INT 才會(huì)被自動(dòng)清除并恢復(fù)高電平。
P0_0~P0_7(引腳 6、7、9、10、11、12、13、16)
輸入模式:允許外部器件輸出高/低電平信號(hào),通過(guò)寄存器讀取狀態(tài)。內(nèi)部上拉電阻可選。
輸出模式:芯片通過(guò)寄存器寫入數(shù)據(jù),輸出高電平(接近 VCC)或低電平(接近 GND),輸出驅(qū)動(dòng)能力約 ±25mA。
功能:第一組 8 個(gè)雙向數(shù)字 I/O 引腳,可編程配置為輸入或輸出。每根引腳在硬件層面為雙向三態(tài)緩沖結(jié)構(gòu)。
詳細(xì)說(shuō)明:
典型應(yīng)用:連接按鍵、LED 指示燈、繼電器驅(qū)動(dòng)輸入/輸出、讀取開(kāi)關(guān)狀態(tài)等多種場(chǎng)景。
P1_0~P1_7(引腳 17、18、19、20、21、22、23、24)
功能:第二組 8 個(gè)雙向數(shù)字 I/O 引腳,與 P0_* 類似。
配置寄存器獨(dú)立:P0、P1 兩組各有獨(dú)立的 Configuration、Input Port、Output Port、Polarity Inversion 寄存器,便于軟件分組管理。
其他引腳(若存在)
HVQFN-30 封裝版本會(huì)增加引腳,如地平面兼容性腳、散熱引腳等,使用時(shí)需對(duì)應(yīng)參考其原廠數(shù)據(jù)手冊(cè)。
四、寄存器結(jié)構(gòu)與地址映射
TCA9539 內(nèi)部設(shè)有多個(gè)寄存器,用于配置引腳方向、輸入輸出狀態(tài)、極性反轉(zhuǎn)(Polarity Inversion)和中斷以及硬件上拉電阻控制等。以下以從地址 0x00 開(kāi)始的寄存器映射進(jìn)行概述。
寄存器地址 | 寄存器名稱 | 讀寫權(quán)限 | 功能說(shuō)明 |
---|---|---|---|
0x00 | Input Port 0 | 只讀 | 讀取 P0_7~P0_0 的實(shí)時(shí)輸入值 |
0x01 | Input Port 1 | 只讀 | 讀取 P1_7~P1_0 的實(shí)時(shí)輸入值 |
0x02 | Output Port 0 | 讀寫 | 讀取/寫入 P0_7~P0_0 的輸出緩沖寄存器值 |
0x03 | Output Port 1 | 讀寫 | 讀取/寫入 P1_7~P1_0 的輸出緩沖寄存器值 |
0x04 | Polarity Inv. 0 | 讀寫 | P0_7~P0_0 的輸入極性反轉(zhuǎn)控制位,1=反轉(zhuǎn) |
0x05 | Polarity Inv. 1 | 讀寫 | P1_7~P1_0 的輸入極性反轉(zhuǎn)控制位 |
0x06 | Config. 0 | 讀寫 | P0_7~P0_0 的方向配置位,1=輸入,0=輸出 |
0x07 | Config. 1 | 讀寫 | P1_7~P1_0 的方向配置位,1=輸入,0=輸出 |
功能:讀取當(dāng)前引腳電平狀態(tài)。每位對(duì)應(yīng)一個(gè)引腳,從最低位 P_0 到最高位 P_7。
使用場(chǎng)景:當(dāng)某一路引腳配置為輸入模式時(shí),通過(guò)讀操作獲取外部信號(hào)電平。若極性反轉(zhuǎn)寄存器已設(shè)置對(duì)相應(yīng)位進(jìn)行反轉(zhuǎn),則讀取值為反相結(jié)果。
Output Port 寄存器(0x02、0x03)
功能:用于設(shè)置或讀取輸出模式下的引腳輸出狀態(tài)。寫入 1 對(duì)應(yīng)輸出高電平(VCC),寫入 0 對(duì)應(yīng)輸出低電平(GND)。
注意事項(xiàng):寫入該寄存器只是更新內(nèi)部輸出值,芯片在下一次 I2C 事務(wù)后立即將輸出狀態(tài)更新到對(duì)應(yīng)引腳上。若相應(yīng)引腳配置為輸入模式,則寫入值不會(huì)對(duì)引腳產(chǎn)生直接影響,但會(huì)保留到寄存器中,一旦切換為輸出模式則按照寄存器值輸出。
Polarity Inversion 寄存器(0x04、0x05)
功能:控制對(duì)應(yīng)輸入引腳是否對(duì)讀取值進(jìn)行反轉(zhuǎn)。寫入 1 表示對(duì)應(yīng)位輸入值取反后再讀取,寫入 0 表示直接讀取實(shí)際電平。
應(yīng)用示例:在一些需要“活動(dòng)低”邏輯的場(chǎng)景下,可通過(guò)將 Polarity Inversion 對(duì)應(yīng)位置為 1,而不必外部再增加反相電路,簡(jiǎn)化硬件設(shè)計(jì)。
Configuration 寄存器(0x06、0x07)
功能:設(shè)置對(duì)應(yīng)引腳為輸入模式(寫入 1)或輸出模式(寫入 0)。
使用示例:若 MCU 需要控制 P0_3 輸出電機(jī)驅(qū)動(dòng)信號(hào),可寫入 0x00 0x06 的第 3 位為 0;若需要讀取 P1_5 的按鍵狀態(tài),可寫入 0x20(0010 0000)到 0x07,將 P1_5 配置為輸入。
寄存器訪問(wèn)注意事項(xiàng)
連續(xù)讀寫:TCA9539 支持多字節(jié)連續(xù)讀寫模式,先發(fā)送寄存器地址(0x00~0x07),然后依次讀取或?qū)懭攵鄠€(gè)寄存器。
讀寄存器時(shí):I2C 總線主機(jī)發(fā)起從讀操作,先發(fā)送起始信號(hào)和從地址(帶讀位),然后依次讀取寄存器值,直到 NACK 或停止信號(hào)。
寫寄存器時(shí):先發(fā)送起始信號(hào)和從地址(帶寫位),然后發(fā)送寄存器地址,再依次寫入數(shù)據(jù),最后發(fā)送停止信號(hào)。
五、I2C 地址選擇與布線
TCA9539 的 I2C 地址由固定高位 0b0100 和硬件地址引腳 A2、A1、A0 共同決定,完整的七位地址格式為:
0 1 0 0 A2 A1 A0
A2、A1、A0:連接 GND 時(shí)代表邏輯 0,連接 VCC 時(shí)代表邏輯 1。舉例:若 A2=0、A1=1、A0=0,則地址為 0b0100 010 = 0x22(8 位二進(jìn)制左移 1 位加讀寫位后的值),對(duì)應(yīng)寫操作的 8 位地址為 0x44(0x22<<1 | 0),讀操作為 0x45(0x22<<1 | 1)。
多器件布線注意:若在同一 I2C 總線上連接多片 TCA9539,需要確保每片器件的 A2、A1、A0 地址不同,否則會(huì)引起地址沖突,導(dǎo)致總線沖突或無(wú)法通信。通常可通過(guò) DIP 開(kāi)關(guān)或電阻配置實(shí)現(xiàn)靈活地址分配。
上拉電阻:SCL 與 SDA 均為開(kāi)漏輸出,需要使用合適的外部上拉電阻(典型阻值為 4.7kΩ~10kΩ,根據(jù)總線電容大小和工作速率進(jìn)行調(diào)整)。若總線較長(zhǎng)或連接器件較多,須適當(dāng)減小上拉電阻阻值以滿足上升時(shí)間要求,同時(shí)也要考慮功耗增加。
六、配置與操作實(shí)例
以下以典型應(yīng)用場(chǎng)景為例,演示如何通過(guò) I2C 總線與 MCU 搭配,完成 TCA9539 的基礎(chǔ)配置與使用操作。
環(huán)境假設(shè)
MCU 平臺(tái):STM32 系列單片機(jī),I2C1 口連接 TCA9539。
TCA9539 A2、A1、A0 均接地,對(duì)應(yīng)七位地址 0b0100 000 = 0x20(寫操作地址 0x40,讀操作地址 0x41)。
外部需要控制 8 個(gè) LED 燈、讀取 4 路按鍵、并在按鍵狀態(tài)變化時(shí)觸發(fā)中斷。
硬件連接示意
MCU I2C1_SCL → 上拉電阻 → VCC
MCU I2C1_SDA → 上拉電阻 → VCC
MCU I2C1_SCL → TCA9539 SCL
MCU I2C1_SDA → TCA9539 SDA
TCA9539 A0、A1、A2 → GND
TCA9539 VCC → +3.3V 電源
TCA9539 GND → GND
TCA9539 INT → MCU 外部中斷引腳(如 EXTI0)
TCA9539 P0_0~P0_7 → 8 個(gè) LED 燈(LED 陰極接 GND,LED 陽(yáng)極通過(guò)限流電阻接 P0_*/輸出管腳)
TCA9539 P1_0~P1_3 → 4 個(gè)按鍵(按鍵另一端連接 +3.3V,按鍵按下時(shí)拉高輸入)
TCA9539 P1_4~P1_7 → 預(yù)留或其他外部擴(kuò)展
軟件編程流程
在中斷服務(wù)函數(shù)中,首先清除對(duì)應(yīng) EXTI 標(biāo)志。
通過(guò) I2C 讀取寄存器 Input Port 1 (地址 0x01)獲得 P1_7~P1_0 的當(dāng)前電平值,或者先讀 Polarity Inversion,再讀 Input Port 以區(qū)分觸發(fā)原因。
根據(jù)按鍵值判斷進(jìn)行相應(yīng)的業(yè)務(wù)處理,如翻轉(zhuǎn)某路 LED 燈狀態(tài):先讀取 Output Port 0(地址 0x02),取反對(duì)應(yīng)位,再寫入即可實(shí)現(xiàn) LED 翻轉(zhuǎn)。
中斷清除:只要完成了對(duì) Input Port 讀取,TCA9539 會(huì)自動(dòng)復(fù)位中斷輸出,將 INT 引腳拉高。(若仍有按鍵未釋放,保持中斷條件,INT 會(huì)持續(xù)保持低電平,需要再次讀取以清除)。
步驟一:初始化 I2C
步驟二:配置 TCA9539 引腳方向
步驟三:配置內(nèi)部上拉與極性反轉(zhuǎn)(可選)
步驟四:配置中斷功能
步驟五:寫入初始化輸出狀態(tài)
步驟六:主循環(huán)與中斷處理
主循環(huán)可定期或根據(jù)業(yè)務(wù)邏輯直接讀取 Input Port 寄存器監(jiān)測(cè)輸入狀態(tài)(若不使用中斷方式)。
若使用中斷,當(dāng)按鍵狀態(tài)變化時(shí),TCA9539 INT 腳變?yōu)榈碗娖接|發(fā) MCU 外部中斷:
對(duì)于 LED 燈初始狀態(tài),若需要關(guān)閉全部 LED,可向 Output Port 0 (地址 0x02)寫入 0x00(所有位 0,輸出低電平)。
如需點(diǎn)亮個(gè)別 LED,可寫入對(duì)應(yīng)位為 1(輸出高電平),例如要點(diǎn)亮 P0_0 和 P0_7,則寫 0x81。
將需監(jiān)測(cè)的 P1_0~P1_3 對(duì)應(yīng)位寫入寄存器配置(已經(jīng)在 Configuration 1 設(shè)置為輸入)。
確保內(nèi)部極性反轉(zhuǎn)寄存器設(shè)置正確,以便中斷觸發(fā)條件符合需求。一般當(dāng)引腳狀態(tài)與配置的極性不同才會(huì)觸發(fā)中斷。
MCU 端配置對(duì)應(yīng) GPIO 為浮空輸入并連接到 EXTI0 或其他外部中斷通道,設(shè)置為下降沿觸發(fā)。將中斷優(yōu)先級(jí)與使能打開(kāi)。
若需要按鍵處于空閑時(shí)為低電平,按下時(shí)為高電平,則可打開(kāi)內(nèi)部上拉:向寄存器 Output Port 1 (地址 0x03)寫入 0x0F(P1_0~P1_3 = 1,上拉使能)。注意:Output Port 只在配置為輸出模式時(shí)對(duì)引腳有效,但對(duì)于輸入模式而言,寫入 Output Port 的 1 可觸發(fā)內(nèi)部上拉電阻。
若希望將按鍵邏輯反相(例如需要按鍵按下讀到 0),可向 Polarity Inversion 1 (地址 0x05)寫入 0x0F。
將 P0_0~P0_7 配置為輸出模式:向寄存器 Configuration 0 (地址 0x06)寫入 0x00(所有位 0,對(duì)應(yīng)全為輸出)。
將 P1_0P1_3 配置為輸入模式、P1_4P1_7 配置為輸入或輸出(視實(shí)際需求):例如將 P1_0P1_3 輸入、P1_4P1_7 全部輸入,可向 Configuration 1 (地址 0x07)寫入 0xFF(所有位 1,對(duì)應(yīng)全為輸入)。
配置 STM32 I2C1 引腳為開(kāi)漏復(fù)用模式,速度設(shè)置為 100kHz 或 400kHz。
初始化 I2C1 外設(shè)時(shí)鐘、GPIO、NVIC 中斷優(yōu)先級(jí)等。
示例代碼片段(偽代碼)
提示:本文不在此貼出完整 HAL 或底層驅(qū)動(dòng)代碼,僅展示核心流程,具體代碼應(yīng)結(jié)合平臺(tái) SDK 和 I2C 驅(qū)動(dòng)移植。
#define TCA9539_ADDR_WRITE 0x40 // A2,A1,A0=0, 寫地址
#define TCA9539_ADDR_READ 0x41 // A2,A1,A0=0, 讀地址
void TCA9539_Init(void) {
uint8_t config0 = 0x00; // P0 全部輸出
uint8_t config1 = 0x0F; // P1_0~P1_3 輸入,P1_4~P1_7 輸入或預(yù)留
// 寫 Configuration 寄存器
I2C_WriteRegister(TCA9539_ADDR_WRITE, 0x06, &config0, 1);
I2C_WriteRegister(TCA9539_ADDR_WRITE, 0x07, &config1, 1);
// 打開(kāi) P1_0~P1_3 內(nèi)部上拉
uint8_t output1 = 0x0F;
I2C_WriteRegister(TCA9539_ADDR_WRITE, 0x03, &output1, 1);
// 可選:讀 Polarity Inversion,設(shè)置按鍵邏輯
uint8_t poliInv1 = 0x00; // 1:反相,0:不反相
I2C_WriteRegister(TCA9539_ADDR_WRITE, 0x05, &poliInv1, 1);
// 初始化 P0 輸出狀態(tài),全部關(guān)閉 LED
uint8_t output0 = 0x00;
I2C_WriteRegister(TCA9539_ADDR_WRITE, 0x02, &output0, 1);
// 配置 MCU EXTI 中斷對(duì)應(yīng) TCA9539 INT 引腳
EXTI_Config(TCA9539_INT_PIN, FALLING_EDGE);
}
void EXTI0_IRQHandler(void) {
if (EXTI_GetITStatus(TCA9539_INT_PIN) != RESET) {
// 清除中斷掛起標(biāo)志
EXTI_ClearITPendingBit(TCA9539_INT_PIN);
// 讀取 P1 輸入值
uint8_t keyState = 0;
I2C_ReadRegister(TCA9539_ADDR_READ, 0x01, &keyState, 1);
// 讀取當(dāng)前 LED 輸出狀態(tài)
uint8_t ledState = 0;
I2C_ReadRegister(TCA9539_ADDR_READ, 0x02, &ledState, 1);
// 例如:當(dāng) P1_0 按鍵按下時(shí)(keyState & 0x01 = 1),翻轉(zhuǎn) P0_0 LED
if (keyState & 0x01) {
ledState ^= 0x01; // 將 P0_0 對(duì)應(yīng)位取反
I2C_WriteRegister(TCA9539_ADDR_WRITE, 0x02, &ledState, 1);
}
// 其他按鍵處理,省略……
}
}
上例展示了借助中斷與輪詢相結(jié)合的方式,實(shí)現(xiàn)按鍵觸發(fā)后翻轉(zhuǎn) LED 的功能。實(shí)際項(xiàng)目中,需根據(jù)系統(tǒng)架構(gòu)將 I2C 操作封裝到更高層驅(qū)動(dòng),加入錯(cuò)誤重試、總線占用判斷、中斷優(yōu)先級(jí)分配等完善邏輯。
七、TCA9539 的詳細(xì)功能解析
在了解了基本寄存器與示例操作后,下面對(duì) TCA9539 的各項(xiàng)功能進(jìn)行更深入的剖析。
雙向 I/O 結(jié)構(gòu)
TCA9539 內(nèi)部采用 CMOS 柵極驅(qū)動(dòng)器構(gòu)建雙向三態(tài)口,通過(guò)配置寄存器決定引腳的輸入或輸出角色。
輸入模式:三態(tài)緩沖器斷開(kāi),外部電路通過(guò)上拉/下拉或被動(dòng)拉電阻給出電平,內(nèi)部通過(guò)一個(gè)采樣鎖存電路將狀態(tài)保存在 Input Port 寄存器。對(duì)于帶有 Polarity Inversion 的引腳,則在讀取時(shí)先取反再送出。
輸出模式:內(nèi)部的輸出驅(qū)動(dòng)器按照 Output Port 寄存器數(shù)據(jù)驅(qū)動(dòng),輸出高電平(近 VCC)或低電平(GND)。輸出結(jié)構(gòu)通常為推挽(Push-Pull)配置,因而能為外部負(fù)載提供較強(qiáng)的驅(qū)動(dòng)能力。
內(nèi)部上拉電阻(Internal Pull-up)
當(dāng)某個(gè)引腳配置為輸入模式時(shí),對(duì)應(yīng) Output Port 寄存器位為 1,可以使能該腳內(nèi)部大約 40kΩ 左右的上拉電阻。通過(guò)這一特性,可以在按鍵或開(kāi)關(guān)未按下時(shí)將引腳拉到高電平,節(jié)省了在 PCB 上布置外置上拉電阻的空間和成本。
如果需要消除抖動(dòng)干擾,仍可在外部增加 RC 濾波或更低阻值的上拉電阻。
極性反轉(zhuǎn)功能(Polarity Inversion)
Polarity Inversion 寄存器允許將輸入電平進(jìn)行反相處理。讀寄存器時(shí),當(dāng)對(duì)應(yīng)位設(shè)置為 1,這一路引腳的實(shí)際電平先取反,再返回給主機(jī)。
使用場(chǎng)景:很多按鈕或電平檢測(cè)需求是“按下為低電平”,則可通過(guò)硬件接入方式讓空閑態(tài)為高電平,按下拉低;若想要邏輯上讀到“按下=1”,可將極性反轉(zhuǎn)位置 1,讓上層軟件直接讀取到按鍵按下的邏輯 1。
中斷機(jī)制與清除條件
當(dāng)任一配置為輸入模式的引腳電平發(fā)生變化,并且與 Polarity Inversion 邏輯組合滿足“中斷觸發(fā)條件”時(shí),TCA9539 會(huì)將 INT 引腳拉低,通知主控設(shè)備;這一變化在內(nèi)部通過(guò) 16 位的“中斷標(biāo)志”寄存器鏈路跟蹤,但該寄存器對(duì)外只在讀取 Input Port 或 Polarity Inversion 后隱式清零。
具體清除流程:只要主控完成了對(duì)任意一個(gè) Input Port 寄存器的讀取操作,芯片會(huì)自動(dòng)清除對(duì)應(yīng)的中斷標(biāo)志,并將 INT 拉回高電平。若按鍵仍保持在觸發(fā)條件下(例如持續(xù)按下),INT 會(huì)持續(xù)保持低電平;只有在讀取并松開(kāi)按鍵或電平恢復(fù)后,再次讀取 Input Port 時(shí)才清除。
寫 Polarity Inversion、Configuration、Output Port 等并不會(huì)自動(dòng)清除中斷,必須透過(guò)讀 Input Port 以去除中斷。
低功耗與斷電保護(hù)
在 TCA9539 失去供電(VCC=0V)時(shí),引腳進(jìn)入高阻態(tài),無(wú)大電流泄露,不會(huì)對(duì)外部驅(qū)動(dòng)器件產(chǎn)生影響。這一特性在休眠待機(jī)模式或整機(jī)斷電時(shí),讓各個(gè)擴(kuò)展器件不至于拉低總線或加載到 MCU,避免意外損傷。
常規(guī)工作模式下,整個(gè)芯片靜態(tài)工作電流典型 0.2mA 左右,在待機(jī)模式或停止時(shí)更低,可滿足多數(shù)工業(yè)和移動(dòng)應(yīng)用對(duì)功耗的嚴(yán)格要求。
熱特性與可靠性
TCA9539 的晶圓制造工藝確保了在 –40℃+85℃ 范圍內(nèi)性能一致;若應(yīng)用在更高溫度環(huán)境下(如工業(yè)現(xiàn)場(chǎng)、汽車電子等),需結(jié)合 TI 提供的工業(yè)級(jí)版本(–40℃+105℃)或在設(shè)計(jì)上增加散熱、監(jiān)控溫度等輔助設(shè)計(jì)。
芯片內(nèi)部具備 ESD 保護(hù)(≥ 2kV HBM),可以抵御生產(chǎn)環(huán)境和工程調(diào)試中的靜電沖擊,但在實(shí)際 PCB 設(shè)計(jì)中仍要遵循良好接地、隔離與走線規(guī)范,以免大電流或強(qiáng)電磁干擾影響穩(wěn)定性。
八、應(yīng)用場(chǎng)景與典型設(shè)計(jì)
借助 TCA9539 16 位 GPIO 擴(kuò)展能力,可在多種場(chǎng)景中發(fā)揮作用。以下從硬件和軟件兩個(gè)角度,結(jié)合典型案例進(jìn)行介紹。
工業(yè)控制系統(tǒng)
使用 P0_* 引腳驅(qū)動(dòng) 8 路 LED 指示燈;每個(gè)引腳串聯(lián)一個(gè)限流電阻(典型 1kΩ~2.2kΩ)連接 LED。依次通過(guò) Output Port 0(0x02)寫入不同的位值,實(shí)現(xiàn)燈的循環(huán)閃爍、流水燈效果等。
使用 P1_* 引腳采集緊急停止按鈕、限位開(kāi)關(guān)、溫度傳感器的數(shù)字告警信號(hào)等;配置為輸入模式并打開(kāi)內(nèi)部上拉,使得默認(rèn)狀態(tài)為高電平,按下或觸發(fā)時(shí)變?yōu)榈碗娖剑ㄟ^(guò)中斷聚焦處理。
軟件設(shè)計(jì)利用 RTOS(如 FreeRTOS)時(shí),可將 I2C 操作放在專門的任務(wù)中,在中斷回調(diào)函數(shù)中僅做快速標(biāo)志記錄,避免阻塞主循環(huán)或影響實(shí)時(shí)性。
應(yīng)用需求:在 PLC、工業(yè)以太網(wǎng)交換機(jī)、人機(jī)界面(HMI)等設(shè)備中,需要控制大量指示燈、狀態(tài)信號(hào)、開(kāi)關(guān)、傳感器等,但主控微處理器的 I/O 數(shù)量有限。
解決方案:通過(guò)一條 I2C 總線連接一到多片 TCA9539,實(shí)現(xiàn)最多 16×n 路擴(kuò)展,其中 n 為擴(kuò)展芯片數(shù)量。若需要更大擴(kuò)展,可將多個(gè) TCA9539 級(jí)聯(lián)連接,每片獨(dú)立設(shè)置 A0~A2 地址。
具體設(shè)計(jì):
智能家居與消費(fèi)電子
描述:機(jī)器人主控板需要控制多路電機(jī)使能、燈光、蜂鳴器、傳感器狀態(tài)檢測(cè)等,若僅靠主控 MCU 端口,容易資源瓶頸。
方案:TCA9539 通過(guò) I2C 拓展更多 GPIO,用于電機(jī)驅(qū)動(dòng)器使能信號(hào)、LED 狀態(tài)燈、蜂鳴器控制、限位開(kāi)關(guān)檢測(cè)、超聲波傳感器觸發(fā)信號(hào)等。
優(yōu)勢(shì):I2C 總線占用引腳極少,而且可通過(guò)中斷機(jī)制快速獲取外部事件。
描述:智能墻壁面板集成觸摸按鍵、LED 指示燈、燈光、風(fēng)扇、窗簾等多路控制,但單片 MCU 或智能主控板的 I/O 數(shù)量不足。
方案:使用 TCA9539 擴(kuò)展面板上的按鍵掃描、LED 驅(qū)動(dòng)和設(shè)備控制信號(hào)。通過(guò) I2C 總線將多個(gè)面板模塊級(jí)聯(lián)至主控板,整體控制更加集中、節(jié)省布線空間。
優(yōu)勢(shì):可通過(guò)軟件動(dòng)態(tài)配置不同區(qū)域的 I/O,方便后續(xù)功能升級(jí)。
場(chǎng)景一:智能面板控制
場(chǎng)景二:機(jī)器人或無(wú)人機(jī)控制板
通信設(shè)備
使用 TCA9539 驅(qū)動(dòng)光纖鏈路狀態(tài)指示燈和電源指示燈,通過(guò) I2C 定時(shí)刷新燈狀態(tài)。
使用另一片 TCA9539 采集前面板按鍵、撥碼開(kāi)關(guān)等輸入信號(hào),將狀態(tài)信息傳遞給主控處理。
通過(guò)多片級(jí)聯(lián),可輕松支持 32~48 路以上的數(shù)字 I/O,滿足大型設(shè)備面板布局繁雜需求。
應(yīng)用示例:交換機(jī)、路由器、基站等設(shè)備常常需要將面板指示燈、按鍵、風(fēng)扇控制、蜂鳴器等信號(hào)集中管理。
典型設(shè)計(jì):
醫(yī)療儀器與測(cè)試設(shè)備
應(yīng)用需求:在便攜式檢驗(yàn)設(shè)備、心電圖機(jī)、血糖儀等醫(yī)療設(shè)備中,需要采集多路傳感器開(kāi)關(guān)信號(hào)或控制面板按鈕,并實(shí)時(shí)反饋狀態(tài)。
方案:以 TCA9539 低功耗、寬電壓兼容優(yōu)勢(shì),將電路板功耗降到最低,同時(shí)保證信號(hào)連貫可靠。
九、TCA9539 典型接線與 PCB 設(shè)計(jì)注意事項(xiàng)
在實(shí)際 PCB 設(shè)計(jì)時(shí),需要綜合考慮電源管理、信號(hào)完整性以及熱源分布等要素,以確保 TCA9539 長(zhǎng)期穩(wěn)定工作。下面總結(jié)常見(jiàn)注意要點(diǎn):
電源濾波與去耦
VCC 與 GND 之間并聯(lián) 0.1μF 陶瓷電容:放置在芯片腳位附近,濾除高頻噪聲。
如需更高抗干擾設(shè)計(jì),可增加 1μF 電解電容:主要用于削減低頻紋波。
I2C 總線布線原則
SDA 和 SCL 信號(hào)線要成對(duì)布局:盡量保持等長(zhǎng),減小串?dāng)_。
總線末端僅使用合適阻值的上拉電阻:若多片器件并聯(lián),推薦在 I2C 總線最遠(yuǎn)端放置上拉電阻,一端直接接 VCC。
保持走線盡量短:長(zhǎng)走線、電容過(guò)大會(huì)增加上升沿延時(shí),導(dǎo)致 I2C 信號(hào)失真。
INT 中斷信號(hào)布線
INT 引腳為開(kāi)漏輸出:需要外部上拉(4.7kΩ~10kΩ)到 VCC。
在 PCB 上盡量靠近 MCU 的 EXTI 引腳布局:使中斷線最短,減少延遲和干擾。
地址引腳(A0~A2)配置
上拉/下拉電阻配置:若 PCB 在量產(chǎn)時(shí)需固定地址,可直接通過(guò)硬連線接 VCC 或 GND;若需要靈活配置地址,可添加 0Ω 電阻焊盤或可調(diào)跳線,實(shí)現(xiàn)現(xiàn)場(chǎng)可編程。
避免浮空:A0~A2 引腳不得懸空,否則地址狀態(tài)不確定,導(dǎo)致 I2C 響應(yīng)異常。
地線鋪銅與散熱
TCA9539 的功耗并不大,但在工業(yè)級(jí)環(huán)境時(shí),仍需保證良好接地,防止大電流電磁干擾。可在 PCB 底層鋪設(shè)完整的地平面,減少地線電阻和回流噪聲。
對(duì)于 HVQFN 等帶有散熱腳的封裝,應(yīng)在芯片下方、底層放置焊盤增強(qiáng)散熱,并通過(guò)過(guò)孔連接到底層地平面。
布局與信號(hào)隔離
I2C 總線盡量遠(yuǎn)離高頻或大電流信號(hào)線:如 DC-DC 開(kāi)關(guān)電源、射頻天線等,以免干擾總線通信。
若板上電源噪聲較大,可考慮在 SCL、SDA 線上增加 RC 濾波網(wǎng)絡(luò)(例如 300Ω 串阻+47pF 電容),但要注意影響 I2C 速率。
十、與其他 I2C I/O 擴(kuò)展器的比較
市場(chǎng)上除 TCA9539 外,還有多款 I2C 接口的 I/O 擴(kuò)展器,例如 PCF8575、MCP23017、TCA6408A 等。下面從多個(gè)維度對(duì) TCA9539 與同類產(chǎn)品進(jìn)行對(duì)比,以幫助工程師根據(jù)項(xiàng)目需求做出最佳選擇。
I/O 數(shù)量
TCA9539:共 16 路 I/O,分為兩組(P0、P1)。
PCF8575(NXP):16 路 I/O,也是兩組 8 路。功能與 TCA9539 類似,但其極性反轉(zhuǎn)寄存器與中斷表現(xiàn)略有差異。
MCP23017(Microchip):16 路 I/O,附帶更多 GPIO 中斷配置選項(xiàng),例如可針對(duì)每一路 IO 進(jìn)行中斷屏蔽、更靈活的中斷觸發(fā)邊沿/電平選擇。
電壓兼容性
TCA9539 可支持 2.3V~5.5V;
MCP23017 支持 1.8V~5.5V,更適合低壓系統(tǒng);
PCF8575 支持 2.5V~5.5V。
中斷機(jī)制
TCA9539:當(dāng)任意輸入口狀態(tài)與極性反轉(zhuǎn)結(jié)果不一致時(shí)觸發(fā)中斷,中斷清除需通過(guò)讀取 Input Port。
MCP23017:支持為每路引腳單獨(dú)設(shè)置中斷控制,觸發(fā)源可選電平/邊沿;中斷輸出由寄存器 INTCAP 或 GPIO 寄存器讀取后清除。
PCF8575:不帶硬件中斷輸出,需要通過(guò)輪詢檢測(cè)輸入變化;或通過(guò)其他邏輯方式間接實(shí)現(xiàn)。
軟件驅(qū)動(dòng)與生態(tài)支持
TCA9539:TI 提供了詳細(xì)的器件手冊(cè),但軟件示例較少,需要用戶自己編寫寄存器讀寫函數(shù)。社區(qū)相對(duì)較少,但兼容多數(shù) I2C 總線驅(qū)動(dòng),使用靈活。
MCP23017:Microchip 官方提供豐富的驅(qū)動(dòng)庫(kù)及應(yīng)用筆記,多數(shù)嵌入式框架(如 Arduino、Raspberry Pi)都有現(xiàn)成的驅(qū)動(dòng),開(kāi)發(fā)門檻低。
PCF8575:NXP 社區(qū)相對(duì)活躍,但在國(guó)內(nèi)的應(yīng)用案例少于 MCP 系列。
價(jià)格與可得性
TCA9539:定價(jià)略高于 PCF8575,但低于 MCP23017,適中。常見(jiàn)分銷商易采購(gòu)。
PCF8575:價(jià)格最低、供應(yīng)穩(wěn)定;但缺少豐富中斷和極性翻轉(zhuǎn)功能。
MCP23017:生態(tài)與文檔完善,但價(jià)格稍高,適用于對(duì)軟件支持有更高要求的項(xiàng)目。
綜上,如果項(xiàng)目對(duì)中斷靈活性要求一般、希望在 TI 生態(tài)內(nèi)進(jìn)行配套設(shè)計(jì),且電壓兼容范圍需覆蓋 2.3V 低電壓時(shí),TCA9539 是一個(gè)性價(jià)比較高的選擇;若對(duì)低壓(1.8V)支持或更靈活中斷需求較大,亦可考慮 MCP23017;若僅需簡(jiǎn)單 16 路并且對(duì)中斷不敏感,PCF8575 則是更經(jīng)濟(jì)的方案。
十一、軟件驅(qū)動(dòng)設(shè)計(jì)與移植注意事項(xiàng)
針對(duì) TCA9539,開(kāi)發(fā)時(shí)需根據(jù)硬件寄存器設(shè)計(jì)對(duì)應(yīng)的驅(qū)動(dòng)模塊,以便上層應(yīng)用層能夠使用簡(jiǎn)單的 API 完成按鍵讀取、LED 控制以及中斷處理。以下給出一份驅(qū)動(dòng)框架思路:
寄存器地址宏定義
#define TCA9539_REG_INPUT0 0x00
#define TCA9539_REG_INPUT1 0x01
#define TCA9539_REG_OUTPUT0 0x02
#define TCA9539_REG_OUTPUT1 0x03
#define TCA9539_REG_POLARITY0 0x04
#define TCA9539_REG_POLARITY1 0x05
#define TCA9539_REG_CONFIG0 0x06
#define TCA9539_REG_CONFIG1 0x07初始化函數(shù)
初始化 I2C 總線通信參數(shù)。
調(diào)用
TCA9539_SetConfig(uint8_t port, uint8_t value)
設(shè)置 GPIO 方向。調(diào)用
TCA9539_SetOutput(uint8_t port, uint8_t value)
設(shè)置初始輸出值。如需打開(kāi)按鍵內(nèi)部上拉:在配置為輸入后,寫入 Output Port 相應(yīng)位為 1。
讀寫基礎(chǔ)函數(shù)
uint8_t TCA9539_ReadRegister(uint8_t reg_addr)
:對(duì)單個(gè)寄存器讀取 1 字節(jié)數(shù)據(jù)。void TCA9539_WriteRegister(uint8_t reg_addr, uint8_t data)
:對(duì)單個(gè)寄存器寫入 1 字節(jié)數(shù)據(jù)。可擴(kuò)展為多字節(jié)讀寫函數(shù)。
GPIO 配置接口
void TCA9539_SetConfig(uint8_t port, uint8_t config_val)
:例如:
TCA9539_SetConfig(0, 0x00); // P0 全部輸出
若 port=0,向寄存器 Configuration0 寫入 config_val;
若 port=1,向寄存器 Configuration1 寫入 config_val。
輸出控制接口
void TCA9539_SetOutput(uint8_t port, uint8_t output_val)
:將 output_val 寫入對(duì)應(yīng) Output Port 寄存器。uint8_t TCA9539_GetOutput(uint8_t port)
:讀取當(dāng)前 Output Port 寄存器值。輸入讀取與極性控制
uint8_t TCA9539_GetInput(uint8_t port)
:讀取對(duì)應(yīng) Input Port 寄存器值。若需要先配置 Polarity Inversion,則讀到的是反相后的結(jié)果。void TCA9539_SetPolarity(uint8_t port, uint8_t polarity_val)
:控制 Polarity Inversion。中斷處理支持
bool TCA9539_CheckInterrupt(void)
:讀取 INT 引腳狀態(tài),若為低則表示有中斷待處理。在中斷服務(wù)函數(shù)中,調(diào)用
TCA9539_GetInput(port)
可以自動(dòng)清除中斷。根據(jù)返回值判斷哪個(gè)引腳發(fā)生變化。代碼示例框架
// 初始化 I2C 后調(diào)用
void TCA9539_Init(void) {
// 將 P0 全部配置為輸出
TCA9539_SetConfig(0, 0x00);
// 將 P1_0~P1_3 配置為輸入,打開(kāi)上拉
TCA9539_SetConfig(1, 0x0F);
// 打開(kāi) P1 上拉:將 Output1 寄存器對(duì)應(yīng)位置 1
TCA9539_SetOutput(1, 0x0F);
// 清除中斷標(biāo)志:讀一次 Input1
(void)TCA9539_GetInput(1);
}
// 外部中斷回調(diào)
void TCA9539_HandleInterrupt(void) {
// 讀取 P1 輸入數(shù)據(jù),自動(dòng)清除中斷
uint8_t state = TCA9539_GetInput(1);
// 根據(jù) state 執(zhí)行相應(yīng)操作
if (state & 0x01) {
// P1_0 發(fā)生變化
}
// 其他邏輯……
}
十二、設(shè)計(jì)時(shí)常見(jiàn)問(wèn)題與排查方法
在項(xiàng)目開(kāi)發(fā)中,常見(jiàn)以下幾種 TCA9539 相關(guān)的問(wèn)題及解決思路:
I2C 總線通訊異常
檢查 SDA、SCL 上拉電阻值是否合適(過(guò)大導(dǎo)致上升時(shí)間過(guò)長(zhǎng),丟失 ACK)。可適當(dāng)減小阻值至 4.7kΩ 或 2.2kΩ。
使用示波器或邏輯分析儀觀察 SDA、SCL 波形,確認(rèn)電平干凈、上升下降時(shí)間符合 I2C 規(guī)范。
確認(rèn)器件地址配置是否正確,對(duì)比 A0~A2 是否與軟件中設(shè)定一致。
現(xiàn)象:讀寫操作總失敗,無(wú)法 ACK,或者 ACK 偶發(fā)丟失。
排查方法:
中斷無(wú)法觸發(fā)或重復(fù)觸發(fā)異常
確保配置了正確的 Polarity Inversion 寄存器值;若按鍵采用下拉方式,則需要反相讀值。
確保在中斷服務(wù)函數(shù)中完成對(duì) Input Port 寄存器的讀取以清除中斷。若只是檢查 INT 而不讀寄存器,INT 會(huì)一直保持低電平。
檢查按鍵抖動(dòng)情況,必要時(shí)在按鍵輸入端加 RC 濾波,或在軟件中實(shí)現(xiàn)防抖。
現(xiàn)象:按鍵按下時(shí) INT 不拉低,或者松開(kāi)按鍵后仍然保持低電平。
排查方法:
輸出驅(qū)動(dòng)能力不足
TCA9539 單腳最大推挽輸出電流約為 ±25mA,但長(zhǎng)時(shí)間或并發(fā)大電流會(huì)導(dǎo)致內(nèi)部熱量積累。
若需要驅(qū)動(dòng)功率較大的負(fù)載(大功率 LED、繼電器線圈等),建議在 TCA9539 輸出端外接驅(qū)動(dòng)管(如 MOSFET、晶體管),或通過(guò)三極管/大功率 MOS 管進(jìn)行電平轉(zhuǎn)換與放大。
現(xiàn)象:驅(qū)動(dòng) LED 亮度不足,或驅(qū)動(dòng)繼電器線圈無(wú)法吸合。
排查方法:
引腳狀態(tài)異常或浮空
確保相應(yīng)引腳已經(jīng)配置為輸入模式,并且打開(kāi)了內(nèi)部上拉或 PCB 上存在外部上拉/下拉。否則懸空會(huì)導(dǎo)致讀到不穩(wěn)定值。
確認(rèn)按鍵線路連接是否正確,是否存在焊盤虛焊、短路或斷線情況。
現(xiàn)象:有些輸入引腳始終讀到高電平或低電平,不隨按鍵變化。
排查方法:
寄存器寫入無(wú)效
檢查 I2C 寫事務(wù)流程是否正確:先發(fā)送設(shè)備地址+寫,再發(fā)送寄存器地址,再發(fā)送數(shù)據(jù),最后停止信號(hào)。若順序錯(cuò)誤會(huì)導(dǎo)致寫入到錯(cuò)誤寄存器。
在多字節(jié)寫操作時(shí),若不使用連續(xù)寫模式而誤將多字節(jié)數(shù)據(jù)分開(kāi),也可能覆蓋到相鄰寄存器。
現(xiàn)象:對(duì) Configuration 或 Output Port 寄存器寫入后,讀回的值與寫入不一致。
排查方法:
十三、TCA9539 在不同應(yīng)用中的優(yōu)化策略
功耗優(yōu)化
降低 I2C 速率:將 I2C 運(yùn)行速率由 400kHz 調(diào)至 100kHz,可降低總線切換功耗,但同時(shí)會(huì)犧牲一定通信帶寬。
周期性休眠:對(duì)于按鍵采樣要求不高的場(chǎng)景,可在 MCU 端將 TCA9539 置于短暫的“失電”或“關(guān)斷”狀態(tài)。如需“模擬關(guān)斷”,可將 VCC 端切換到 GPIO,只有在需要檢測(cè)輸入時(shí)才給 TCA9539 供電,但此設(shè)計(jì)需考慮自身供電切換引起的時(shí)序及穩(wěn)定性。
軟件去抖與中斷喚醒:?jiǎn)⒂?TCA9539 中斷后,MCU 可進(jìn)入深度睡眠模式,等待中斷喚醒后再執(zhí)行 I2C 讀取。相比不斷輪詢,可節(jié)省 MCU 本身及擴(kuò)展器件功耗。
在對(duì)功耗要求較高的便攜式或電池供電系統(tǒng)中,應(yīng)充分利用 TCA9539 的低功耗特性。可以通過(guò)以下方式進(jìn)一步降低系統(tǒng)整體功耗:
EMI/EMC 兼容性
在 SCL、SDA 上添加 RC 濾波或共模電感,以抑制高頻干擾。
增加上傳電阻后,在近總線末端再添加 TVS 二極管,防止大電壓瞬態(tài)沖擊損壞芯片。
在工業(yè)現(xiàn)場(chǎng)或通信設(shè)備中,需要確保 I2C 總線與 TCA9539 不受電磁干擾。常見(jiàn)做法:
系統(tǒng)級(jí)擴(kuò)展與多芯片管理
如果需要擴(kuò)展超過(guò) 8 片 TCA9539,可將一級(jí) I2C 總線分支或使用多路復(fù)用器(I2C MUX)進(jìn)行總線分段管理,避免地址沖突。
在 Linux 系統(tǒng)上,可將多個(gè) TCA9539 注冊(cè)到 I2C 驅(qū)動(dòng)總線上,并通過(guò) sysfs 或 device-tree 配置底層驅(qū)動(dòng),實(shí)現(xiàn)統(tǒng)一管理。
抗跌落與重置策略
在系統(tǒng)異常重啟或掉電再上電后,需要重新初始化 TCA9539 中的所有寄存器配置,以保證 I/O 方向和輸出狀態(tài)恢復(fù)到預(yù)期狀態(tài)。可在 MCU 啟動(dòng)代碼中調(diào)用
TCA9539_Init()
。如果總線上出現(xiàn)死鎖或長(zhǎng)時(shí)間通信失敗,可通過(guò)在 MCU 端進(jìn)行 I2C 總線重置(如通過(guò)時(shí)序拉低 SDA、SCL)再重新初始化 TCA9539。
十四、實(shí)用設(shè)計(jì)示例:LED 矩陣與鍵盤掃描
下面以更復(fù)雜的應(yīng)用示例,介紹如何利用單個(gè) TCA9539 實(shí)現(xiàn) 8×8 LED 矩陣及 4×4 鍵盤掃描功能,從而更高效地利用 16 路數(shù)字 I/O。
LED 矩陣控制
在 MCU 中設(shè)置一個(gè) 8×8 的矩陣緩存(buffer),每個(gè)元素代表該 LED 是否點(diǎn)亮。
通過(guò)定時(shí)器(Timer)中斷定時(shí)觸發(fā)掃描,每次中斷更新一行的輸出值:
void LEDMatrix_UpdateRow(uint8_t row) {
uint8_t rowVal = (1 << row); // 僅選中當(dāng)前行
TCA9539_SetOutput(0, rowVal); // 將 P0_* 對(duì)應(yīng)行輸出高
uint8_t colVal = ~(matrixBuf[row]);// 反轉(zhuǎn)邏輯:0 = 點(diǎn)亮,1 = 熄滅
TCA9539_SetOutput(1, colVal); // 將 P1_* 設(shè)置到列輸出
}通過(guò)
row = (row + 1) % 8
實(shí)現(xiàn)循環(huán)掃描。注意列端為低電平才點(diǎn)亮 LED,因?yàn)殡娏鲝男懈邆?cè)流向列低側(cè)。P0_0~P0_7 接 LED 矩陣行高側(cè)(8 行),需串聯(lián)限流電阻后連接到 LED 陽(yáng)極。
P1_0~P1_7 接 LED 矩陣列低側(cè)(8 列),連接到 LED 陰極。
硬件連接:
控制思路:掃描驅(qū)動(dòng)。對(duì)每一行進(jìn)行輪流使能:
軟件實(shí)現(xiàn):
將 P0_* 中需要點(diǎn)亮的那一行對(duì)應(yīng)位輸出高電平,其余行輸出低電平;
同時(shí)根據(jù)需要的列數(shù)據(jù),將 P1_* 輸出對(duì)應(yīng)列為低電平(點(diǎn)亮)或高電平(熄滅);
維持一段固定時(shí)間后,將該行置低,再進(jìn)入下一行。通過(guò)高速循環(huán)刷新,實(shí)現(xiàn) LED 矩陣恒定亮度。
4×4 鍵盤掃描
行線路徑:將 P0_0~P0_3 用作行輸出;
列線路徑:將 P0_4~P0_7 用作列輸入;
鍵盤區(qū)與 P0_* 按常見(jiàn) 4×4 矩陣鍵盤布線;例如行對(duì)應(yīng) 4 根輸出線,列對(duì)應(yīng) 4 根輸入線。
硬件連接:
配置步驟:
掃描流程:
for (row = 0; row < 4; row++) {
// 設(shè)置所有行為高電平
TCA9539_SetOutput(0, 0x0F);
// 將第 row 行置低(激活該行)
TCA9539_SetOutput(0, ~(1 << row) & 0x0F);
delay_us(10); // 等待行輸出穩(wěn)定
// 讀取列輸入
uint8_t colIn = TCA9539_GetInput(0) >> 4; // 列對(duì)應(yīng)高四位
if (colIn != 0) {
// 找到按下的列號(hào)
for (col = 0; col < 4; col++) {
if (colIn & (1 << col)) {
key = row * 4 + col; // 鍵值編號(hào)從 0 到 15
break;
}
}
break; // 找到一個(gè)按鍵可退出掃描
}
}注意:鍵盤掃描要結(jié)合簡(jiǎn)單的防抖時(shí)間,或者通過(guò)多次讀取消抖。
將 P0_0~P0_3 配置為輸出,初始輸出高電平;
將 P0_4~P0_7 配置為輸入,并打開(kāi)內(nèi)部下拉電阻(可通過(guò)將 Output1 相應(yīng)位寫 0)。
無(wú)人按鍵時(shí),行輸出為高,列輸入因下拉而為低;當(dāng)按鍵按下時(shí),對(duì)應(yīng)行與列短接,使該列輸入被行輸出的高電平拉升,讀取為高。
通過(guò)上述示例,充分展示了 TCA9539 在同時(shí)驅(qū)動(dòng) LED 矩陣和鍵盤掃描等多功能場(chǎng)景中的靈活應(yīng)用。合理分配 P0、P1 兩組 I/O,可最大限度發(fā)揮 16 路 GPIO 資源,且不額外占用 MCU 引腳。
十五、總結(jié)與展望
TCA9539 作為一款高可靠性、低功耗、功能豐富的 I2C 16 位 I/O 擴(kuò)展器,為嵌入式系統(tǒng)中 GPIO 資源擴(kuò)展提供了極大便利。從基本參數(shù)、引腳功能到寄存器結(jié)構(gòu)、典型應(yīng)用示例,本文對(duì) TCA9539 在硬件設(shè)計(jì)、軟件驅(qū)動(dòng)、系統(tǒng)集成中的要點(diǎn)做了詳細(xì)介紹。通過(guò)硬件上 A0~A2 地址配置可實(shí)現(xiàn)最多 8 片 TCA9539 級(jí)聯(lián),滿足數(shù)百路 I/O 控制需求;靈活的中斷機(jī)制和極性反轉(zhuǎn)功能則為解決復(fù)雜控制邏輯提供了軟件層面的支持。此外,在 PCB 設(shè)計(jì)與布局上,需關(guān)注 I2C 總線信號(hào)完整性、電源濾波與散熱等問(wèn)題,以確保設(shè)備長(zhǎng)期穩(wěn)定運(yùn)行。
未來(lái),隨著物聯(lián)網(wǎng)(IoT)、智能制造、智能家居等領(lǐng)域的快速發(fā)展,對(duì)微控制器擴(kuò)展 I/O 資源的需求只會(huì)越來(lái)越強(qiáng)烈。TCA9539 具備的多種可編程功能可在實(shí)際應(yīng)用中大大簡(jiǎn)化硬件設(shè)計(jì)并提升系統(tǒng)靈活性。若需更智能化管理,可將 TCA9539 與云平臺(tái)、邊緣計(jì)算結(jié)合,通過(guò)遠(yuǎn)程更新配置寄存器,實(shí)現(xiàn)對(duì)現(xiàn)場(chǎng)分布式傳感器或執(zhí)行器的動(dòng)態(tài)控制。與此同時(shí),可將 TCA9539 與類似 NFC、藍(lán)牙或 LoRa 等無(wú)線通信模塊結(jié)合,為低功耗無(wú)線節(jié)點(diǎn)或傳感器網(wǎng)絡(luò)提供更多 IO 口支持。
總而言之,TCA9539 以其 16 路可編程引腳、豐富的寄存器設(shè)置、統(tǒng)一的 I2C 總線接口、低功耗與寬電壓兼容特性,在各類嵌入式控制應(yīng)用中具備極高的性價(jià)比。通過(guò)本文所述的原理解析、寄存器詳解、示例代碼與 PCB 設(shè)計(jì)要點(diǎn),讀者可快速上手并將其靈活應(yīng)用于工業(yè)自動(dòng)化、智能家居、消費(fèi)電子、通信設(shè)備、醫(yī)療檢測(cè)等多種領(lǐng)域,為產(chǎn)品設(shè)計(jì)增添便捷高效的 GPIO 擴(kuò)展方案。
責(zé)任編輯:David
【免責(zé)聲明】
1、本文內(nèi)容、數(shù)據(jù)、圖表等來(lái)源于網(wǎng)絡(luò)引用或其他公開(kāi)資料,版權(quán)歸屬原作者、原發(fā)表出處。若版權(quán)所有方對(duì)本文的引用持有異議,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com),本方將及時(shí)處理。
2、本文的引用僅供讀者交流學(xué)習(xí)使用,不涉及商業(yè)目的。
3、本文內(nèi)容僅代表作者觀點(diǎn),拍明芯城不對(duì)內(nèi)容的準(zhǔn)確性、可靠性或完整性提供明示或暗示的保證。讀者閱讀本文后做出的決定或行為,是基于自主意愿和獨(dú)立判斷做出的,請(qǐng)讀者明確相關(guān)結(jié)果。
4、如需轉(zhuǎn)載本方擁有版權(quán)的文章,請(qǐng)聯(lián)系拍明芯城(marketing@iczoom.com)注明“轉(zhuǎn)載原因”。未經(jīng)允許私自轉(zhuǎn)載拍明芯城將保留追究其法律責(zé)任的權(quán)利。
拍明芯城擁有對(duì)此聲明的最終解釋權(quán)。