教你精确计算 I2C 上拉电阻阻值

I2C 总线能挂多少设备?

理论上:

7-bit address :2 的 7 次方,能挂 128 个设备。

10-bit address :2 的 10 次方,能挂 1024 个设备。

当然,要把预留设备地址去除,7 bit 协议规定了 8个预留地址,普通厂商不可以使用。保留地址如下:

0a061e6e4b6d97ee6554c18b24a59e89.png

但是 I2C 协议规定,总线上的电容不可以超过 400pF。管脚都是有输入电容的,PCB 上也会有寄生电容,所以会有一个限制。实际设计中经验值大概是不超过 8 个器件。

总线之所以规定电容大小是因为,I2C 使用的 GPIO 为开漏结构,开漏结构无法输出高电平,要求外部有上拉电阻拉高。电阻和总线电容产生了一个 RC 延时效应,电容越大信号的边沿就越缓,有可能带来信号质量风险。

传输速度越快,信号的窗口就越小,上升沿下降沿时间要求更短更陡峭,所以 RC 乘积必须更小。

I2C 架构

c3c13d601f13ad911f43aef6d030a0de.png

我们知道 I2C 有不同的速度模式,标准(100KHz)、快速(400KHz)、快速plus(1MHz)、高速(3.4MHz)。

Vdd 可以采用 5V、3.3V、1.8V 等,电源电压不同,上拉电阻阻值也不同。

一般总线上认为,低于 0.3Vdd 为低电平,高于 0.7Vdd 为高电平。

上拉电阻计算

1、上拉电阻过小,总线上电流增大,端口输出低电平增大。

2、上拉电阻过大,上升沿时间增大,方波可能会变成三角波。

因此计算出一个精确的上拉电阻阻值是非常重要的。

计算上拉电阻的阻值,是有明确计算公式的:

028f6c2b2fdc58c14bdfd21d1219e07b.png9cca87d86ef84c19c58a10b7444813f1.png

最大电阻和上升沿时间 tr 、总线电容 Cb 、标准上升沿时间 0.8473 有关。

最小电阻和电源 Vdd 电压、GPIO 口自己最大输出电压 Vol、 GPIO口自己最大电流 Vol 有关。

查《I2C-bus specification and user manual.pdf》7.1节:

a5576a90242691cb23c3f1773df6829d.png1be68a9bb9391ec1e6fe2535681bb830.png

查《I2C-bus specification and user manual.pdf》表10:

a23e2872c922190ad61f627c296abd89.png

由上表可知:

1、标准模式:0~100KHz,上升沿时间 tr = 1us

2、快速模式:100~400KHz,上升沿时间 tr = 0.3us

3、高速模式:up to 3.4MHz,上升沿时间 tr = 0.12us

由此公式,假设 Vdd 是 1.8V 供电,Cb 总线电容是200pF(虽然协议规定负载电容最大 400pF,实际上超过 200pF 波形就很不好,我们以 200pF 来计算)

标准模式 :

cc1333f18895864467962c9b52b33008.png

快速模式:

fe674d8b95ea67c65c2b391cde81acbe.png

高速模式:

9e6e3948291c9a13e706015e313f90ae.png

最小电阻(Vdd越大,上拉电阻就要越大):

3908463f8a5c5d9b07050327928191c0.png

note:高速模式下,电源电压一般采用 1.8 V,不会采用 3.3V,因为如果用 3.3V 计算你会发现最小电阻比最大电阻大。

大家在不同速率采用的电阻一般有以下几种:1.5K、2.2K、4.7K。

一般大家采用 I2C 使用标准模式即可 ,也就是 100KHz,推荐上拉电阻是 4.7K,当然大家可以用示波器看传输波形,适当调整。

结论:I2C 上拉电阻阻值和电源电压、传输速度、总线电容(负载因素)都有关系,大家根据自己的板子计算一下即可,选取最优电阻阻值,从而获得最优传输波形。

最大电阻 Rp 和总线电容 Cb 关系图:

038d67cd07e54ef074e3e16cc8d1076e.png

note:建议总线电容维持在 100pF 以下。

关于 I2C 的方方面面,我写在了我的博客上,有 10 篇,包括 I2C 的传输协议和Linux 下 I2C 的软件驱动框架,大家可以去查看,网址如下:

http://www.linuxer.vip/i2c-bus-spec/

也可以在左下角点击阅读原文,电脑端阅读更方便。

·················· END ··················

点击关注公众号,免费领学习资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/464735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

原型设计+用户规格说明书

用户规格说明书 作业链接:https://edu.cnblogs.com/campus/fzzcxy/2016SE/homework/2180 原型模型设计工具: 墨刀 原型模型链接:https://modao.cc/app/6a5fcc03e409ffe37cfcdb9cb06914271744f131 学号1:362 何永康 学号2&#xff…

mysql数据库中_截取数据_mysql数据库的字符串截取方法

MySQL 字符串截取函数:left(), right(), substring(), substring_index()。还有 mid(), substr()。其中,mid(), substr() 等价于 substring() 函数,substring() 的功能非常强大和灵活。1. 字符串截取:left(str, length)mysql> …

排序算法之希尔排序(C/C++)

