6

技术 | I2C 子系统(三)

 2 years ago
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.
neoserver,ios ssh client

3、I2C Transfer

Definition of timing

想要深入探讨 I2C 协议,必须深刻理解各种时间的定义(F/S-mode)

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwujjAgTBvE4Rj5WpoTBm7UmorHRL68xykuuwOepGZhibIeeJ7ZXdrnicQ%2F640%3Fwx_fmt%3Dpng&s=37884a
标识符 定义
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,访问其他从设备。

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwTQZHgMNrlYt3nM7cPWl0KZHIVia4ImNA0fWicRGKAW5PDzjuHciciapEnw%2F640%3Fwx_fmt%3Dpng&s=0ce5ff
forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwzVT0uWReic98n1jsg43hhaxXI3VYlNVg3QvhJM4YYqMayzj3Ub7IaMA%2F640%3Fwx_fmt%3Dpng&s=3e4cbc

1、数据有效性

在 SCL 高电平期间,SDA 必须稳定,所以一般情况下,SCL 高电平宽度小,SDA 高电平宽度大,用示波器看也是这样的。

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwGjIE0l9CNNxHjNwptDpXiby7qg2Qouic1uXicXcLNPicWGR7fYwhMTJJOQ%2F640%3Fwx_fmt%3Dpng&s=de1e03

2、起始条件和停止条件

起始条件:SCL 高电平时,SDA 由高变低。

停止条件:SCL 高电平时,SDA 由低变高。

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuw9eELXfU9xibZHD0wIskoRdjlaDEqZ80cSz5naM3kwCeM5TvXiaF7qoPQ%2F640%3Fwx_fmt%3Dpng&s=e66786

一般每传输一个字节(8 bit),就会重新开始。SDA 在 SCL 是低电平期间变换数据,不可以在 SCL 高电平期间变换数据,否则会认为是 起始和停止条件。

  1. 传输长度必须是一个字节(8 bit)每次传输的字节不受限制数据必须以 MSB 开头进行传输,也就是先传输最高位从机可以将时钟线 SCL 保持在低位,迫使主机进入等待状态。
forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwIytN4vZeUJBNToUYPmb7L5icbBNPce2fBKaricwyNIS6FxVSaribzJfYg%2F640%3Fwx_fmt%3Dpng&s=05791e
forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwsQmNYojoqo8bdlE09EAhKXgvxiadib8WKZnoRYibovVNODqSYw6zw51TQ%2F640%3Fwx_fmt%3Dpng&s=1ec5f2

3、ACK or NACK

每次传输完一个字节以后,从设备要进行一个回应,回应 ACK 或者 NACK。

ACK :在传输 8 bit 以后,在第九个 bit ,SCL 高电平,如果 SDA 是低电平,说明回应了 ACK。

NACK:在传输 8 bit 以后,在第九个 bit ,SCL 高电平,如果 SDA 是高电平,说明回应了 NACK。

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwfRedpMP8C6VONI5SrwlKuakYEWyU1nlyEBy3LVpg3Cs8855SyczRLw%2F640%3Fwx_fmt%3Dpng&s=78fe96

4、write data

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwdktT7eemicpGCTXpfibB98t4iaJ325AXluQYMEn4ia9lPtgsLg5OlJ9pug%2F640%3Fwx_fmt%3Dpng&s=41884e

5、read data

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwL2dYl1sPicRib8J4Y6jE8Vu3YTicY28iaPEiao8j1HtWQQx8W8bo4CkuFPQ%2F640%3Fwx_fmt%3Dpng&s=6e5b7f

6、复合格式

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwDnlauYnjySfVI7I19QreMkibEzjPXg7mQCYaeaoYu8ib4xRXGu8OkknQ%2F640%3Fwx_fmt%3Dpng&s=03a19d

7、I2C Transfer Regulation

  1. 以 START 条件开始以 STOP 条件结束传输的第一个字节为 7bit 从机地址 + 1bit 读写位每个总线上的设备都会比较 STRAT 信号后面的 7bit 地址与自己的地址是否匹配每个 byte(8 bits) 后面都会有 ACK 或者 NACK在 START 信号或者 repeated START 信号后,从机必须重置自己的总线逻辑一个 START 后面紧跟着一个 STOP 信号,是非法格式主机 master 可以不产生 STOP 信号,而是直接产生一个 repeated START 信号+另外一个设备地址,直接开始访问另外一个设备

8、10-bit addressing

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwAdsPSGBT1UUOTRcwrPDuSbXoQDdbfvb5Jgt9uDr6lPdyic7o2v6T1cQ%2F640%3Fwx_fmt%3Dpng&s=087fb3
forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwhGkjdCcYQdZYo3w4XR7v40ibChwgJj693NgBO2DgoGKxVfv10zj743A%2F640%3Fwx_fmt%3Dpng&s=627d20

解析如下:

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwiacic7YbktUpHtw8VkdxjGSF3Tep3iabvIviaPm5IVOuUvXMNAhA76X7Ow%2F640%3Fwx_fmt%3Dpng&s=5ecdaf

A9-A0 表示 10bits 地址

9、示波器波形图

forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwWZWZoKRANc0YuFKHObfNB5Kkcp8ww8rWSKCXe6B7plEFIHn8CAMU4A%2F640%3Fwx_fmt%3Dpng&s=762ac3
forward?url=https%3A%2F%2Fmmbiz.qpic.cn%2Fmmbiz_png%2FhgnOITBSQYtJ5xKC9t0Xa3PiaFhtKvRuwAhBs7H9NBswLEHtRcQaa9ZqBLQUgICiaPHVFQIhkGNyMVviaoZnxLScg%2F640%3Fwx_fmt%3Dpng&s=bdd0b8

10、补充

I2C 不支持从设备在 SCL 和 SDA 总线上发起一个中断,通知主设备来读数据。有中断需求的从设备需要额外接一根中断线,通知主控数据已经准备好,让主控发起读数据的操作。

这无疑增加了系统复杂性,多占用了 pin 脚。I3C 则不存在这种问题,I3C 允许从设备在 SCL 和SDA 上发起中断,叫“带内中断”,I3C 后面会讲。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK