初步了解I2C

最近发现嵌入式的面试经常会被问到I2C协议,所以今天好好的学习总结下。目前I2C几乎所有芯片都留有I2C接口,也那怪这么多面试会被问到。下面我们下来了解一波I2C的硬件结构,如下图所示:

初步了解I2C

I2C的硬件结构包含两根线一根是数据线(SDA)和一根时钟线(SCL)外部上拉,采取一主多从的模式:一台主机与多个从设备相连,那么怎么将数据发送/接收到指定的主机/从机的呢?我们再来看两张图:

start

从机地址/方向

回应

数据1

回应

数据2

回应

……….

P停止位

上图黑色为主机发送,红色为从机发送

初步了解I2C

首先需要主机发送开始信号(START)I2C规定只有在时钟线为低电平期间允许数据线变化,如果在时钟线为高电平期间数据线产生下降沿信号即为通讯开始标志。接下来主机会发送七位从机地址和一位的读写信号,若对应的从机地址存在,时钟线的控制权交给从机,从机确认可以接收后会发送第九位的ASK回应信号表示已经成功接收,接下来主机会一直发送八位数据然后等待从机回应去人接受,当主机觉得发送内容已完成会主动在时钟线为高电平期间产生一个上升沿信号给数据线表示通讯结束。以上为主机发送从机接收,接下来我们来看看从机发送主机接受的模式。

start

从机地址/方向

回应

数据1

回应

数据2

回应

……….

P停止位

与上面相似也是现有主机发出开始信号,然后发送从机地址和一位读信号,从机回应一位确认信号后,不同的地方开始了,接下来是从机控制时钟线向主机发送数据,然后主机接收到会有一位的回应信号,接下来就这样一直循环读取,直到主机觉得数据接收完成以后发送停止信号停止接收。