瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工藝,搭載一顆四核Cortex-A55處理器和Mali G52 2EE 圖形處理器。RK3568 支持4K 解碼和 1080P 編碼,支持SATA/PCIE/USB3.0 外圍接口。RK3568內置獨立NPU,可用于輕量級人工智能應用。RK3568 支持安卓 11 和 linux 系統,主要面向物聯網網關、NVR 存儲、工控平板、工業檢測、工控盒、卡拉 OK、云終端、車載中控等行業。
?
【公眾號】迅為電子
【粉絲群】258811263(加群獲取驅動文檔+例程)
【視頻觀看】嵌入式學習之Linux驅動(第十五篇 I2C_全新升級)_基于RK3568
【購買鏈接】迅為RK3568開發板瑞芯微Linux安卓鴻蒙ARM核心板人工智能AI主板
第167章 I2C上拉電阻
I2C的硬件連接如下圖所示:
可以看到在SDA數據線和SCL時鐘線上都需要接一個上拉電阻,在本章中將會講解為什么這里要接一個上拉電阻,以及上拉電阻如何計算。
167.1 接上拉電阻的作用
SDA數據線和SCL時鐘線上接一個上拉電阻的作用如下所示:
(1)保證總線空閑時保持高電平
I2C 總線采用開漏/開集電極輸出,當沒有設備驅動總線時,總線會處于高阻態。如果不接上拉電阻,總線電平將不確定,很容易受到噪聲干擾。接上拉電阻可以確保總線空閑時保持穩定的高電平。
(2)實現線與功能
I2C 總線允許多個設備掛載在同一總線上。當一個設備拉低總線時,其他設備的輸出也會被拉低。這就是線與功能,實現總線仲裁。如果不接上拉電阻,當總線空閑時電平不確定,一個設備拉低總線時其他設備無法感知到總線電平變化,無法實現線與功能。
而這里的上拉電阻也并不能隨意進行取值,需要考慮總線電容的影響。I2C 總線上存在各種寄生電容,可以等效成一個RC充電電路,如下圖所示:
當總線從低電平轉為高電平時,需要通過上拉電阻為總線供電,充電總線電容,如果上拉電阻取值過大,充電時間過長,會導致上升沿過慢,可能影響通信,如果上拉電阻取值過小,則無法產生低電平,所以在I2C規范中要求總線電容不能超過400PF,通常建議在 1k至10k歐姆之間選擇,能夠既保證上升沿速度,又能夠可靠拉低總線電平,在下一小節中將對I2C上拉電阻的阻值計算進行講解。
167.2 I2C上拉電阻阻值計算?
上拉電阻的最小值計算
(1)公式:
Rp(min) = (VDD - VOL(max)) / IOL
(2)各參數解釋:
VDD: 通常為 5V 或 3.3V 等常用的供電電壓,在iTOP-RK3568 開發板上為3.3V
VOL(max): 表示器件在低電平時的最大輸出電壓,具體數值表格如下所示,由于VDD為3.3V,所以VOL的最大值為0.4.
?
IOL: 器件在低電平時的最大灌入電流,具體數值表格如下所示,通過VOL值為0.4,可以得到IOL在常規模式下和快速模式下的值為3ma。?
Rp(min) 為上拉電阻的最小值
(3)計算步驟:
確定 VDD、VOL(max) 和 IOL 的值:
在RK3568中VDD為3.3V,所以VOL(max) =0.4V,對應的IOL為3mA
代入公式 Rp(min) = (VDD - VOL(max)) / IOL 計算得到上拉電阻的最小值。
Rp(min) = (3V - 0.4V) / 3mA = 966Ω
上拉電阻的最大值計算:
- 公式
Rp(max) = 0.8473 * Cb / tr
(2)各參數解釋:
Rp(max) 是上拉電阻的最大值
Cb 是總線電容
tr 是高電平上升時間,一般上升時間是從0.3VDD到0.7VDD,具體可以從數據手冊獲得,具體如下所示:
?
根據上圖可以得到在標準模式下tr的取值為?≤ 1000ns。
在快速模式下tr的取值為?≤ 300ns。
在超快速模式下tr的取值為≤ 120ns。
(3)計算步驟:
I2C 工作在標準模式下,上拉電壓是 3.3V,引腳電容是 10pF,連接電容是 30pF,高電平上升時間 tr = 1000ns,計算上拉電阻的最大值
總線電容 Cb = 10pF + 30pF = 40pF,然后將對應值代入公式: Rp(max) = 0.8473 * Cb / tr Rp(max) = 0.8473 * 40pF / 1000ns Rp(max) = 33.89 kΩ
具體選擇:
一般來說,I2C 總線速度越快,所需的上拉電阻值越小,具體選擇如下所示:
400kbps: 一般選擇 4.7k 上拉電阻
100kbps: 一般選擇 10k 上拉電阻
1Mbps: 一般選擇 2.2k 上拉電阻
當然上述選擇未必正確,需要根據實際測試結果進行調整。在實際使用中,可以先根據經驗選擇一個上拉電阻值試用,無需過于糾結于計算公式。