【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

001I2C协议

1.1相关介绍

  • I2C Bus——Inter-Integrated Circuit 即集成电路总线
  • I2C总线端口为漏开结构,因此一般需要**加上拉电阻**Rp,通常选用5K~10KΩ
  • I2C总线以字节为单位收发数据,一个字节为一帧,数据传输的次序为从**最高位到最低位**
  • I2C由**数据线(SDA)** 与 时钟线(SCL) 组成
  • SDA:Synchronous Data Adapter (同步数据衔接器)
  • SCL:Serial Communication Loop(串行通讯环路

1.2硬件原理SCH

主从结构:一主[Master]多从[Slave]
【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

1.3数据传输格式

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

  • 主机数据
    【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

  • 主机数据
    【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

1.4信号传输时序图

  • S3C2440的i2c时序图
    【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?
  • SCL上拉电阻的作用:在第9个时钟之后,双方中若有一方处理还未完成,它可以**一直把SCL拉低,当SCL一直为低电平时,双方都不应该操作SDA总线**。
1.4.1读写流程
  • 1.前8个clk(7bit地址 + 1bit读/写)
    • 从设备不影响总线,从设备不去动三极管
    • 主设备决定数据
  • 2.第9个CLK,由从设备决定数据
    • 主设备不驱动三极管
    • 从设备决定数据
      • SDA高:无ACK
      • SDA低:有ACK

1.5信号解析

  • 起始信号[Start]:在SCL保持高电平时,SDA下降沿
  • 读写位:【0写1读】
  • 数据SCL低电平时,SDA可变化SCL高电平SDA不变
  • 终止信号:在SCL高电平时,SDA上升沿
  • 回应信号[ACK]:SDA低电平,低电平
    【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

1.6如何在SDA上实现双线传输

  • 1.主设备发送时,从设备不发送:可以通过SCL区分控制
  • 2.主设备发送时,从设备的”发送“引脚不影响数据:使用开极电路
1.6.1开极电路

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

A B SDA
0 0 1(由上拉电阻决定)
0 1 0
1 0 0
1 1 1
  • SDA上拉电阻的作用:当A、B都低电平时,三极管都不导通时,SDA取决于外界电路,当什么都不接时,SDA悬空无法获取电平,故接上拉电阻。

开极电路驱动思想
  • 当某个设备不想影响SDA总线时,就不驱动三极管
  • 输出高电平,都不驱动三极管
  • 输出低电平,就驱动三极管

002 S3C2440的IIC控制器

一般主控芯片都有IIC控制器,没有IIC控制器的可以用管脚模拟

  • IIC控制器简化了IIC操作

2.1主从关系

Master Slave
Transmitter Receiver
Receiver Transmitter

2.2IIC控制器流程框图

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

2.3IIC读写操作步骤

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

在发送模式下,当数据已经发送出去后,IIC会等待IICDS寄存器接收新的数据

  • 1.IICDS = val;
  • 2.发完数据,产生中断,拉低SCL
  • 3.中断程序里,判断状态,IICDS = val2,IIC继续工作

在接收模式下,IIC接口会等待直到你把IICDS中的数据读走,在此期间,SCL拉低

  • 1.发起传输,接收DATA
  • 2.接收到数据之后,产生中断,SCL拉低
  • 3.中断程序中,判断,设置中断,val = IICDS,IIC继续工作,继续接收收据

003 程序框架

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

  • 框图解析

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

  • 各个文件的功能

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?

004 编程流程

【学习笔记】I2C通讯详解 | 你真的从全面了解IIC了吗?


如果对你有帮助的话不妨点个赞????鸭~