技术 | I2C 子系统(三)
source link: https://www.eefocus.com/embedded/519273
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
3、I2C Transfer
Definition of timing
想要深入探讨 I2C 协议,必须深刻理解各种时间的定义(F/S-mode)
标识符 | 定义 |
---|---|
tf | 信号下降时间 |
tr | 信号上升时间 |
tLOW | 信号低电平时间 |
tHIGH | 信号高电平时间 |
tHD;DAT | 数据保持时间 |
tSU;DAT | 数据建立时间 |
tSP | 输入滤波器必须抑制的毛刺脉宽 |
tBUF | 启动和停止条件的空闲时间 |
tHD;STA | 重复起始条件的保持时间 |
tSU;STA | 重复起始条件的建立时间 |
tSU;STO | 停止条件建立时间 |
Sr 重新启动,S 启动,P 停止。
note:SCL 高电平的时候,SDA 是高就是 1,是低就是 0。SCL 低电平期间,SDA 变换数据。
note:起始条件很容易理解,重复起始条件就是没有STOP,再来了一个 START,然后发送另外一个从设备 ID,访问其他从设备。
1、数据有效性
在 SCL 高电平期间,SDA 必须稳定,所以一般情况下,SCL 高电平宽度小,SDA 高电平宽度大,用示波器看也是这样的。
2、起始条件和停止条件
起始条件:SCL 高电平时,SDA 由高变低。
停止条件:SCL 高电平时,SDA 由低变高。
一般每传输一个字节(8 bit),就会重新开始。SDA 在 SCL 是低电平期间变换数据,不可以在 SCL 高电平期间变换数据,否则会认为是 起始和停止条件。
- 传输长度必须是一个字节(8 bit)每次传输的字节不受限制数据必须以 MSB 开头进行传输,也就是先传输最高位从机可以将时钟线 SCL 保持在低位,迫使主机进入等待状态。
3、ACK or NACK
每次传输完一个字节以后,从设备要进行一个回应,回应 ACK 或者 NACK。
ACK :在传输 8 bit 以后,在第九个 bit ,SCL 高电平,如果 SDA 是低电平,说明回应了 ACK。
NACK:在传输 8 bit 以后,在第九个 bit ,SCL 高电平,如果 SDA 是高电平,说明回应了 NACK。
4、write data
5、read data
6、复合格式
7、I2C Transfer Regulation
- 以 START 条件开始以 STOP 条件结束传输的第一个字节为 7bit 从机地址 + 1bit 读写位每个总线上的设备都会比较 STRAT 信号后面的 7bit 地址与自己的地址是否匹配每个 byte(8 bits) 后面都会有 ACK 或者 NACK在 START 信号或者 repeated START 信号后,从机必须重置自己的总线逻辑一个 START 后面紧跟着一个 STOP 信号,是非法格式主机 master 可以不产生 STOP 信号,而是直接产生一个 repeated START 信号+另外一个设备地址,直接开始访问另外一个设备
8、10-bit addressing
解析如下:
A9-A0 表示 10bits 地址
9、示波器波形图
10、补充
I2C 不支持从设备在 SCL 和 SDA 总线上发起一个中断,通知主设备来读数据。有中断需求的从设备需要额外接一根中断线,通知主控数据已经准备好,让主控发起读数据的操作。
这无疑增加了系统复杂性,多占用了 pin 脚。I3C 则不存在这种问题,I3C 允许从设备在 SCL 和SDA 上发起中断,叫“带内中断”,I3C 后面会讲。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK