详解I2C接口协议

接口/总线/驱动

1136人已加入

描述

I2C总线是由荷兰皇家飞利浦Philips公司(现恩智浦NXP半导体)开发的一种简单的双向两线制总线协议标准。

1953年,荷兰皇家飞利浦公司半导体事业部成立;

2006年,该业务部门从飞利浦拆分成立NXP Semiconductors-恩智浦半导体。NXP这个名字来自 “新的体验”Next Experience;

2010年,恩智浦在美国纳斯达克上市;

2015年,恩智浦收购了由摩托罗拉创立的飞思卡尔半导体,成为全球前十大非存储类半导体公司,及全球最大的汽车半导体供应商(Strategy Analytics);

2019年,恩智浦以17.6亿美金收购Marvell公司的WiFi和蓝牙连接业务资产;

回到主题,详解I2C接口协议:

START and STOP

START and STOP conditions由主机产生,具体参加下图:
  START:SCL为高期间,SDA由高->低; STOP  :SCL为高期间,SDA由低->高;

寄存器

Data validity

SCL为高期间,SDA必须保持稳定;SDA仅在SCL为低期间发生变化;

寄存器

Byte传输、ACK应答

信号传输以Byte为单位,每个字节后都由1bit的应答信号。

MSB先发,LSB最后(I2C/SPI都是MSB先发,而UART是LSB先发)。

当Slave正处理其内部中断而无法接收I2C Master数据时,Slave可拉低SCL以使得Master进入等待状态。

寄存器

写操作时,应答信号由从机产生; 读操作时,应答信号由主机产生;   有时候,读写并不能收到应答信号:有以下五种情况  

I2C总线上没有主机所指定地址的从机设备;

从机正执行一些real-time function,还没准备好与主机通讯;

主机发送的一些控制命令,从机不支持;

从机缓存满,不能再接收新的数据;

主机接收从机数据时,主机产生非应答信号,通知从机数据传输结束,不要再发数据了;

Slave Address、R/W bit

Start信号之后,Master发送7bit的Slave地址,紧接着是1bit的读写控制信号,“0”写,“1”读。也有10bit Slave地址的Device,下文讲解。

寄存器

通常以主机发送Stop信号结束传输,若Master想继续传输,可以不用产生Stop,直接再次产生Start信号然后发送另一个Slave Device地址并进行通信。
 

寄存器

I2C写时序

向指定寄存器地址写入指定数据操作时序:

寄存器

I2C读时序

从指定寄存器地址读取数据操作时序:注意,读数据时有两次起始信号。

寄存器


    10bit Slave Address

上文描述的Slave Address都是7bit的,为什么要用10bit地址,当然是为了拓展支持可能的设备数,目前10bit地址设备尚未广泛使用。

那Slave Address是10bit的话又如何通信?

如下图,将10bit地址分拆成2bit、8bit进行两次传输即可。注意11110xx是Reserve address,后面2bit的xx是10bit地址的最高2bit。

寄存器

10位地址写时序:

寄存器

10位地址读时序:

寄存器



 

I2C保留字节

I2C Start起始位之后的第一个字节,除了厂商指定的设备地址外,还有一些保留字节,主要有两组0000 xxx和1111 xxx:上述的10位地址模式,就是使用到了最后一种保留字节。

寄存器

审核编辑:黄飞

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分