I2C子系统
I2C协议
串行、半双工总线,主要用于低速、近距离的芯片之间的通信
I2C信号
**开始信号(S):**SCL为高电平时,SDA由高电平向低电平跳变
**结束信号(P):**SCL为高电平时,SDA由低电平向高电平跳变
**响应信号(ACK):**接收器在接收到8位数据后,在第九个时钟周期拉低SDA
SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化
数据格式
写操作
白色:主→从 灰色:从→主
方向:读/写(0:写 1读)
读操作
具体实现
芯片可以通过SDA线来传输数据,也可以通过它读取数据,那么主设备与从设备肯定不能同时控制SDA线
在9个时钟里(数据+回应):
- 前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据
- 前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据
如何才能做到互不影响?
两端使用三极管来实现,如下图所示
A驱动cmos管,接地,SDA输出低电平
A、B同时不驱动,由于上拉电阻的存在,SDA输出高电平
只要有一方驱动三极管,那么SDA都会输出低电平
SMBus协议
IIC (二) – SMBus协议和基础知识介绍-优快云博客
SMBus:系统管理总线
SMBus是基于I2C协议的,是I2C协议的子集,但是相较于I2C协议要求更加的严格
例如:(重复发送S信号)
读取EEPROM时,涉及两个操作:
- 把存储地址发送给设备
- 读数据
这两步之间的衔接原本需要发送一个P信号停止,再发送一个S信号重新开始
而SMBus对此进行了改进:两步之间的衔接可以直接发送S信号
除此之外,
对于I2C协议,它只定义了怎么传输数据,但是并没有定义数据的格式,这完全由设备来定义
对于SMBus协议,它定义了几种数据格式