I2C 总线的传送格式为主从试,对系统的某一器件来说有 4 种可能的工作
状态:主发送方式,从发送方式,主接收方式,从发送方式,从接收方式。
主发送从接收
主器件产生开始信号以后,发送的第一个字节为控制字节。前 7 位为从器
件的地址片选信号。最低位为数据传送方向(高电平表示读从器件,低电平为
写从器件),然后发送一个选择从器件片内地址的地址来决定开始写数据的起
始地址。接着再发送数据字节,可以是单字节数据,也可以是一组数据,由主
器 件 决 定 。 从 器 件 每 接 收 到 一 个 字 节 以 后 , 都 要 返 回 一 个 应 答 信 号
(ASK=0)。主器件在应答(时钟周期高电平)期间释放 SDA 线,转由从器
件控制,从器件在这时钟的高电平器件必须拉低 SDA 线,并使之为稳定的低电
平,作为有效的应答信号。
从发送主接受
在开始信号以后,主器件向从器件发送控制字。如果从器件接受到主器件
发送来的控制字中的从地址片选信号与该器件相对相应,并方向为高电平
( R/W=1 ) , 就 表 示 从 器 件 要 发 送 数 据 。 从 器 件 先 发 送 一 个 应 答 信 号
(ASK=0)回应主器件,接着由从器件发送数据到主器件。如果在这过程中,
主器件发送从器件一个片内地址选择信号,那么从器件发送的数据就从该地址
开始发送;如果在从器件接收到请求发送的控制信号以前,没有接受到这个地
址的选择信号,从器件就从最后一次发送数据的地址开始发送数据。发送数据
过程中,主器件每接收到一个字节都要返回一个应答信号 ACK。若 ACK=0
(有效应答信号),那么从器件继续发送;若 ASK=1(停止应答信号),则停
止发送。主器件可以控制从器件从什么地址开始发送,发送多少字节。
在那些只有一主设备(典型的就是主微控制器)的基本系统中不会有仲裁
的。然而,更多的复杂设备能够有多个主控设备,因此,就有必要用某种形式
的仲裁来避免总线冲突和数据丢失。通过使用线与连接 I2C 总线的两路信号
(数据与时钟)可以实现仲裁。所有的主设备必须监视 I2C 上的数据和时钟线,
如果主设备发现已经有传输正在进行,它就不会开始传输了。有很小的几率会
发生一下情况:有两个设备或更多设备同时发出“开始”信号。在这种情况下,
相会竞争的设备会自动是它们的时钟保持同步,然后像平常一样继续发送信号。
评论1