IIC:
1、写数据过程:
-
主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
-
发送一个地址字节(包括7位地址码和一位R/W);
-
当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);
-
主控收到ACK后开始发送第一个数据字节;
-
被控器收到数据字节后发送一个ACK表示继续传送数据,发送NACK表示传送数据结束;
-
主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;
当写数据的时候,Master每发送完8个数据位,Slave设备如果还有空间接受下一个字节应该回答“ACK”,Slave设备如果没有空间接受更多的字节应该回答“NACK”,Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时,此时Master放弃数据传送,发送“Stop”。
2、读通讯过程
-
主控在检测到总线空闲的状况下,首先发送一个START信号掌管总线;
-
发送一个地址字节(包括7位地址码和一位R/W);
-
当被控器件检测到主控发送的地址与自己的地址相同时发送一个应答信号(ACK);
-
主控收到ACK后释放数据总线,开始接收第一个数据字节;
-
主控收到数据后发送ACK表示继续传送数据,发送NACK表示传送数据结束;
-
主控发送完全部数据后,发送一个停止位STOP,结束整个通讯并且释放总线;
主控器向被控器发送的信息种类有:启动信号、停止信号、7位地址码、读/写控制位、10位地址码、数据字节、重启动信号、应答信号、时钟脉冲。
被控器向主控器发送的信息种类有:应答信号、数据字节、时钟低电平。
开始信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由高变低就表示一个开始信号。同时IIC总线上的设备检测到这个开始信号它就知道处理器要发送数据了。
停止信号:处理器让SCL时钟保持高电平,然后让SDA数据信号由低变高就表示一个停止信号。同时IIC总线上的设备检测到这个停止信号它就知道处理器已经结束了数据传输,我们就可以各忙各个的了,如休眠等。
SDA上传输的数据必须在SCL为高电平期间保持稳定(这个稳定指的是上升沿和下降沿中间的一段,保持稳定),因为外接IIC设备在SCL为高电平的期间采集数据方知SDA是高或低电平。SDA上的数据只能在SCL为低电平期间翻转变化。
响应信号(ACK):处理器把数据发给外接IIC设备。处理器发完8bit数据后就不再驱动总线了(SDA引脚变输入),而SDA和SDL硬件设计时都有上拉电阻,所以这时候SDA变成高电平。那么在第8个数据位,如果外接IIC设备能收到信号的话接着在第9个周期把SDA拉低,那么处理器检测到SDA拉低就能知道外接IIC设备数据已经收到。
IIC数据从最高位开始传输。
原文:https://blog.csdn.net/zailushangha/article/details/8233448
转载原文:https://blog.csdn.net/wwt18811707971/article/details/77119413
I2C是一种双向串行通讯标准,常用于嵌入式系统。利用I2C总线可以利用有限的I/O接口来扩展多功能的外围设备。