一般串行数据通讯都有时钟和数据之分,有异步和同步之别.有单线,双线和三线等.
I2C
1.串行接口的发送和接收一般都各用一条线,如的TXD
2.在I2C
线与:在一个结点(线)上,连接一个上拉电阻到电源 VCC或 VDD和 n个 NPN 或 NMOS 晶体管的集电极 C或漏极 D, 这些晶体管的发射极 E 或源极 S 都接到地线上,只要有一个晶体管饱和,这个结点(线)就被拉到地线电平上.
4.半双工,仅需要两根线(所以又被称为2-wire总线)
5.SDA下降沿跟随一个SCL下降沿表示传输开始 SCL上升沿跟随一个SDA上升沿表示传输结束
6. I2 C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,(否则 ,SDA下跳则 "判罚 "为 "起始信号 S",SDA上跳则 "判罚 "为 "停止信号 P".)只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。
I2C
1.在I2C
(2)用户自定义地址码: D3-D1共 3位。这是由用户自己设置的,所以同一 IIC总线上同一型号的 IC只能最多共挂 8片同种类芯片
(3)最低一位就是 R/W位。这位不用我多说了 读写是站在主机的立场上定义的 .
2.
为了完成一个字节的传输,接收方应该向发送方发送一个ACK位。ACK应该发生在SCL线的第九个脉冲期间。当接受到ACK信号时,发送方应该释放SDA线使SDA线电平为高。接收方应该驱动SDA线为低。因此,在第九个SCL脉冲的高电平期间SDA保持为低(因为信号是“与”的)。ACK的传输可以由软件通过IICSTAT寄存器控制是否禁止,但它仍然是需要产生的。每个字节后应该由对方回送一个应答信号ACK做为对方在线的标志
I2C 总线数据传送过程
1.每次都是先传最高位,通常从器件在接收到每个字节后都会做出响应,即释放SCL线返回高电平,准备接收下一个数据字节,主器件可继续传送。
2.如果从器件正在处理一个实时事件而不能接收数据时,(例如正在处理一个内部中断,在这个中断处理完之前就不能接收I2C 总线上的数据字节)可以使时钟SCL线保持低电平,从器件必须使SDA 保持高电平,此时主器件产生1 个结束信号,使传送异常结束,迫使主器件处于等待状态。当从器件处理完毕时将释放SCL 线,主器件继续传送
读写操作:
在发送模式下,当一个数据传输时,IIC总线接口将等待直到IICDS寄存器收到一个新数据。在一个新数据写入IICDS寄存器前,SCL信号将保持为低。在数据被写入之后,信号线被释放(为高)。ARM需要保持中断信号来辨别当前数据发送完成。在ARM接到一个中断请求后,它将写一个新的数据到IICDS。
在接收模式下,当一个数据接收时,IIC总线接口将等待直到IICDS寄存器数据被读出。在新数据被读出之前,SCL信号保持为低。在数据被读出后,信号线被释放(为高)。ARM应保持中断信号以辨别接收数据操作完成。在ARM收到一个中断请求时,它将从IICDS读出数据。
§主设备传送一个字节到从设备![]()
I2C 总线竞争和仲裁机制
1. 总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情况。
2. I2C 总线具有多主控能力,可以对发生在SDA 线上的总线竞争进行仲裁。
3. 其仲裁原则为:当多个主器件同时想占用总线时,如果某个主器件发送高电平,而另一个主器件发送低电平,这种情况下,侦测到总线上是低电平(线与),则发送低电平的设备获得总线控制权。如果两个设备都产生一个低电平为地址的第一位,则应该再仲裁第二个地址位,仲裁会一直继续直到最后一个地址位.
开始:信号表明传输开始。
地址:主设备发送地址信息,包含 7
数据:根据指示位,数据在主设备和从设备之间传输。数据一般以 8