I2C通信一般性問(wèn)題 I2C 總線比較簡(jiǎn)單,可能的問(wèn)題主要出在時(shí)序上,一般設(shè)計(jì)者即使忽略也不太會(huì)有麻煩,但是有幾個(gè)指標(biāo)一定要認(rèn)真考慮: 1.總線驅(qū)動(dòng)能力。上拉電阻和負(fù)載電容決定了總線在某一速率下的穩(wěn)定性。當(dāng)輸出為高時(shí),電流通過(guò)上拉電阻對(duì)負(fù)載電容充電。上拉越大,電容越大,所需要的時(shí)間就越長(zhǎng),如果超過(guò)了通信周期的10%,那么這個(gè)上升沿就太緩了,相應(yīng)的建立時(shí)間會(huì)受到影響,I2C規(guī)范的最大負(fù)載電容是400pF,快速模式下是100pF。如果輸出為低,電流通過(guò)上拉電阻被I2C master器件吸取,(注意根據(jù)I2C規(guī)范,最小只有3毫安的吸取電流)那么這個(gè)吸取電流在上拉電阻上的壓降就決定了輸出低電平能達(dá)到的范圍,如果不能達(dá)到0.3VDD以下,就會(huì)有誤采樣。有人說(shuō)加大上拉電阻是不妥當(dāng)?shù)?,要具體分析吸取電流、負(fù)載電容、上拉電平和通信速率才能決定(普通模式和快速模式是不一樣的)。 2.總線空閑時(shí)間(bus free time)。它的定義是從上一次通信的停止到下一次通信的開始的間隔時(shí)間。對(duì)CPU來(lái)說(shuō),它往往是I2C的master器件,由于運(yùn)行速度很快,這個(gè)指標(biāo)如果不注意的話就會(huì)達(dá)不到,導(dǎo)致I2C總線不響應(yīng)。另外要注意的是CPU內(nèi)部的I2C停止時(shí)刻標(biāo)志位置位和硬件總線上的I2C停止標(biāo)志(clock為高時(shí)數(shù)據(jù)從低到高的跳變)時(shí)刻往往是不一致的。有的芯片有15-20個(gè)微秒的差別,所以要用示波器量出來(lái)為準(zhǔn)。 3.總線保持時(shí)間。I2C的總線建立和保持與有的時(shí)序定義不一樣。建立時(shí)間是指從數(shù)據(jù)跳變沿到時(shí)鐘上升沿的間隔;而保持時(shí)間是指從時(shí)鐘下降沿到數(shù)據(jù)下一個(gè)跳變沿的間隔。通常建立時(shí)間都能保證。 【問(wèn)題1】完全不能進(jìn)行讀寫: (1) 通信協(xié)議不正確:有很多的I2C設(shè)備,并不支持所有的I2C協(xié)議,同時(shí)也不是一個(gè)比較標(biāo)準(zhǔn)的I2C設(shè)備;軟件的通信時(shí)序要詳細(xì)看一下設(shè)備資料。 (2) I2C設(shè)備地址不正確:有很多的I2C設(shè)備的地址是可以通過(guò)硬件設(shè)定的;也有器件資料提供的數(shù)據(jù)是錯(cuò)誤的。 (3)I2C通信線上沒有加上拉電阻:由于I2C的從設(shè)備的SDA,SCL的PIN是輸出開漏的,所以必須加上拉電阻,同時(shí)根據(jù)I2C設(shè)備的數(shù)量上拉電阻的大小也會(huì)不同。從1K~10K,具體的見連接。 (4)I2C設(shè)備損壞:有時(shí)我們會(huì)經(jīng)常遇到問(wèn)題時(shí)總是認(rèn)為我們自己在軟件上是不是有問(wèn)題,是不是電路上沒有焊接好,實(shí)際上都不是,而是器件是壞的。 【問(wèn)題2】讀或?qū)懯?,不能正確的讀寫某個(gè)地址的數(shù)據(jù): (1)電路干擾:在I2C設(shè)備的電源入口處沒有加濾波電路,一般入口處加10nF或 0.1uF電容;SDA,SCL線上干擾,沒有濾波處理,線上串一幾十ohm電阻,對(duì)地加幾十pF電容;千萬(wàn)別小看這幾顆小小的電容! (2)通信時(shí)序:讀寫時(shí)速度過(guò)快。 【解決辦法】 (1)如果完全不能讀寫,需要詳細(xì)看設(shè)備資料,及電路檢查。 (2)通信不穩(wěn)定或者有部分讀寫錯(cuò)誤: 1.調(diào)整SCL/SDA上拉電阻(阻值越小,上升時(shí)間越短,受干擾幾率越低,但根據(jù)I2C協(xié)議要求,上拉電阻不能取得太小,需大于(VDD-Volmax)/3mA=(3.3V-0.4V)/3mA=0.97K),可有效解決I2C穩(wěn)定性問(wèn)題。 2.電路板焊接不夠良好、電源不穩(wěn)、電路復(fù)雜、地線回路不好,等都會(huì)引起信號(hào)有毛刺,需要對(duì)電源濾波,和對(duì)SDA/SCL串接幾十到100多歐的電阻并上個(gè)幾十pF的電容進(jìn)行濾波處理。 3.降低通信速率有時(shí)也能有效提高通信穩(wěn)定性。 4.通過(guò)軟件編程進(jìn)行信號(hào)消抖處理,用高速時(shí)鐘對(duì)信號(hào)進(jìn)行多次采樣以準(zhǔn)確判斷SCL/SDA的高低電平,由此避開信號(hào)的亞穩(wěn)態(tài)階段。 5. 為了防止通信過(guò)程中的測(cè)量,靜電,反復(fù)斷電等因素對(duì)管腳的損害,一定要加TVS管,在測(cè)量中我已經(jīng)燒過(guò)兩次管腳了,這給我極大的教訓(xùn)。 【問(wèn)題2】I2c讀EEPROM的問(wèn)題 下面是我在讀一些EEPROM時(shí)發(fā)現(xiàn)有些EEPROM能進(jìn)行讀寫,有些能單讀卻怎么也無(wú)法寫入。原因如下: 1. 在讀寫EEPROM時(shí),發(fā)現(xiàn)的一定要注意EEPROM的容量,這將決定器件的隨機(jī)字地址。 2. 當(dāng)EEPROM的地址超過(guò)32k時(shí),隨機(jī)字地址超過(guò)11位(8位的偏移地址+器件地址保留3位頁(yè)地址),此時(shí)器件的偏移地址需要16bit來(lái)保證尋址。故編程需要考慮到此類EEPROM的讀寫問(wèn)題。 【總結(jié)】 I2C通信是一種低速信號(hào)通信,即便面對(duì)低速信號(hào),我們也不能掉以輕心,信號(hào)通信的干擾問(wèn)題,以及其緩慢的上升沿或下降沿(滿足其規(guī)范要求)造成其處于亞穩(wěn)態(tài)的時(shí)間過(guò)長(zhǎng)問(wèn)題,而在這段不定態(tài)的時(shí)間待得越長(zhǎng)就越危險(xiǎn),其受到干擾的幾率就越大! 另外當(dāng)你去解決問(wèn)題時(shí)要注意會(huì)不會(huì)引來(lái)新的問(wèn)題從而造成更大的麻煩,所以要綜合考量,更要多去嘗試,實(shí)踐才是最重要的。 最后:以上是我這段時(shí)間對(duì)I2c的一些問(wèn)題的看法及總結(jié),有些是我遇到的,有些是網(wǎng)上看到補(bǔ)充的,希望大家多提意見及補(bǔ)充,讓我能夠更好的成長(zhǎng),謝謝! |
|
來(lái)自: 新用戶86925817 > 《電子電路》