C51学习笔记(I2C)

1.1 IIC总线概述

全称Inter Interface Circuit芯片间接口总线,由Philips公司推出。是应用于短距离,芯片间的通讯

一般是单片机与外围存储,接口芯片间的通讯。

总线特性:串行同步半双工,物理层编码方式为NRZ,不归零编码方式。

1.2 物理构成

1:两根总线SDA和SCL构成(可用正常铜导线,是不是可以使用双绞线,但是基本上都是使用PC板上的铜导线代替)。

2:若干节点(主节点和从节点数量并不限制为固定关系),但是一般系统构成有(至少一个主节点和一个从节点)。

第二点又有几点需注意的点

一:总线上的节点,不是没有限制的,虽然从寻址上看,一个I2C总线上,最多能挂128(7bit)(1008)(10bit寻址)个个从节点,和若干个不限制数量的主节点。但是受总线负载电容的影响,其总线上的等效不要超过400pF,通过增加驱动可以总线上的电容超过4000pf,总线长度可以达到15m

关于I2C总线,由于是开漏或者开集电极输出,所以需要接上拉电阻,才能在空闲时将电位钳制在高电平。

3:电源+上拉电阻

二:关于上拉电阻的选择。我们先要了解I2C协议的一些物理层特性

 首先我们看到:输入低电平电压和输出高电平电压

输入低电平电压最低0 V->最高0.4V

输出高电平 最大值 VIH = 07Vcc-VCC

根据公式可以得出:算出上拉电阻的最小值在5V电源供电下,至少为1.53K欧姆。

最大上拉电阻是多少?

最大上拉电阻,我们需要知道I2C物理层的的另外一个特性,就是上升沿和下降沿

 可以看到,在标准模式下,SDA和SCL两条线的上升沿最大时间为1000ms。

我们把电路简化成一个RC,把节点简化为一个等效电容

把节点等效成电容,总线上的节点都是并联,相当于电容1(节点1)并联一个电容2(节点2)。

总线上的 总电容 = 电容1(节点1)+电容2(节点2)

 根据已知Tr最大值1ms,Cb是总电容 假设=200pF

带入公式得 Rp(max) = 591715.9763313609 大约为591KΩ左右。

实际应用中最大不会用到这么大的值,一般情况下标准值4.7KΩ即可满足大部分请求

总结两点,上拉电阻选取规则

最小值必须要保证总线被拉低时,最低电压<=规范规定最大值

最大值必须保证 总线上升沿时间<=规范最大上升沿时间

最后我们利用51单片机的开发板,量取一下I2C的物理层数据,数据如下,即可判定是符合要求的

 习题与思考

(1)我们在开发过程中遇到总线低电平,不符合规范要求。即发现总线上世纪最低电压>0.3Vcc时如何处理。

答:这是必须要增大上拉电阻

(2)总线上升沿不符合要求。即上升时间>规范定义的最大上升沿时间

答:解决方式1,减小上拉电阻

    解决方式2,PC板重新布线,或者减少总线上节点数量

方式1,是最常见的

方式二:除非在一下情况下使用,即一开始发现上升沿时间较大,不符合要求。我们采取减小电阻的方式,使得上升沿时间变小。上拉电阻减小到最小值时,再减小电阻,最低输出电平即将不符合要求。此时上升沿依然不符合要求。这时我们才会采用方式2来解决。

(3)总线上新增加节点对I2C的那些物理层数据有影响

答:新增加节点对输出低电平和总线电容都有影响,但是一般情况下对输出低电平影响很小,但是电容一定增加,导致上升沿时间变大。如果未增加节点之前,上升沿符合要求,增加节点之后上升沿变得不符合要求之后,我们应该减小上拉电阻。

(4)某一位工程师在设计过程中使用51单片机作为主节点,AT24C02作为从节点。因为其他端口都被其他外设占用,设计师采用P2.0=SDA ,P3.0=SCL。请问这样做,会不会有问题?

答:因为51单片机上不同端口的内部结构是不一样的,于是,就会导致SDA和SCL的一致性出现差异,所谓一致性差异,就是总线上的低电压,上升沿时间,两条线出现不一致的现象。虽然在大多数情况下这并不会造成严重的问题,但是在条件允许的情况下。我们还是选取同一型号的端口分别作为SDA和SCL。

(5)实际量取I2C波形过程中发现以下问题

在SDA拉升过程中,SCL也出现了一个小幅度上升,暂时不知道原因。

1.3I2C的编码规则

(1)起始信号(在SCL高电平期间,SDA发生负跳变)

在SCL(蓝色线)高电平期间,SDA(红色线)从高电平跳变为低电平

注意点如下

我把起始信号分为三个部分

 第一部分,我称为确认总线空闲阶段,这一阶段SDA和SCL都是高电平,需维持至少是两个机器周期以上。(我暂时的理解为一个周期用来采样,一个周期用来使单片机进入空闲状态)

第二部分;从SDA下降沿开始,到SCL下降沿开始,我叫做起始信号建立阶段。此阶段也应该保持至少两个机器周期

第三部分,将SCL拉低,方便接下来的SDA数据线的变化,SCL拉低需保持最低两个机器周期。保证主节点已经知道SCL已经拉低,两个周期后可执行SDA上的数据变化。

(2)发送从机地址

从机地址,分为7bit和10bit的ID,目前我只知道,7bit中前四位是固定的代码,每一种类型的器件都有不同的编码(如AT24C02是EEPROM,同一种芯片前四位都是固定的)(),2^4=16种器件。然后低三位是器件自保留可硬编程。

即可这么理解,一根总线上可以挂载16中不同类型的芯片,同一种芯片可以同时挂载8个,只是需要将他们可编程的低3位,接地或者接高电源来赋予不同的地址。
 

 补充一下10bit寻址相关的知识,

 10bit寻址,将地址分为两个字节传输,其中前五位固定为(11110)这个是必须不变的,指示采取10bit 位的寻址。

可以与7bit寻址相比

(3)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值