IIC,I2(方)C ,利用总线SCL、SDA,写时序读取数据
时序图:datasheet
总线占两线:SCL、SDA
为什么是总线:可以在总线上连接很多IIC设备,这样可以节省2个io口
从机地址:身份证、与生俱来,生产厂家规定
当总线发送IIC的从机地址后,此IIC设备将返回一个应答信号
从机地址是IIC设备独有的,可以可能被自己定义。
从机地址一般为7位,通常情况下(24C02举例):
最后一位:方向位 控制读写
以上8位构成了寻址字节
单片机是怎么发送寻址字节
IIC只有一位的数据接口,他只能一位一位的发送,所以IIC是串行发送
上图红框中为寻址字节。
上图红框部分与下图绿框部分一致。
带有参数的时序图
首先分析启动部分(START CONDITION):
SCL:保持一段时间的高电平
SDA:
如图意思为,使SDA保持高电平一段时间(tCHDX)
这样写代码即可。
接下来继续分析SDA:
以上一个START启动阶段就写完了。
tCHCL:高时钟脉冲宽度
每经过一个SCL的方波周期,SDA就要发送一个数据
其SCL经过一个高脉冲信号(由低电平转为高电平),IIC设备都会检测SDA信号
那么就要先将SCL从高变为低,这样才会向设备发送一个高脉冲信号
SCL从低电平转换为高电平结束的时间成为时钟周期
上图中tCLDX表明:当SCL变为0后,SDA电平转换的时间
上图中tDXCX为:输入转换到时钟转换 意思为:SDA电平转换后需要经过一段时间才能让SCL电平置为高电平
因为tCHCL:低时钟脉冲宽度 中的时间包含 tDXCX,所以我们只需要考虑前者的时间间隔即可。
当到达第九个时钟周期时,需要将SDA置为高电平,用于准备接受应答信号。
等待应答,不是应该先把SCL拉低,然后SDA拉高,然后再拉高SCL读取SDA信号是否被拉低,因为在SCL为高电平的时候SDA电平不能变化
观察时序图,初始都为0,SCL为1 SDA需要在一段时间后调整至高电平即可。