《IIC通信协议》

1.IIC概述

  IIC多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。

 

2.IIC的物理层

  • 只要求两条总线线路,一条是串行数据线SDA,一条是串行时钟线SCL。(IIC是半双工,而不是全双工)
  • 每个连接到总线的器件都可以通过唯一的地址和其它器件通信,主机/从机角色和地址可配置,主机可以作为主机发送器和主机接收器
  • IIC是真正的多主机总线,(而这个SPI在每次通信前都需要把主机定死,而IIC可以在通讯过程中,改变主机),如果两个或更多的主机同时请求总线,可以通过冲突检测和仲裁防止总线数据被破坏。
  • 传输速率在标准模式下可以达到100kb/s,快速模式下可以达到400kb/s。
  • 连接到总线的IC数量只是受到总线的最大负载电容400pf限制。

为什么需要2个上拉电阻?

  根据I2C总线规范,总线空闲时两根线都必须为高。由于I2C接口采用Open Drain机制,器件本身只能输出低电平,无法主动输出高电平,只能通过外部上拉电阻RP将信号线拉至高电平。因此I2C总线上的上拉电阻是必须的!

 

3.IIC的协议层

3.1 数据有效性

  在传输数据的时候,时钟的高电平周期内,SDA线上的数据必须保持稳定,数据线仅可以在时钟SCL为低电平时改变。

 

3.2 起始信号和结束信号

总线空闲状态:SDA和SCL同时处于高电平时,为总线的空闲状态。此时各个器件的输出级场效应管均处在截止状态,即释放总线,由两条信号线各自的上拉电阻把电平拉高。(

起始条件:当SCL为高电平的时候,SDA线上由高到低的跳变被定义为起始条件。

结束条件:当SCL为高电平的时候,SDA线上由低到高的跳变被定义为停止条件。

注意:起始和终止信号都是由主机发出的。

 

3.3 应答信号

  每当主机向从机发送完一个字节的数据,主机总是需要等待从机给出一个应答信号,以确认从机是否成功接收到了数据。

  从机应答主机所需要的时钟仍是主机提供的,应答出现在每一次主机完成8个数据位传输后紧跟着的时钟周期。

  低电平0表示应答,1表示非应答。

 

3.4 数据帧格式

   I2C总线上传送的数据信号是广义的,既包括地址信号,又包括真正的数据信号。

  在起始信号后必须传送一个从机的地址(7位),第8位是数据的传送方向位(R/T),用“0”表示主机发送数据(T),“1”表示主机接收数据(R)。

  每次数据传送总是由主机产生的终止信号结束。但是,若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一从机进行寻址。

在总线的一次数据传输过程中,可以有以下几种组合方式:

1)主机向从机发送数据,数据传送方向在整个传送过程中不变:

注:有阴影部分表示数据由主机向从机传送,无阴影部分则表示 数据由从机向主机传送。
    A 表示应答(低电平), A 非表示非应答(高电平)。 S 表示起始信号, P 表示终止信号。

2)主机在第一个字节后,立即从从机读数据:

 

 3)在传送过程中,当需要改变传送方向时,起始信号和从机地址都被重复产生一次,但两次读/写方向位正好反相:

 

从机地址:

  有的从机设备地址会在数据手册上直接告诉你。例如MPU6050。从机地址是0x68。

  在实际传输的时候,从机地址应该是 0x68(1101000)+二进制位0=11010000)也就是0xD0,表示要向该IIC设备里写东西。

注意千万别直接用0x68。

  再比如用AT24系列的芯片,从机地址前四位是根据不同存储容量固定的,接下来的三位是有三个IO口,根据实际电路确定,最后一位才是读写位。

 

4. 软件模拟IIC

  主机可以采用不带I2C总线接口的单片机,如80C51、AT89C2051等单片机,利用软件实现I2C总线的数据传送,即软件与硬件结合的信号模拟。即使是含有IIC硬件的单片机(如stm32 103系列)也有一定的缺陷,所以一般也会模拟IIC的时序。现将具体时间截图如下:

 

   具体的延时时间要看从机的芯片手册得知它的时钟脉冲宽度为低时的最小时间是多少;时钟脉冲宽度为高时的最小时间又是多少,具体要看数据手册才能知道到底要延时多长时间才准确。

 

 

  

 

posted @ 2021-07-25 23:40  一个不知道干嘛的小萌新  阅读(999)  评论(0编辑  收藏  举报