教你精確計(jì)算 I2C 上拉電阻阻值
I2C 總線能掛多少設(shè)備?
理論上:
7-bit address :2 的 7 次方,能掛 128 個(gè)設(shè)備。
10-bit address :2 的 10 次方,能掛 1024 個(gè)設(shè)備。
當(dāng)然,要把預(yù)留設(shè)備地址去除,7 bit 協(xié)議規(guī)定了 8個(gè)預(yù)留地址,普通廠商不可以使用。保留地址如下:
但是 I2C 協(xié)議規(guī)定,總線上的電容不可以超過 400pF。管腳都是有輸入電容的,PCB 上也會(huì)有寄生電容,所以會(huì)有一個(gè)限制。實(shí)際設(shè)計(jì)中經(jīng)驗(yàn)值大概是不超過 8 個(gè)器件。
總線之所以規(guī)定電容大小是因?yàn)?,I2C 使用的 GPIO 為開漏結(jié)構(gòu),開漏結(jié)構(gòu)無(wú)法輸出高電平,要求外部有上拉電阻拉高。電阻和總線電容產(chǎn)生了一個(gè) RC 延時(shí)效應(yīng),電容越大信號(hào)的邊沿就越緩,有可能帶來(lái)信號(hào)質(zhì)量風(fēng)險(xiǎn)。
傳輸速度越快,信號(hào)的窗口就越小,上升沿下降沿時(shí)間要求更短更陡峭,所以 RC 乘積必須更小。
I2C 架構(gòu)
我們知道 I2C 有不同的速度模式,標(biāo)準(zhǔn)(100KHz)、快速(400KHz)、快速plus(1MHz)、高速(3.4MHz)。
Vdd 可以采用 5V、3.3V、1.8V 等,電源電壓不同,上拉電阻阻值也不同。
一般總線上認(rèn)為,低于 0.3Vdd 為低電平,高于 0.7Vdd 為高電平。
上拉電阻計(jì)算
1、上拉電阻過小,總線上電流增大,端口輸出低電平增大。
2、上拉電阻過大,上升沿時(shí)間增大,方波可能會(huì)變成三角波。
因此計(jì)算出一個(gè)精確的上拉電阻阻值是非常重要的。
計(jì)算上拉電阻的阻值,是有明確計(jì)算公式的:
最大電阻和上升沿時(shí)間 tr 、總線電容 Cb 、標(biāo)準(zhǔn)上升沿時(shí)間 0.8473 有關(guān)。
最小電阻和電源 Vdd 電壓、GPIO 口自己最大輸出電壓 Vol、 GPIO口自己最大電流 Vol 有關(guān)。
查《I2C-bus specification and user manual.pdf》7.1節(jié):
查《I2C-bus specification and user manual.pdf》表10:
由上表可知:
1、標(biāo)準(zhǔn)模式:0~100KHz,上升沿時(shí)間 tr = 1us
2、快速模式:100~400KHz,上升沿時(shí)間 tr = 0.3us
3、高速模式:up to 3.4MHz,上升沿時(shí)間 tr = 0.12us
由此公式,假設(shè) Vdd 是 1.8V 供電,Cb 總線電容是200pF(雖然協(xié)議規(guī)定負(fù)載電容最大 400pF,實(shí)際上超過 200pF 波形就很不好,我們以 200pF 來(lái)計(jì)算)
標(biāo)準(zhǔn)模式 :
快速模式:
高速模式:
最小電阻(Vdd越大,上拉電阻就要越大):
note:高速模式下,電源電壓一般采用 1.8 V,不會(huì)采用 3.3V,因?yàn)槿绻?3.3V 計(jì)算你會(huì)發(fā)現(xiàn)最小電阻比最大電阻大。
大家在不同速率采用的電阻一般有以下幾種:1.5K、2.2K、4.7K。
一般大家采用 I2C 使用標(biāo)準(zhǔn)模式即可 ,也就是 100KHz,推薦上拉電阻是 4.7K,當(dāng)然大家可以用示波器看傳輸波形,適當(dāng)調(diào)整。
結(jié)論:I2C 上拉電阻阻值和電源電壓、傳輸速度、總線電容(負(fù)載因素)都有關(guān)系,大家根據(jù)自己的板子計(jì)算一下即可,選取最優(yōu)電阻阻值,從而獲得最優(yōu)傳輸波形。
最大電阻 Rp 和總線電容 Cb 關(guān)系圖:
note:建議總線電容維持在 100pF 以下。