I2C协议

来源:互联网 发布:110淘宝安全中心 编辑:程序博客网 时间:2024/05/18 17:04
    串行总线I 2C由数据线SDA和时钟线SCL构成,可实现完善的双工同步数据传输,能方便的构成多机系统和外围器件扩展系统,I2C采用器件地址的硬件设置方法,通过软件进行寻址。
    在一次通信过程中,由主控器负责向总线上发送启动信号、同步时钟信号、被控器件地址码、重启动信号和停止信号等。
    如果在系统中同时存在2个或2个以上的主器件节点企图控制总线,则形成总线冲突状态。由于I2C引入了同步时钟和总线仲裁机制,即使出现总线冲突也不会造成信息丢失。

    发生总线冲突时,为了避免信息丢失,需要进行总线仲裁以决定谁是主控器。总线仲裁是通过裁定SDA线上的控制权来解决的。时钟同步是连接到SCL线上的所有器件进行“线与”实现的。只要有一个器件向SCL输出低电平,SCL就为低电平。因此SCL线的低电平时间由时钟低电平期最长的器件决定,而高电平时间由时钟高电平期最短的器件决定,从而低电平周期短的器件会进入高电平的等待状态,由此形成了时钟的同步。


在通信过程应注意以下6点:

    1. 进行数据传送时,在SCL为高电平期间,SDA线上电平必须保持稳定,只有SCL为低时,才允许SDA线上电平改变状态。并且每个字节传送时都是高位在前。
    2. 对于应答信号,ACK=0时为有效应答位,说明接收器已经成功接收到该字节,若为1则说明接受不成功。
    3. 如果被控器需要延迟下一个下一个数据字节开始传送的时间,可以通过把SCL电平拉低并保持来强制主控器进入等待状态。
    4.主控器完成一次通信后还想继续占用总线在进行一次通信,而又不释放总线,就要利用重启动信号Sr。它既作为前一次数据传输的结束,又作为后一次传输的开始。
    5.总线冲突时,按“低电平优先”的仲裁原则,把总线判给在数据线上先发送低电平的主器件。
    6.在特殊情况下,若需禁止所有发生在I2C总线上的通信,可采用封锁或关闭总线,具体操作为挂接在总线上的任一器件将SCL锁定在低电平即可。


原创粉丝点击