初步了解I2C
最近发现嵌入式的面试经常会被问到I2C协议,所以今天好好的学习总结下。目前I2C几乎所有芯片都留有I2C接口,也那怪这么多面试会被问到。下面我们下来了解一波I2C的硬件结构,如下图所示:
I2C的硬件结构包含两根线一根是数据线(SDA)和一根时钟线(SCL)外部上拉,采取一主多从的模式:一台主机与多个从设备相连,那么怎么将数据发送/接收到指定的主机/从机的呢?我们再来看两张图:
start | 从机地址/方向 | 回应 | 数据1 | 回应 | 数据2 | 回应 | ………. | P停止位 |
上图黑色为主机发送,红色为从机发送
首先需要主机发送开始信号(START)I2C规定只有在时钟线为低电平期间允许数据线变化,如果在时钟线为高电平期间数据线产生下降沿信号即为通讯开始标志。接下来主机会发送七位从机地址和一位的读写信号,若对应的从机地址存在,时钟线的控制权交给从机,从机确认可以接收后会发送第九位的ASK回应信号表示已经成功接收,接下来主机会一直发送八位数据然后等待从机回应去人接受,当主机觉得发送内容已完成会主动在时钟线为高电平期间产生一个上升沿信号给数据线表示通讯结束。以上为主机发送从机接收,接下来我们来看看从机发送主机接受的模式。
start | 从机地址/方向 | 回应 | 数据1 | 回应 | 数据2 | 回应 | ………. | P停止位 |