I2C子系统

I2C子系统

I2C协议

image-20240802091426295

串行、半双工总线,主要用于低速、近距离的芯片之间的通信

I2C信号

**开始信号(S):**SCL为高电平时,SDA由高电平向低电平跳变

**结束信号(P):**SCL为高电平时,SDA由低电平向高电平跳变

**响应信号(ACK):**接收器在接收到8位数据后,在第九个时钟周期拉低SDA

SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化

image-20240802092244068

数据格式

写操作

白色:主→从 灰色:从→主

image-20240802092349788

方向:读/写(0:写 1读)

读操作

image-20240802092525515

具体实现

芯片可以通过SDA线来传输数据,也可以通过它读取数据,那么主设备与从设备肯定不能同时控制SDA线

在9个时钟里(数据+回应):

  1. 前8个时钟由主设备发送数据的话,第9个时钟就由从设备发送数据
  2. 前8个时钟由从设备发送数据的话,第9个时钟就由主设备发送数据

如何才能做到互不影响?

两端使用三极管来实现,如下图所示

image-20240802093303846

image-20240802093408889

A驱动cmos管,接地,SDA输出低电平

A、B同时不驱动,由于上拉电阻的存在,SDA输出高电平

只要有一方驱动三极管,那么SDA都会输出低电平

SMBus协议

IIC (二) – SMBus协议和基础知识介绍-优快云博客

SMBus:系统管理总线

SMBus是基于I2C协议的,是I2C协议的子集,但是相较于I2C协议要求更加的严格

例如:(重复发送S信号)

读取EEPROM时,涉及两个操作:

  1. 把存储地址发送给设备
  2. 读数据

这两步之间的衔接原本需要发送一个P信号停止,再发送一个S信号重新开始

而SMBus对此进行了改进:两步之间的衔接可以直接发送S信号

除此之外,

对于I2C协议,它只定义了怎么传输数据,但是并没有定义数据的格式,这完全由设备来定义

对于SMBus协议,它定义了几种数据格式

I2C子系统的框架

软件框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值