I2C协议时序以及协议变体

常用I2C从设备介绍

         什么叫从设备呢,从设备是指被主控设备选中从而按照具体协议通信的设备就是从设备,那么I2C从设备就是主控和被控走的是I2C协议,常见的I2C从设备有:HDMI,cmos camera(手机平板前后摄像头),电容触摸屏TS,重力传感器gsensor,eeprom存储设备,我们在工作中经常会做I2C的驱动开发,也就是I2C的从设备驱动开发。I2C提供接口时同时遵循I2C协议通信,当然一个设备可能支持多个接口,如我们的eeprom可以支持I2C,也可以支持spi。I2C从硬件角度的一个连接框架如下:

其中SCL是时序控制线,SDA是数据线,上面的话从设备只画了两个,实际上从设备可能是很多的,那么我的SOC主控需要读写数据的时候是如何区分是哪个从设备的呢:是通过从设备地址,这个地址是唯一的,一般是7bit、10bit,那么从设备相应soc的时候怎么知道是读取,还是写数据呢,此时就出现了I2C协议了,协议格式如下:

上图解释:Scl是主要是发送一个时钟来控制sdl的一个数据发送,什么时候发送开始新信号,什么时候发送从设备地址出来,什么时候告诉从设备是读操作还是写操作,sda中高电平表示读,低电平表示写,发送完读写标志后从设备会给soc一个ack(从高拉低电平),响应了以后就可以读写数据了,读写完成会发个ack,最终如果没有数据了会发送一个p结束信号。

那么接下来真正的一个操作过程,以及数据表示是怎么样的呢?此时就需要时序SCL参与了,具体分析如下(画的丑,没办法):

开始位是从soc发出来的,表示方法是突然从高电平变成低电平:意思是再我们的scl高电平的周期,sdl从高变低就表示了一个s:开始信号,另外我们sda的有效数据是在scl高电平的时候采集的,低电平时无效。发了从设备地址,接下来soc会拉高电平,同时从设备为了响应又会拉低,这样由于都是再一根线sda上,立刻对方就能检测到电流的变化。接下来就是数据传输了,传输完成同样再scl为高电平的时候会拉高电平表示停止信号。实际上这个协议针对开始和结束做了特殊处理的,就是正常情况下是高电平的时候是不能改变电平的,为了避免特殊情况把高变低为开始,低变高位结束。

如何操作从设备,操作的时候需不需要传递操作地址,寄存器地址等?实际上是需要传递操作地址的,所以读写的时候I2C协议可能有变体:写的话有传递操作地址,读的时候首先要告诉读的一个地址,也算是一个操作地址,然后得重新发开始位告诉从设备现在是做读操作,然后发从设备地址,R标志。

写:

读:

 

所以需要注意这种变体区别。。。今天先写到这里吧,嘻嘻^_^

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值