I2C详解

串行协议简介

I2C是一种串行总线协议,目前常用的还有UART和SPI下面简单介绍一下这几种协议



电气线区别:

       SPI总线由三条信号线组成:串行时钟(SCLK)、串行数据输出(SDO)、串行数据输入(SDI)SPI总线可以实现 多个SPI设备互相连接。提供SPI串行时钟的SPI设备为SPI主机或主设备(Master),其他设备为SPI从机或从设备(Slave)。主从设备间可以实现全双工通信,当有多个从设备时,还可以增加一条从设备选择线。 

        I2C总线是双向、两线(SCLSDA)、串行、多主控(multi-master)接口标准,具有总线仲裁机制,非常适合在器件之间进行近距离的数据通信。在它的协议体系中,传输数据时都会带上目的设备的设备地址,因此可以实现设备组网。 

       UART总线是异步串口,因此一般比前两种同步串口的结构要复杂很多,一般由波特率产生器(产生的波特率等于传输波特率的16)UART接收器、UART发送器组成,硬件上由两根线,一根用于发送,一根用于接收。

因此,SPIUART可以实现全双工,但I2C不行。


I2C协议介绍



这是I2C两根信号线(SCL,SDA)上数据传输的基本时序。

下面详细介绍I2C总线的几个状态:

(A).空闲状态

当SDA和SCL两根信号线一直保持高电平时,表示处于空闲状态,可以通信。

(B).开始状态

当SCL为高,而SDA由高电平变低电平时,表示一次传输开始。

(C).结束状态

当SCL为高,而SDA由低电平变高电平时,表示一次传输结束。

(D).数据有效状态

当在开始状态之后,SCL为高电平时,SDA上的数据保持稳定,则此时的数据时有效的。也就是说数据只能在SCL为低时,才能发生变化。同时一个时钟脉冲传送一位数据


从前面知道IIC可以主机和多个从机进行通信,那么是怎么做到的呢?答案就在下面这幅图里面。



    在开始状态之后,会接着发送一个控制字节。7位的Slave Address就代表了你选择的从器件地址。一般前4位Control Code是固定的,也就是代表一种器件。而后面的Chip Select Bits有三位就意味着在同一条总线上可以接同样的8个器件(Chip Select Bits会由你的硬件电路接法决定)还有一位 R/~W就表示你对从器件是读操作还是写操作。 呃,怎么又冒出来一个Acknowledge Bit呢? 想想你发送出去一个数据,总要知道对方有没有收到吧。这个位就表示应答信号,当你发送一个字节的数据之后,释放SDA信号线,如果接收器件成功接收到数据,就会把SDA信号线拉低,就表示我已经成功接收到数据了。然后你就可以继续发送下一组数据了。



上面这幅图完整地展现了一个数据传送过程。会注意到上面又多了两个部分,Address High Byte和Address Low Byte,这个表示什么呢?也许你向从器件写入一个数据,但是从器件里面又有很多寄存器,这两个字节就表示你想写入数据的具体位置。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值