0x01:iic简介
I2C(Inter-Integrated Circuit)总线是由 PHILIPS 公司开发的两线式==串行总线==,用于连接微控制器及其外围设备。I2C 总线只有两根双向信号线。一根是数据线 SDA,另一根是时钟线 SCL。
0x02:iic通信时序
在一个标准I2C时序中,下面所介绍的通信时序中,一般以SCL为低电平开始,中间为SDA状态,然后SCL拉高开始通信,通信固定时长后,SCL再次拉低,实现一个bit的信息传输。

0x00:bit

发送一BIT数据,需要在SCL为低电平时准备数据,在SCL由低变高时,发送一BIT数据,SCL由高变低时,结束一个BIT的发送。
0x01:start
主机发起开始信号,说明主机要开始通信了。

SCL为高时,SDA拉低,表示一次iic通信开始。

0x02:stop

0x03:send_ack
应答信号,能保证iic通信的正确性与持续性。
0x00:bit

主机在接收数据后,需返回一个应答信号,表示是否还要继续传输数据。
低9位BIT为低电平,表示应答信号

0x04:send_no_ack
低9位BIT为高电平,表示非应答信号

0x05:send
主机发送数据
==先发高位,再发低位==
0x01:send_one
发送一个数据,即发送一个Byte数据。发送完毕即停止iic通信即可

0x02:send_more
发送多个Byte数据。如果从机在发送完一byte数据后有应答信号产生,则主机可以继续发送数据,直到从机无应答信号。

0x06:get_ack
主机发送数据后,用于接收从机是否有应答信号。

0x07:read
主机接收数据
==先读高位,再读低位==
0x01:read_one
接收一个byte

0x02:read_more
接收多个byte,每接收一个Byte、则返回一个应答信号。

0x08:总结
一帧完整的iic数据,包括起始信号+从机地址+读/写信号+数据+ack/nack+... ... +数据+ack/nack+停止信号
重点:从机地址+读/写信号 = 1 Byte
从机地址:只有7位,读/写信号仅占1位。如下图所示:最后一位位1时,表示主机读取从机数据,为0时,表示主机写数据到从机。

0x01:主机发送数据

第一个数据为从机寄存器地址。
0x02:主机读取数据

此处,读写介绍不全,建议看参考中的文章,结合软件iic程序和时序图,才能较好理解
0x03:软件iic
基于24c02的iic读写函数


0x04:send_no_ack
低9位BIT为高电平,表示非应答信号。
原作者:Gitee
|