Part 01、前言
I2C通信電路是嵌入式設(shè)計(jì)中的“常客”,在各種產(chǎn)品比如家電,工控,醫(yī)療器械等產(chǎn)品的板內(nèi)通信中I2C總能派上用場(chǎng)。但設(shè)計(jì)I2C電路時(shí),上拉電阻Rp的選擇卻是個(gè)讓人頭疼的問(wèn)題:選小了不行,選大了也不行。今天咱們就來(lái)聊聊I2C上拉電阻的計(jì)算方法吧。
Part 02、為啥I2C需要上拉電阻?
I2C是一種開漏Open-Drain通信協(xié)議,SDA和SCL線上的信號(hào)只能被拉低(輸出0V),而拉高(輸出1)全靠上拉電阻Rp。
工作原理:
沒(méi)有信號(hào)時(shí),上拉電阻把線路拉到高電平(接近Vcc)。
IC需要輸出0時(shí),會(huì)通過(guò)內(nèi)部的MOSFET把線路拉低到接近0V。
上拉電阻的作用:
電阻決定了線路從低電平到高電平的上升速度,同時(shí)也影響功耗。選的值不對(duì),要么通信慢得像“烏龜爬”,要么功耗高得像“電老虎”。
那上拉電阻的阻值如何確定呢?
Part 03、上拉電阻計(jì)算
我們需要計(jì)算上拉電阻的最小值Rp(min)和最大值Rp(max),咱們一步步分析。
最小值 Rp(min)計(jì)算
如果上拉電阻太小,電流會(huì)太大,IC可能拉不下來(lái)低電平,導(dǎo)致通信失敗。最小電阻由以下公式?jīng)Q定:
Vcc:電源電壓
VoL(max):IC能輸出的最大低電平電壓(I2C標(biāo)準(zhǔn)要求邏輯低電平低于 0.3×Vcc)
IoL:IC拉低時(shí)的灌電流能力(Sink Current)
舉個(gè)例子,Vcc = 3.3V,VoL(max)=0.4V,IoL=3mA,
所以,上拉電阻不能小于966.67Ω,不然IC拉低電平會(huì)“力不從心”,邏輯0 可能變成“半吊子”,通信直接崩。
最大值 Rp(max)計(jì)算
如果上拉電阻太大,線路的上升時(shí)間會(huì)變長(zhǎng),達(dá)不到I2C標(biāo)準(zhǔn)的上升時(shí)間要求(Rise Time),導(dǎo)致通信失敗。最大電阻由以下公式?jīng)Q定:
tr:I2C標(biāo)準(zhǔn)的最大上升時(shí)間
0.8473:RC電路上升時(shí)間的常數(shù)(從0.3×Vcc到0.7×Vcc的時(shí)間系數(shù))
舉個(gè)例子,如果tr=300 ns,Cb = 200pF
所以,上拉電阻不能大于1770Ω,不然信號(hào)上升太慢,I2C主設(shè)備可能還沒(méi)等到高電平就“等不及了”,通信又崩。
上拉電阻的范圍算出來(lái)了(966.67Ω到1770Ω),但具體選多大,還得看速度和功耗的平衡。小電阻(接近Rp(min)),優(yōu)點(diǎn)是上升時(shí)間短,通信速度快。缺點(diǎn)是電流大,功耗高。比如用1kΩ,上升時(shí)間:
速度很快,但平均電流(信號(hào)頻繁切換時(shí)):
功耗
大電阻(接近 Rp(max)),優(yōu)點(diǎn)是電流小,功耗低。缺點(diǎn)是上升時(shí)間長(zhǎng),速度慢。比如用1.5kΩ,上升時(shí)間:
速度慢了點(diǎn),但功耗:
Part 04、注意事項(xiàng)
1.總線線電容Cb要估準(zhǔn):
Cb包括PCB走線電容(每厘米約1-2pF)、IC引腳電容(通常5-10pF/個(gè))。比如10cm走線+2個(gè)IC,Cb ≈ 20 + 2 × 10 = 40 pF。實(shí)際設(shè)計(jì)時(shí)留點(diǎn)余量,測(cè)一下最好。
2.Vcc變化的影響:
Vcc不是穩(wěn)定的,而是波動(dòng)的,比如不是3.3V,而是2.9-3.5V之間,Rp(min)會(huì)變化,重新算一下。
3.環(huán)境溫度:
高溫下IC的IoL可能變小,Rp(min)會(huì)變大,注意評(píng)估。
4.多設(shè)備場(chǎng)景:
多個(gè)IC掛在I2C 總線上,電容Cb會(huì)增加,Rp(max)變小,重新算一下范圍。
有問(wèn)題歡迎在評(píng)論區(qū)留言交流哦!