定义了物理层接口(2线)和数据传输协议。
I2C说明
I²C(Inter-Integrated Circuit),中文应该叫集成电路总线,它是一种串行通信总线,使用多主从架构,是由飞利浦公司在1980年代初设计的,方便了主板、嵌入式系统或手机与周边设备组件之间的通讯。
接口包含2根线:SDA、SCL。
IO设置为开漏输出,外部提供上拉
通讯时钟由此次通信的主机提供;
连接到总线的每个设备均可通过唯一地址进行软件寻址;
I²C是多主设备总线,可提供仲裁和冲突检测;但同一时刻的一次通信只存在至多1个主机。
数据传输协议
串行数据序列的结构可以分为:开始信号,地址位,读写位,应答信号,数据段,停止信号。
空闲状态 | SDA、SCL都是1; |
---|---|
开始信号 | 保持SCL=1,SDA输出0(检测到SDA下降沿),SCL再输出0; |
地址位 | 通常地址位占7位数据,主设备如果需要向从机发送/接收数据,首先要发送对应从机的地址,然后会匹配总线上挂载的从机的地址; |
读写位 | 该位指定数据传输的方向;0-写、1-读 |
应答信号 | 主机每次发送完数据之后会等待从设备的应答信号ACK。主机发送完第8位数据后SCL=0,此时主机输出SDA=1,到第九个时钟信号再读SDA?=0。从机应答就是在第九个时钟到来前输出SDA=0;若第九个时钟读到SDA=1,则表示从机没有应答ACK,会导致数据传输停止。 |
数据段 | 传输的数据总共有8位,由发送方设置。发送之后会紧跟一个ACK 位。重复发送,直到数据完全传输为止。 |
停止信号 | 保持SCL=0,主机先输出SDA=0,SCL输出1,SDA再输出1(检测到SDA上升沿) |
发出开始信号的设备成为此次通信的主设备;在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将变为活动状态,并等待接收地址位。