i2c
通訊一般性問題
i2c
匯流排比較簡單,可能的問題主要出在時序上,一般設計者即使忽略也不太會有麻煩,但是有幾個指標一定要認真考慮: 1.
匯流排驅動能力。上拉電阻和負載電容決定了匯流排在某一速率下的穩定性。當輸出為高時,電流通過上拉電阻對負載電容充電。上拉越大,電容越大,所需要的時間就越長,如果超過了通訊週期的
10%,那麼這個上公升沿就太緩了,相應的建立時間會受到影響,
i2c規範的最大負載電容是
400pf
,快速模式下是
100pf
。如果輸出為低,電流通過上拉電阻被
i2c master
器件吸取,(注意根據
i2c規範,最小只有
3毫安的吸取電流)那麼這個吸取電流在上拉電阻上的壓降就決定了輸出低電平能達到的範圍,如果不能達到
0.3vdd
以下,就會有誤取樣。有人說加大上拉電阻是不妥當的,要具體分析吸取電流、負載電容、上拉電平和通訊速率才能決定(普通模式和快速模式是不一樣的)。 2.
匯流排空閒時間(
bus free time
cpu來說,它往往是
i2c的
master
器件,由於執行速度很快,這個指標如果不注意的話就會達不到,導致
i2c匯流排不響應。另外要注意的是
cpu內部的
i2c停止時刻標誌位置位和硬體匯流排上的
i2c停止標誌(
clock
為高時資料從低到高的跳變)時刻往往是不一致的。有的晶元有
15-20
個微秒的差別,所以要用示波器量出來為準。 3.
匯流排保持時間。
i2c的匯流排建立和保持與有的時序定義不一樣。建立時間是指從資料跳變沿到時鐘上公升沿的間隔;而保持時間是指從時鐘下降沿到資料下乙個跳變沿的間隔。通常建立時間都能保證。
【問題1】完全不能進行讀寫:
(1)
通訊協議不正確:有很多的
i2c裝置,並不支援所有的
i2c協議,同時也不是乙個比較標準的
i2c裝置;軟體的通訊時序要詳細看一下裝置資料。
(2) i2c
i2c裝置的位址是可以通過硬體設定的;也有器件資料提供的資料是錯誤的。 (
3)i2c通訊線上沒有加上拉電阻:由於
i2c的從裝置的
sda,
scl的
pin是輸出開漏的,所以必須加上拉電阻,同時根據
i2c裝置的數量上拉電阻的大小也會不同。從
1k~10k
,具體的見連線。
(4)i2c裝置損壞:有時我們會經常遇到問題時總是認為我們自己在軟體上是不是有問題,是不是電路上沒有焊接好,實際上都不是,而是器件是壞的。
【問題2
(1)電路干擾:在
i2c裝置的電源入口處沒有加濾波電路,一般入口處加
10nf
或0.1uf
電容;sda
,scl
線上干擾,沒有濾波處理,線上串一幾十
ohm電阻,對地加幾十
pf電容;千萬別小看這幾顆小小的電容! (
2)通訊時序:讀寫時速度過快。
【解決辦法】 (
1)如果完全不能讀寫,需要詳細看裝置資料,及電路檢查。 (
2)通訊不穩定或者有部分讀寫錯誤: 1.
調整scl/sda
上拉電阻(阻值越小,上公升時間越短,受干擾機率越低,但根據
i2c協議要求,上拉電阻不能取得太小,需大於
(vdd-volmax)/3ma=(3.3v-0.4v)/3ma=0.97k
),可有效解決
i2c穩定性問題。 2.
電路板焊接不夠良好、電源不穩、電路複雜、地線迴路不好,等都會引起訊號有毛刺,需要對電源濾波,和對
sda/scl
串接幾十到
100多歐的電阻並上個幾十
pf的電容進行濾波處理。 3
.降低通訊速率有時也能有效提高通訊穩定性。 4
.通過軟體程式設計進行訊號消抖處理,用高速時鐘對訊號進行多次取樣以準確判斷
scl/sda
的高低電平,由此避開訊號的亞穩態階段。
5. 為了防止通訊過程中的測量,靜電,反覆斷電等因素對管腳的損害,一定要加
tvs管,在測量中我已經燒過兩次管腳了,這給我極大的教訓。
【問題2】
i2c讀
eeprom
的問題
下面是我在讀一些eeprom時發現有些eeprom能進行讀寫,有些能單讀卻怎麼也無法寫入。原因如下:
1. 在讀寫eeprom時,發現的一定要注意eeprom的容量,這將決定器件的隨機字位址。
2. 當eeprom的位址超過32k時,隨機字位址超過11位(8位的偏移位址+器件位址保留3位頁位址),此時器件的偏移位址需要16bit來保證定址。故程式設計需要考慮到此類eeprom的讀寫問題。
【總結】
i2c通訊是一種低速訊號通訊,即便面對低速訊號,我們也不能掉以輕心,訊號通訊的干擾問題,以及其緩慢的上公升沿或下降沿(滿足其規範要求)造成其處於亞穩態的時間過長問題,而在這段不定態的時間待得越長就越危險,其受到干擾的機率就越大!
另外當你去解決問題時要注意會不會引來新的問題從而造成更大的麻煩,所以要綜合考量,更要多去嘗試,實踐才是最重要的。
一般性問題的解決方法
step1 調研 調研即乙個專案或者課題的 是需要通過大量的調研獲取資料,研究現狀,問題實際等第一手資料。調研一般會由1天至百年之久,你要調查乙個商品 只需要1天,調查乙個商品的 波動需要1個月,乙個商品的供需則需要一年。最長的估計就是環境類或者宇宙類的問題了,也許等待百年才會發現一顆新星。step...
I2C通訊技術
對於嵌入式開發的朋友來說,i2c協議實在是再熟悉不過了,有太多的器件,採用的都是通過i2c來進行相應的設定。今天,我們就隨便聊聊這個i2c協議。i2c協議中最重要的一點是i2c位址。這個位址有7位和10位兩種形式。7位能夠表示127個位址,而在實際使用中基本上不會掛載如此多的設定,所以很多裝置的位址...
I2C匯流排通訊
uart 屬於非同步通訊,比如電腦傳送給微控制器,電腦只負責把資料通過txd 傳送出來即可,接收資料是微控制器自己的事情。而 i2c 屬於同步通訊,scl 時鐘線負責收發雙方的時鐘節拍,sda 資料線負責傳輸資料。i2c 的傳送方和接收方都以 scl 這個時鐘節拍為基準進行資料的傳送和接收。i2c匯...