从第一个数开始,判断第一个数和n/2那个数的大小,如果v[0]大于v[n/2]就交换,1与3比较,2与4比较,3与5比较............... void shell_sort(char *str, int len) {int group 0, i 0, j 0, temp 0;if ((NULL str) ||…

fedora 忘记root密码

root密码是安装fedora15时设置的,如果你忘记了可以通过下面方法修改。 重启进入grub,在fedora15那一行安e进行编辑,再在以kernel开头的那行安e,在最后添加空格和single,接着安b,启动。 进入没有图形界面的但…

python 多次读取文件的细节

file open("test.txt", encoding"utf8")    #文档以utf8编码读取,不然默认gbk,中文会出现乱码 data file. read() data2 file.read() print(data2) #结果为空,第一次读完指针就停留在末尾,第二次读接…

排序算法之选择法排序(C/C++)

简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r…

什么集成mysql_mysql集成部署

经常听说mysql数据库是集成在系统中,也一直不太明白集成的概念。今天才明白集成的概念就是将mysql所有的文件放到一个文件夹下放到系统中,也就是将mysql采用目录迁移部署的方式进行安装。在上一篇研究了mysql的数据存储结构之后,也研究了mysq…

一文让你了解RT-Thread

前言要学习一项新知识或新的技能,首先要对其有个初步了解,然后再逐步学习如何运用它。本文作为快速入门 RT-Thread 系列文章的第一篇,首先介绍一下,我当时是如何学习 RT-Thread 的,以及参与官方组织的活动的情况&#…

Network Service 权限问题

今天在做asp.net的定时删除服务器上的文件时,出了错误,在本地测试都好着呢,可是一部署到服务器上,删除文件的那个方法就不执行,后来在网站查了是Network Service权限设置问题,Network Service 是 Windows S…

创建python虚拟环境

一 windows下如何构建虚拟环境如果系统中只有python2或只有python3,可以直接打开命令行,输入pip install virtualenv 来下载创建虚拟环境的包(如果提示pip不是内部命令,把python文件下的Scripts的文件路径加入计算机环境变量即可可) 1. 选择一…

二分法查找(C/C++)

当数据量很大适宜采用该方法。采用二分法查找时,数据需是排好序的,默认是按 升序 排好的。时间复杂度:O(logn) 集合中的set和map中使用二分法进行查找的。 int BiSearch(char *str, int n, char find) //返回值是:下标 { int low 0, mi…

电源开关上的 | 和 O 究竟代表了什么?

大家好,我是写代码的篮球球痴,转发张老师的一篇文章。几乎所有的电器、灯具和插座上只要带有电源开关必然会出现“|”和“O”两个符号。如果只看符号判断,“|”和“O”到底代表什么含义呢?能分清:哪个是电路联通,哪个是…

python卸载模块的方法汇总_Python卸载模块的方法汇总

easy_install 卸载通过easy_install 安装的模块可以直接通过 easy_install -m PackageName 卸载,然后删除\python27\Lib\site-packages目录下的egg。setup.py 卸载通过发行包附带的setup.py安装的模块,首选setup.py提供的uninstall选项。如果作者没有提供…

最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用8

辞职创业吴言在经过了几天的反复思考,终于下定决心辞职创业了。做出这个决定真的需要很大的勇气,因为自己的年纪做为程序员来说,已经属于很高龄了,如果创业失败几乎没有退路,再找工作将很难,合适的工作几乎…

重庆大二学生花了6年写出了操作系统

一直以来,国内操作系统都是弱势的地方,可能是国情原因吧,事实上国内也有不少人想改变这种格局,一直以来,笔者的朋友也在一直为这个方向努力,xbook内核,作者花了6年时间,从初中开始就…

逆转一个链表

在一个list中,我们先让头结点的next域指向结点2,再让结点1的next域指向结点3,最后将结点2的next域指向结点1,就完成了第一次交换,顺序就变成了Header-结点2-结点1-结点3-结点4-NULLtypedef struct _list_t{struct _lis…

Django form choices, placeholder

itemCharField(max_length20,min_length1,requiredTrue,widgetwidgets.TextInput({placeholder:testing,}),) typeCharField(min_length1,max_length4,requiredTrue,widgetSelect(choices((0,P),(1,M))),) 转载于:https://www.cnblogs.com/pythonClub/p/9782147.html

《大话存储__网络存储系原理精解与最佳实践》电子书下载

大话存储__网络存储系原理精解与最佳实践,经典图书 网络存储,是近二十年来的新兴行业。从纸带到硬盘再到大型磁盘阵列,存储系统经历了从简单到复杂,从单块硬盘到存储区域网络(SAN)。网络存储行业目前已经是…

辉哥给rockchip修复了一个内存溢出问题

还是周末我也不想说周末,但是不是周末的话,可能也没有特别清净的时间来处理困难的问题。这周末我是要加班的,加班的前一个晚上,我领导找我们吃了一个便饭,聊了很多东西,这篇文章我就不说了,会在…

习题1-3

#include<stdio.h> int main() {int n,sum0;scanf("%d", &n);for (int i 1; i < n1; i){sum sum i;}printf("%d\n",sum);return 0; } 连续和转载于:https://www.cnblogs.com/zhuzehua/p/9783091.html