赞
踩
该文章为大家介绍了 IIC协议 的基础知识。
外接两个上拉电阻的作用:在总线处于空闲状态,总线为高电平的状态
。问 :为何SCL也要使用上拉电阻?
答 :在第9个时钟之后,如果有某一方需要更多的时间来处理数据,它可以一直驱动三极管把SCL拉低。当SCL为低电平时候,大家都不应该使用IIC总线,只有当SCL从低电平变为高电平的时候,IIC总线才能被使用。当它就绪后,就可以不再驱动三极管,这是上拉电阻把SCL变为高电平,其他设备就可以继续使用I2C总线了。
在一个芯片(SoC)内部,有一个或多个I2C控制器
在一个I2C控制器上,可以连接一个或多个I2C设备
I2C总线只需要2条线:时钟线SCL、数据线SDA
在I2C总线的SCL、SDA线上,都有上拉电阻
时钟线只能由主机产生,作用给从机,完成数据收发同步
主机:主动向数据线上发起数据/结束(起始信号/停止信号) 。从机:只能被接收数据
。
I2C协议中数据传输的单位是字节,也就是8位。但是要用到9个时钟:前面8个时钟用来传输8数据,第9个时钟用来传输回应信号。传输时,先传输最高位(MSB)。
空闲状态 当总线上的SDA和SCL两条信号线同时处于高电平,便是空闲状态,如上面的硬件图所示,当我们不传输数据 时, SDA和SCL被上拉电阻拉高,即进入空闲状态。
开始信号(S):当SCL为高期间,SDA由高到低的跳变;便是总线的启动信号,只能由主机发起,且在空闲状态下才能启动 该信号,如下图所示:
响应信号(ACK):接收器在接收到8位数据后,在第9个时钟周期,拉低SDA。当接收方接收该字节成功,便会输出一个ACK应答信号,当SDA为高电平,表示为非应答信 号NACK,当SDA为低电平,表示为有效应答信号ACK。
( PS :当主机为接收方时,收到最后一个字节后,主机可以不发送ACK,直接发送停止信号来结束传输。)
SDA上传输的数据必须在SCL为高电平期间保持稳定,SDA上的数据只能在SCL为低电平期间变化
I2C协议信号如下:
流程如下:
主芯片要发出一个start信号
然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)
从设备回应(用来确定这个设备是否存在),然后就可以传输数据
主设备发送一个字节数据给从设备,并等待回应
每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。
数据发送完之后,主芯片就会发送一个停止信号。
下图:白色背景表示"主→从",灰色背景表示"从→主"
流程如下:
主芯片要发出一个start信号
然后发出一个设备地址(用来确定是往哪一个芯片写数据),方向(读/写,0表示写,1表示读)
从设备回应(用来确定这个设备是否存在),然后就可以传输数据
从设备发送一个字节数据给主设备,并等待回应
每传输一字节数据,接收方要有一个回应信号(确定数据是否接受完成),然后再传输下一个数据。
数据发送完之后,主芯片就会发送一个停止信号。
下图:白色背景表示"主→从",灰色背景表示"从→主"
下一篇文章为大家介绍 SPI 通信协议。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。