通俗易懂I2C协议
-
- 一、什么是I2C协议
- 二、I2C,SPI,UART协议的区别
- 三、I2C的信号线
- 四、I2C的连接方式
-
- 4.1 单主设备,单从设备
- 4.2 单主设备,多从设备
- 4.3 多主设备,多从设备
- 五、I2C数据传输格式
-
- 5.1 空闲位
- 5.2 起始位
- 5.3 地址位置和读写控制
- 5.4 应答位(ACK/NACK)
-
- 5.4.1 正确接收数据(ACK)
- 5.4.2 未正确接收数据(NACK)
- 5.5 数据位
- 5.6 停止位
- 5.7 总结
- 六、I2C可配置变量
-
- 6.1 传输模式
- 6.2 地址位宽
- 6.3 设备地址
- 七、I2C的仲裁机制
-
- 7.1 SCL同步问题
- 7.2 SDA仲裁问题
- 八、写在最后
- 九、其它数字IC解释基本协议
-
- 9.1 UART协议
- 9.2 SPI协议
- 9.3 I2C协议
- 9.4 AXI协议
一、什么是I2C协议
I2C是由Philips简单的开发,通俗易懂SPI我们区分了协议根据特点,协议数据流的差异,I2C协议属于(即同时,数据单向流动)。I2C也是以,通过,I2C可以,I2C主要用于实现,比如通过I2C协议,连接MCU与LCD驱动器,远程I/O口,RAM,EEPROM或数据转换器。
二、I2C,SPI,UART协议的区别
作者按顺序依次完成,因为这三种协议都属于,因此,作者将这三种协议协议,诚然,经过几十年的发展,这些协议衍生出了许多新版本和许多新特征,但其基本通信方式没有改变。因此,我们只比较他们的基本版本,得到以下表格。。
协议名称 | 数据流向 | 电气信号线 | 通信类型 | 选通方式 |
---|---|---|---|---|
UART | 单工/半双工/全双工 | 1/2条 | 异步 | 无 |
SPI | 全双工 | 4条 | 同步 | NSS选择 |
I2C | 半双工 | 2条 | 同步 | 地址索引 |
,作者觉得很有意思。 对于一般来说,是的,它的通信方式是最简单的,至少只需要一条线就可以完成通信。协议本身不允许从设备中外接多个,但我们也可以通过多从设备选择()。 其次是,它有一个特殊的,默认降低选择所需的设备。 最后是,每个,通信的时候,若一致,则选择。
三、I2C的信号线
I2C仅需要即可,如下图所示。除此之外,I2C的信号线,上拉电阻的大小是,不归Digital IC Design Engineer这里就不赘述了。 :串行数据线用于传输。 :传输串行时钟线,主设备一般提供给从设备。
四、I2C的连接方式
I2C连接形式非常灵活,可以,也可以是,还可以是
4.1 单主设备,单从设备
4.2 单主设备,多从设备
4.3 多主设备,多从设备
五、I2C数据传输格式
5.1 空闲位
,对应主设备
5.2 起始位
SCL高电平时 ,主设备,进入起始位后, 从设备,状态机跳转,等待输入地址信号
从设备到下降沿检测电路,作为状态跳变的控制信号,详情请参考作者之前的文章。IC手撕代码】Verilog边缘检测电路
5.3 地址位置和读写控制
按照,依次发送地址位,,通常,地址位置为7bit,读写选择为1bit。每个从设备,依靠这个数字来确定。 同时,为了,我们在主设备上,我们在设备方面。 若需要主设备,该位置设置为 若需要主设备,则将其设置为 1 。。
5.4 应答位(ACK/NACK)
发送了标题为5.3的8bit后,主机,由于这个时候,,假如从机,会将,假如,在从设备的控制下,。
读者在这里会发现,同一个SDA,怎么主设备也能控制,从设备也能控制呢?这里涉及到了inout双向端口的相关问题,可以参考作者的这篇文章进行解读和理解通俗易懂的带你解读inout双向端口
5.4.1 正确接收数据(ACK)
正确接收,SDA由从设备拉低
5.4.2 未正确接收数据(NACK)
未正确接收,SDA依旧为高电平
5.5 数据位
当我们成功收到ACK信号后,就可以正式了,,每个字节的传输都需要跟一个(ACK/NACK)
5.6 停止位
SCL先拉高,在SCL为高电平的时候,,即为停止位,此后,I2C协议重新进入到空闲状态。这里使用了,原理同起始位的下降沿检测电路
5.7 总结
首先为起始位S(start),接着传输地址7位SLAVE ADDRESS和1位读写控制信号R/W,再往后8位8位的传输数据位,每个字节紧跟ACK信号,最后为停止位 所有的阴影部分,都是,而A对应的,则为。
六、I2C可配置变量
6.1 传输模式
- 标准模式(Standard):100kbps
- 快速模式(Fast):400kbps
- 快速模式+(Fast-Plus):1Mbps
- 高速模式(High-speed):3.4Mbps
- 超快模式(Ultra-Fast):5Mbps(单向传输)
提起,读者首先想到的可能是指,这没有错,但是绝不仅限于此,为了获得更高的传输速率,除开芯片设计工程师外,电路的设计人员需要认真思考诸如“负载电容,上拉电阻的大小”等更偏向于电路设计或模拟设计的内容。
6.2 地址位宽
- 标准I2C:七位寻址
- 扩展I2C:十位寻址
每个主设备或者从设备都能对应一个唯一的地址,大多数情况下,。但是也可以对其进行,多出来的3位地址相当于提供了,同时,按照,10位地址的从设备,和7位地址的从设备,都,不过,客观来讲,10位寻址的I2C不常用,7位寻址的I2C协议就足够大家日常使用了。
6.3 设备地址
每个主设备与从设备需要设置互不相同的七位地址或十位地址。 等等等等
七、I2C的仲裁机制
7.1 SCL同步问题
总线天生带,即总线的几个输入端,,真值表如下所示。
设备A | 设备B | 总线逻辑 |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
假设有两个,Master1 ,Master2,那么SCL会(线与逻辑的应用),而假如Master1,Master2,SCL又会按照CLK2的时间来拉高自身。
因此:
7.2 SDA仲裁问题
假如在空闲状态时,两个主设备(相隔时间很短),I2C岂不是会发生错误(数据紊乱等),如何解决这个问题呢? 我们可以采取,同样应用到总线的,在箭头所指的位置,,对SDA上的数据进行采样,结果为0,与DATA2上的数据0相同,与DATA1上的数据1不同, Master1退出了对总线的控制,而Master2所发送的数据都是正确的,完成仲裁。
八、写在最后
- 单主设备,单从设备(不涉及仲裁与同步)
- 全局时钟100Mhz
- 标准模式(100kbps)传输速率
- 标准I2C的七位寻址
- 从设备为EEPROM
九、其他数字IC基础协议解读
9.1 UART协议
- 【数字IC】深入浅出理解UART
- 【数字IC】从零开始的Verilog UART设计
9.2 SPI协议
- 【数字IC】深入浅出理解SPI协议
- 【数字IC】从零开始的Verilog SPI设计
9.3 I2C协议
- 【数字IC】深入浅出理解I2C协议
9.4 AXI协议
- 【AXI】解读AXI协议双向握手机制的原理
- 【AXI】解读AXI协议中的burst突发传输机制
- 【AXI】解读AXI协议事务属性(Transaction Attributes)
- 【AXI】解读AXI协议乱序机制
- 【AXI】解读AXI协议原子化访问
- 【AXI】解读AXI协议的额外信号
- 【AXI】解读AXI协议的低功耗设计
- 【数字IC】深入浅出理解AXI协议
- 【数字IC】深入浅出理解AXI-lite协议