I2C通信协议

来源:互联网 发布:linux怎么卸载jdk 编辑:程序博客网 时间:2024/06/05 18:33

   I2c是一种个非常常见的串行通信协议,由SDA,SCL两根线组成,分别为数据信号线和时钟信号线。直接从它的时序图开始分析


起始信号:SCL高电平期间,SDA由高电平到低电平表示为起始信号。I2C设备检测到起始信号知道要开始接受传输的设备。

结束信号:SCL高电平期间,SDA由低电平到高电平表示为结束信号。I2C设备检测到结束信号后知道对方已经结束数据传输。



数据传递:I2C设备只在SCL为高电平时读取SDA的状态,也就是说SDA的电平状态必须在SCL高电平时保持稳定,在SCL低电平期间再产生变化。

响应信号:CPU把数据发给I2C设备,CPU怎么知道I2C设备接受到了数据呢?这就需要到这个响应信号(ACK)——在设备接受完八位数据后,在第九个时钟周期,SDA引脚相对于CPU变为输入模式,并拉低SDA为低电平,在之后释放SDA数据线。


一条I2C(或者说两条...)可以访问多个设备,是怎么访问的呢?


访问设备:先发送一个起始信号(START),传送7位设备地址(根据设备的数据手册得知),第八位是读写选择位(0是写,1是读),如果有这个地址该设备就会给CPU发送一个响应信号(ACK)


读数据:发送完设备地址后先写地址位置0选择写模式,为什么要选择’写‘?因为要先选择你要读存储芯片内部哪一地址的数据,这里的WORD ADRESS就是你通过CPU写下这个地址告诉存储芯片我要读访问这地址的数据,写完后对方回应。再写一次设备地址,这次选择’读‘模式,把数据给读回来。

0 0
原创粉丝点击