个人纪录I2C重要知识

I2C传输速率一般是100k,200k,400k,3.2Mbps
其时钟速率与可编程的时钟输出决定

I2C接口采用Open Drain机制, 器件本身不能输出高电平,只能输出低电平,需要外置上拉电阻(1k-10k)
外设数量限制:等效电<400pf

I2C起始信号与停止信号
SCL保持高电平 SDA从高拉低表示起始
SDA 从低位拉高表示停止位,
总线总是在收到起始位之后处于忙状态,直到停止位之后释放总线

I2C 传输
首字节是由地址位和传输方向位组成(7bit地址位+1bit读写位(0表示写,1表示读))之后会收到ACK(从设备将sda拉低)
然后进行数据操作传输大致可以分为三种操作
主设备写操作:
第一,主设备写数据,数据传输格式如下
S 从设备地址(7bit) W ACK 数据 ACK 数据 ACK P

第二,主设备读操作:
S 从设备地址(7bit) R ACK 数据 ACK 数据 NACK P

第三,主设备先写然后重启起始条件接着读操作,或者主设备先读然后重启起始条件接着写操作
S 从设备地址(7bit) R/W ACK 数据 ACK RS 从设备地址 R/W ACK 数据 ACK …

I2C总线竞争仲裁
总线上可能挂接多个器件,有时候会发生两个或多个主器件同时想占用总线的情况,这种情况就会出现总线仲裁
I2C协议规定,仲裁不能在下面的情况之间进行:
重复的起始条件和数据位
停止条件和数据位
重复的起始条件和停止条件
从机不被卷入冲裁过程

总线规范关于仲裁需要明白一些先决条件
(1)I2C总线的控制只由地址和主机码以及竞争主机发送的数据决定,没有中央主机,总线也没有任何定制的优先权
(2)主控只能在总线空闲的时候启动传送,两个或多个主机可能在起始条件的最小持续时间tHD;STA内产生一个起始条件,
结果在总线上产生一个规定的起始条件。
(3)当SCL线是高电平时,仲裁在SDA线发生;这样,在其他主机发送低电平时,发送高电平的主机将断开它的数据输出级,
因为总线上的电平与它自己的电平不相同。
然后,获得进一步的判定条件:
(1)仲裁可以持续多位。首先是比较地址位。如果每个主机都试图寻址同一的器件,仲裁会继续比较数据位(假如主机是发送器),
或者比较响应位(假如主机是接收器)
(2)I2C总线的地址和数据信息由赢的仲裁的主机决定,在仲裁过程中不会丢失信息,
丢失仲裁的主机可以产生时钟脉冲直到丢失仲裁的该字节末尾
(3)在串行传输过程中时,一旦有重复的起始条件或者停止条件发送到i2C总线的时候,仲裁过程仍在进行。
如果可能产生这种情况,有关的主机必须在帧格式相同位置发送这个重复起始或停止条件。
(4)此外,如果主机也结合了从机功能,而且在寻址阶段丢失仲裁,它很有可能就是赢得仲裁的主机在寻址的器件,
那么,丢失的主机必须立即切换到它的从机模式

时钟同步:
时钟SCL同步是建立在总线具有线“与”的逻辑功能,即只要总线节点上有一个发送低电平,总线上就表现为低电平;
当所有节点都发送高电平时,才表现为高电平。正是由于线“与”的逻辑功能,当多个节点同时发送
时钟信号时,总线上表现的是统一的时钟信号。这就是SCL的同步原理

如有问题欢迎交流,后续有更新再补上,接下来会更新i2c子系统的学习,尽情期待

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值