文章目录
提示:本文参考野火视频,做学习记录。
一、什么是I2C?
I2C通过协议(Inter-Integrated Circuit)由phillips公司开发的,引脚少,硬件实现简单,可扩展性强,不需要USART、CAN等通信协议的外部收发设备,被广泛使用在系统内多个集成电路(IC)间的通信。如下图所示:
I2C分为物理层与协议层:
二、物理层与协议层
1.物理层
(1)I2C总线:
I2C总线由串行数据总线(SDA)与串行时钟总线(CLK)组成。数据线用于传输数据,时钟线用于数据收发同步。
(2)从地址:
每个连接到总线的设备都有一个独立的地址(从地址7位,与读写位组成一个字节,通常表示为8位的读地址与8位的写地址),主机利用不同的地址进行不同的设备通信。
(2)三种传输模式:
标准模式:100kbit/s
快速模式:400kbit/s
高速模式:3.4Mbit/s
总线上通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态;而当所有的设备都空闲时,所有的设备都会输出高阻态,由上拉电阻把总线拉到高电平。通过识别总线的是否为高电平就能识别到总线是否有无通信。
2、协议层
(1)基本读写过程(下图为数据写入图):
S:起始信号 P:停止信号
SLAVE_ADDRESS:设备从地址(挂载的从机地址) DATA::传输的数据
A:应答信号(ACK) A非::非应答信号(NACK)
R:读标志位(”0“写入) W:写入标志位(“1”读数据)
主机发送S(起始信号)+SLAVE_ADDRESS(从地址)+R/W操作对用的从机,当为写入时数据传输方向为主机到从机,每次数据接收完成之后,从机必须必须回一个ACK或者NACK,数据完全发送完毕之后从机回NACK,告诉主机数据已经发送完毕,主机发送停止信号P结束通信。 当为读数据时,从机发送数据后必须回一个ACK或者NAC告诉主机数据是否发送完毕,当主机收到NACK主机就知道从机所有数据发送完毕,这是主机在发送停止信号P来停止通信。
(2)复合模式:
复合模式与基本读写模式基本相同,当从地址回复NACK告诉主机数据已经发送完毕时,主机不是发送停止信号而是发送 重复起始信号Sr开始一段新的数据传输。
(3)通信的起始信号与停止信号:
当SCL线是高电平时SDA线从高电平向低电平切换——表示通信的开始(其实信号)。
当SCL线是高电平时SDA线从低电平向高电平切换——表示通信的结束(停止信号)。
停止信号与起始信号一般由主机产生。
(4)可挂载的从设备数量:
有IIC地址决定,8位地址,减去1位广播地址,是7位地址,2^7=128,但是地址0x00不用,那就是127个地址, 所以理论上可以挂127个从器件。