羅莉
摘要:在實(shí)際應(yīng)用過程中,I2C電路的關(guān)注相對較少,原因就在于其外圍電路相對簡單,但也容易出現(xiàn)不少的問題,對于電路設(shè)計來說,能讀懂I2C上的傳輸數(shù)據(jù),能夠按照I2C要求的規(guī)范構(gòu)建電路系統(tǒng),無疑對于分析解決問題具有十分重要的作用。本篇通過在設(shè)計過程中出現(xiàn)的問題實(shí)例,討論在I2C應(yīng)用的一些注意點(diǎn)。
關(guān)鍵詞:I2C;開始信號;結(jié)束信號; ACK;電平
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
文章編號:1009-3044(2019)12-0266-02
開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID):
1 I2C總線的概念及工作原理
1.1 I2C總線定義
I2C(Inter-Integrated Circuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。
1.2 I2C總線特點(diǎn)
I2C能使一個系統(tǒng)中各部分電路連接非常簡單,省去許多I/O接口,簡化了電路,提高了可靠性。同時,它允許包含多個主控。在I2C定義中,主控就是任何能夠進(jìn)行發(fā)送和接收的設(shè)備。主控能夠控制信號的傳輸和時鐘頻率。同時,也規(guī)定同一套系統(tǒng)中同一時間點(diǎn)I2C上只能有一個主控。
1.3 I2C總線種類
I2C 總線上數(shù)據(jù)的傳輸速率分為標(biāo)準(zhǔn)模式(100kbit/s)、快速模式(400kbit/s)及高速模式(3.4Mbit/s)。目前我們大部分產(chǎn)品主要使用的總線模式仍為標(biāo)準(zhǔn)模式。
1.4 I2C總線工作原理
I2C總線是串行總線,由數(shù)據(jù)線SDA和時鐘SCL構(gòu)成。它可以在CPU與被控IC之間、IC與IC之間進(jìn)行雙向傳送。總線上所有被控制單元均采用并聯(lián)方式連在一起,其中每個電路或者模塊都有且只有一個地址。在信息的傳輸過程中,并聯(lián)的這些模塊電路根據(jù)它所要完成的功能,既可以作為主控器(或發(fā)送器),又可以作為被控器(或接收器)。在I2C上主控發(fā)出的控制信號一般包含地址碼和數(shù)據(jù)兩部分,其中地址碼用來選擇需要控制的模塊電路,并確定控制的種類;數(shù)據(jù)則指定調(diào)整的類別及數(shù)量。被控模塊電路通常包含從機(jī)地址(Slave Address)及子地址(Sub Address)。從機(jī)地址是被控模塊電路在該總線上能被主控尋址的地址,而子地址則為該模塊電路內(nèi)部不同部件或存儲單元的編址。子地址傳輸方式,傳輸格式與數(shù)據(jù)是統(tǒng)一的,地址或數(shù)據(jù)的區(qū)分主要依靠收發(fā)雙方具體的邏輯約定。
2 I2C總線的電平要求
I2C通常會串聯(lián)電阻保護(hù)I2C 總線器件的I/O 級,防止總線上高電壓的毛刺影響I/O 級,并將振蕩和干擾減到最小。
具備I2C 總線的電路器件的SDA 和SCL 管腳都是漏極開路。因此工程運(yùn)用中,兩條信號線外圍都需要增加上拉電阻。上拉電阻使SDA和SCL線在總線空閑的時侯保持高電平,同時保證在信號要求的上升時間內(nèi)能從低電平變成高電平。上拉電阻一般取值3~10KΩ,大部分產(chǎn)品中一般使用5V或3.3V的上拉源。
3 I2C總線工作過程簡述及實(shí)例
I2C總線在傳送數(shù)據(jù)過程中共有三種類型信號, 它們分別是:開始信號、結(jié)束信號和應(yīng)答信號。
1) 開始信號:SCL為高電平時,SDA由高電平向低電平跳變,開始傳送數(shù)據(jù)。
2) 結(jié)束信號:SCL為高電平時,SDA由低電平向高電平跳變,結(jié)束傳送數(shù)據(jù)。
3) 應(yīng)答信號:我們通稱為“ACK”信號。它指接收數(shù)據(jù)的IC在接收到8bit數(shù)據(jù)后,向發(fā)送數(shù)據(jù)的IC發(fā)出特定的低電平脈沖,表示已收到數(shù)據(jù)。
其中開始信號是必須的,結(jié)束信號和應(yīng)答信號可以不做要求。以下我們采用一個實(shí)際應(yīng)用中的例子說明。
圖1是某產(chǎn)品外圍從芯片與CPU間的通信片段,藍(lán)色波形為SDA,綠色波形為SCL。當(dāng)讀到SCL為高,SDA從高到低的過程跳變,則可判定為開始信號。之后SCL連續(xù)的8個脈沖器件可從SDA讀到目前訪問的地址(本圖中為1111 1010即為FA),表示剛好為從芯片的寫地址(通常最后一位為“1”為“讀”操作,最后一位為“0”為“寫”操作)。第九個SCL脈沖來到時,SDA給出了一個低電平,這一位即為芯片的ACK應(yīng)答信號。至此外圍從芯片和CPU間的通信已連接好,CPU可對從芯片進(jìn)行操作。接下來的一個8位周期里,我們看到CPU需要寫入的內(nèi)容為1010 0101(A5), 從芯片同樣給予了ACK響應(yīng),之后當(dāng)SCL為高時,SDA有一個從低到高的跳變,這就是一個結(jié)束信號。自此CPU與從芯片間的一次通信就此結(jié)束,總線轉(zhuǎn)入空閑等待下一次命令的到來。
在實(shí)際應(yīng)用中,I2C電平是否符合標(biāo)準(zhǔn)設(shè)計要求將極大程度上考驗(yàn)我們的系統(tǒng)穩(wěn)定性。以下將通過一個電視產(chǎn)品設(shè)計過程中出現(xiàn)的問題及解決過程進(jìn)行說明。
4 實(shí)例解析I2C相關(guān)問題
4.1 實(shí)例之故障現(xiàn)象描述
某電視機(jī)型開發(fā)過程中發(fā)現(xiàn)有漏臺現(xiàn)象出現(xiàn)。
4.2 實(shí)例之實(shí)驗(yàn)過程及問題分析
出現(xiàn)故障時,使用示波器對高頻頭的AFT電壓進(jìn)行監(jiān)測,發(fā)現(xiàn)在搜臺頻率從00到FF微調(diào)過程中,在61,69兩個數(shù)據(jù)點(diǎn)上有不正常的AFT電壓跳變,此時用頻譜儀對調(diào)諧芯片進(jìn)行探測,調(diào)諧芯片已完全停振,高頻頭無IF信號輸出,AFT電壓亦出現(xiàn)跳變。
考慮到由于圖象跳變只出現(xiàn)在固定的頻率點(diǎn)上,我們又使用軟件對高頻頭的I2C進(jìn)行了監(jiān)測。當(dāng)CPU對高頻頭進(jìn)行微調(diào)時,會對其寫入5個BYTE數(shù)據(jù),第一個BYTE為高頻頭的地址;第二、三個BYTE為分頻比數(shù)據(jù);第四個BYTE為高放鎖相環(huán)的泵電流位;第五個BYTE為I/O端口控制位。
當(dāng)?shù)谌齻€BYTE為寫入61,69數(shù)據(jù)的時候,立刻出現(xiàn)無信號及高頻頭不工作。當(dāng)在跳過61,69兩個點(diǎn)后,附近數(shù)據(jù)調(diào)節(jié)完全正常。進(jìn)一步通過示波器分析,當(dāng)總線數(shù)據(jù)為61、69發(fā)送后,在高頻頭ACK響應(yīng)位后I2C數(shù)據(jù)總線有8個數(shù)據(jù)位被拉低,而其他數(shù)據(jù)傳輸正常,該8個數(shù)據(jù)位為高頻頭泵電流數(shù)據(jù)位,當(dāng)高頻頭因?yàn)镮2C數(shù)據(jù)總線被拉低后,泵電流數(shù)據(jù)被設(shè)置為00000000,調(diào)諧芯片因?yàn)闊o泵電流而停止工作,導(dǎo)致在61,69兩個數(shù)據(jù)點(diǎn)上出現(xiàn)無IF輸出,從而出現(xiàn)無圖現(xiàn)象。
經(jīng)以上分析,問題應(yīng)該出現(xiàn)在CPU與高頻頭之間的I2C總線上。通過與整機(jī)I2C總線波形比較,發(fā)現(xiàn)高頻頭接收數(shù)據(jù)后的ACK位響應(yīng)位電壓偏高,為1.2V,同時在響應(yīng)位下降沿端有一毛刺,跌落幅度為0.2V左右,持續(xù)時間為0.4uS。
同時我們也注意到,在高頻頭40位總線數(shù)據(jù)傳輸過程中,高頻頭所有的4個響應(yīng)位的電平值都一致,但故障只在向高頻頭發(fā)送61,69兩個數(shù)據(jù)點(diǎn)時出現(xiàn)。同一組總線上連接的HDMI接口芯片的讀地址位為61,69,因此焦點(diǎn)落在與改HDMI接口芯片地址沖突上。分析發(fā)現(xiàn),當(dāng)CPU在向高頻頭發(fā)送分頻比率數(shù)據(jù)61或69之前,由于總線電平的不符合要求,被HDMI接口芯片誤識別為芯片讀地址而錯誤響應(yīng),搶奪了與CPU的總線通信權(quán)。當(dāng)HDMI接口芯片響應(yīng)后,由于其本身并未進(jìn)行復(fù)位等操作,其端口處于高阻態(tài)拉低了總線電平。為進(jìn)一步驗(yàn)證上述情況,我們特地進(jìn)行了另一組模擬實(shí)驗(yàn),通過跳線將HDMI接口芯片的讀地址改為了63,6B,在微調(diào)時61,69兩點(diǎn)不再重現(xiàn)故障,而在新的讀地址63或6B上出現(xiàn)了無信號等同樣的故障現(xiàn)象,從而證明我們的判斷。
4.3 實(shí)例之總結(jié)分析
總結(jié)以上分析,問題的發(fā)生原因?yàn)橐韵聨讉€方面綜合產(chǎn)生:
1) 新批次的高頻頭調(diào)諧芯片的總線電流吸收能力較弱,造成高頻頭ACK位電壓偏高,致使CPU認(rèn)為其ACK為高電平,判斷高頻頭未響應(yīng),為其他芯片搶奪總線通信權(quán)創(chuàng)造了先決條件。
2) 總線上有較大的毛刺,造成ACK位的末端有向下脈沖,造成了一個電壓跳變,剛好形成了滿足總線開始的條件。導(dǎo)致了其他芯片搶占總線通信權(quán)的實(shí)質(zhì)舉動。
5 總結(jié)
綜合上面得設(shè)計實(shí)例,我們可以看出I2C的電路設(shè)計對于系統(tǒng)穩(wěn)定工作的重要意義,雖然I2C外圍電路相對簡單,但不注重其各串聯(lián)電阻及上拉電阻取值,仍會給我們的設(shè)計工作帶來麻煩。因此I2C波形,特別是每個I2C器件的ACK電平的測量應(yīng)該作為一個設(shè)計階段的必檢內(nèi)容,認(rèn)真的按照I2C規(guī)范進(jìn)行設(shè)計并多方的驗(yàn)證,才能保證我們的產(chǎn)品設(shè)計少走彎路縮短開發(fā)流程。讀懂I2C,是每個硬件設(shè)計師應(yīng)該具備的能力。
參考文獻(xiàn):
[1] The I2C-Bus Specification Version 2.1[M].Philips Semiconductors, January 2000.
[2] 何立民.I2C總線應(yīng)用系統(tǒng)設(shè)計[M].北京:北京航空航天大學(xué)出版社,1995.
【通聯(lián)編輯:李雅琪】