首页 > 版块 > STM32 > 帖子正文

你知道I2C为什么要接上拉吗?

蔡琰 发布于 2021-10-13 17:51
收藏 0 回复 0 浏览 255 原创

实际工程项目中,有很多地方都会用到I2C总线通信,比如说24C02存储、传感器接口等,能使用I2C这项技能,就成为了我们工程师日常必备的武器,那么我们就来详细的说说I2C。


1.jpg

            


I2C是一种简单的双向二线制同步串行总线。只需要两根线即可在连接于总线上的器件之间传送信息,一根SCL时钟线,一根就是SDA数据需要注意的是SDA它是一个双向传输的线,主机向从机发送信号通过SDA把数据送出去,从机向主机发送信号也是从SDA线把数据送出来


    I2C也可以一个一,也可以一对多,每个连接到总线的外围设备都有一个独立的地址,主机可以通过该地址来访问不同设备。主机可通过SDA线发送设备地址查找从机。


    因为I2C 通信IO口输出结构都是配置为漏极开路或集电极开路输出。所以时钟线和数据线必须外部都接上拉电阻当一对多输出的时候,很多GPIO口会连接在同一根线上可能会存在某个GPIO输出高电平,另一个GPIO输出低电平的情况如果使用推挽输出你会发现这个GPIO的VCC和另一个GPIO的GND接在了一起也就是短路了如果换成开漏输出VCC和GND之间多了个电阻这样电路就是安全的


上拉电阻一般取值在1K-10K之间上拉电阻的取值和通信速率会有一定的关系,如果上拉电阻的取值太大,那么信号的上升沿下降沿就会很缓会影响通信速率这个具体的看应用的通信速率去测试波形如果取的太小了,功耗很大取的太大了,信号的上升沿就会慢,影响通信速率(如下图的1 2表示)。

 2.jpg

一般情况下I2C标准模式最高传输速率100Kbit/s,高速模式最高传输速率400Kbit当然也有用软件模拟I2C的时序来进行通信的,这个速率就需要自己去掌控测试了说白了就是我们对着时序图,一个同样的波形出来只要遵守同样的约定,按照时序图对应管脚拉高拉低就可以读写数据了


在标准协议中区分启动、停止、应答、等动作,下面我们来一起学习一下I2C的标准协议


3.jpg


   检测到SDA线上为下降沿,SLC线上为高电平,就表示收到了启动信号,检测到SDA线上为上升沿,SLC线上为高电平,就表示收到了停止信号。
        4.jpg
   

收到启动信号之后就可以开始数据传输收到停止信号表示帧数据传输完毕。传输过程中,时钟线SCL为高电平的时候,数据线SDA必须保持稳定,不能改变电平状态,这样才能有效传输在时钟线SCL为低电平的时候,数据线SDA可以改变状态即:SCL为高电平的时候,数据线SDA如果为高,那么传送的就是1,如果SDA为低,那么传送的就是0SCL为低电平的时候,你可以改变数据可以把数据变为0/1图中红框交叉就表示数据的改变1变为0 从0变为1所以有了一个上升沿或者一个下降沿)。


SCL的第9个时钟位,对应的SDA数据为应答数据应答数据是有方向的,可以是主设备应答,可以是从设备应答,应答不是固定的,可以是低电平为应答,也可以是高电平应答高应答或者低应答是由通信协议决定的,只要约定一个信号作为应答就可以了主机给从机发送数据,从机接到了应答主机,从机给主机发送数据,主机接到了,主机就要应答这样就形成了一个闭环

 

以上就是一个标准的IIC通信标准规范,你清楚了吗?


0 0
发表评论 侵权投诉
评论 (0)

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表乌云踏雪网立场。

文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。