I2C以及OLED屏幕的实际应用

一、I²C 协议的特点

  1. 仅需两根线

    • I²C 总线只需要两根线即可实现设备之间的通信,这两根线分别是串行数据线(SDA)和串行时钟线(SCL)。
    • SDA 用于传输数据,SCL 用于同步数据传输的时钟信号。
  2. 多主多从架构

    • I²C 协议支持多主多从架构,即多个主设备可以同时与多个从设备进行通信。
    • 在多主模式下,当多个主设备同时尝试控制总线时,通过仲裁机制来确定哪个主设备获得总线控制权。
  3. 7 位或 10 位地址寻址

    • 每个连接到 I²C 总线上的设备都有一个唯一的地址,用于在通信中被主设备寻址。
    • 地址可以是 7 位或 10 位,具体取决于设备的要求。
  4. 简单灵活

    • I²C 协议的实现相对简单,只需要少量的硬件资源即可实现。
    • 同时,该协议也非常灵活,可以根据不同的应用需求进行配置和扩展。

二、I²C 协议的工作原理

  1. 起始和停止条件

    • 起始条件:当 SCL 为高电平时,SDA 从高电平变为低电平,表示开始一次数据传输。
    • 停止条件:当 SCL 为高电平时,SDA 从低电平变为高电平,表示结束一次数据传输。
  2. 数据传输格式

    • I²C 协议的数据传输以字节为单位,每个字节为 8 位。
    • 在数据传输过程中,SCL 信号用于同步数据的传输,SDA 信号在 SCL 的每个时钟周期内传输一位数据。
    • 数据传输时,先传输最高位(MSB),最后传输最低位(LSB)。
  3. 应答信号

    • 在每个字节传输完成后,接收方需要发送一个应答信号(ACK)给发送方,表示数据已经成功接收。
    • 应答信号在 SCL 的第 9 个时钟周期由接收方将 SDA 拉低来表示。如果接收方没有发送应答信号,则表示数据传输出现错误。
  4. 地址传输

    • 在开始一次数据传输之前,主设备需要先发送一个起始条件,然后发送要访问的从设备地址。
    • 从设备地址由 7 位或 10 位组成,具体取决于设备的要求。
    • 地址传输完成后,从设备会发送一个应答信号给主设备,表示地址已经被成功接收。
  5. 数据传输方向

    • 在地址传输完成后,主设备可以选择数据传输的方向,即读操作或写操作。
    • 如果是写操作,主设备将数据发送给从设备;如果是读操作,主设备从从设备读取数据。

三、I²C 协议的应用场景

  1. 传感器连接

    • I²C 协议常用于连接各种传感器,如温度传感器、湿度传感器、压力传感器等。
    • 通过 I²C 总线,单片机可以方便地读取传感器的数据,并进行相应的处理。
  2. 存储器扩展

    • I²C 协议也可以用于扩展单片机的存储器,如 EEPROM、FRAM 等。
    • 通过 I²C 总线,单片机可以与外部存储器进行数据交换,实现数据的存储和读取。
  3. 显示设备控制

    • I²C 协议还可以用于控制各种显示设备,如液晶显示屏、OLED 显示屏等。
    • 通过 I²C 总线,单片机可以向显示设备发送控制命令和数据,实现显示内容的更新。

I2C通信协议层:

一、物理层

  1. 引脚定义
    • SDA(Serial Data Line):串行数据线,用于传输数据。这是一个双向引脚,数据在该线路上以串行方式逐位传输。
    • SCL(Serial Clock Line):串行时钟线,由主设备产生时钟信号,用于同步数据传输。
  2. 电气特性
    • 通常工作在低电压,如 3.3V 或 5V 逻辑电平。它是开漏输出结构,所以需要外接上拉电阻,一般上拉电阻的值在  1.8 - 10kΩ 之间。这一特性允许多个设备连接到同一总线上,实现多主多从的通信架构。

二、数据传输层

  1. 位传输
    • 在 I2C 总线上,数据传输以位为单位。在 SCL 时钟信号的高电平期间,SDA 线上的数据必须保持稳定,只有在 SCL 时钟信号为低电平时,SDA 线上的数据才允许发生变化。这一规则确保了数据传输的稳定性和准确性。
  2. 字节传输
    • 每次传输以字节(8 位)为单位。传输顺序是先高位(MSB)后低位(LSB)。在一个字节传输完成后,会有一个应答位(ACK)来确认接收是否成功。
  3. 应答机制
    • 发送器发送完一个字节后,会释放 SDA 线(将 SDA 线置为高电平),接收器在接收到这个字节后,会在第 9 个时钟周期将 SDA 线拉低(发送应答信号 ACK)表示接收成功;如果接收器不拉低 SDA 线(保持高电平),则表示非应答信号(NACK),通常表示传输出现错误或者接收器希望结束数据传输。

三、协议层的操作模式

  1. 主从模式
    • 主设备(Master)
      • 主设备负责发起数据传输、产生时钟信号(SCL)以及控制传输的开始和结束。在总线上可以有多个主设备,但同一时刻只能有一个主设备进行数据传输操作。
      • 主设备通过发送起始条件(Start Condition)来开始一次传输,起始条件是在 SCL 为高电平时,SDA 由高电平变为低电平。然后主设备发送从设备地址(7 位或 10 位地址),其中第 8 位(对于 7 位地址模式)或第 11 位(对于 10 位地址模式)用来表示数据传输方向(读或写)。
    • 从设备(Slave)
      • 从设备响应主设备的操作。从设备有唯一的地址,当从设备检测到主设备发送的地址与自己的地址匹配时,会根据数据传输方向进行相应操作。如果是写操作,从设备接收主设备发送的数据;如果是读操作,从设备向主设备发送数据。
  2. 多主模式
    • 多个主设备可以连接到 I2C 总线上。当多个主设备同时想要控制总线时,会通过仲裁机制来决定哪个主设备获得总线控制权。仲裁机制是基于在 SCL 时钟信号的高电平期间,比较各个主设备在 SDA 线上发送的数据位来实现的。如果一个主设备发送的电平与总线上检测到的电平不匹配,这个主设备就会失去仲裁,停止数据传输操作。

四、协议层的传输速度

  1. 标准模式(Standard - mode)
    • 传输速度可达 100 kbps。这种模式适用于对速度要求不是特别高的应用场景,如一些简单的传感器与微控制器之间的通信。
  2. 快速模式(Fast - mode)
    • 传输速度可以达到 400 kbps。能满足大多数中等速度要求的设备间通信需求,如一些小型的嵌入式系统内部模块之间的通信。
  3. 高速模式(High - speed mode)
    • 传输速度能够达到 3.4 Mbps。主要用于对数据传输速度要求较高的应用,如某些高速数据采集设备与处理器之间的通信。

软硬件I2C协议

软件模拟协议:使用CPU直接控制通讯引脚的电平,产生出符合通讯协议标准的逻辑。


硬件实现协议:由STM32的IIC片上外设专门负责实现IIC通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理IIC协议的方式减轻了CPU的工作,且使软件设计
更加简单。

I2C协议功能框图:                      

通过软件控制引脚电平实现I2C协议,也就是利用IO复用功能重映射

当 “12C1 REMAP = 0” 时,I2C1 的 SCL(串行时钟线)为 PB6,SDA(串行数据线)为 PB7

当 “12C1 REMAP = 1” 时,I2C1 的 SCL 变为 PB8,SDA 变为 PB9

其二者主要的区别就是引脚的不同

初始化I2C的结构体

typedef struct
{
  uint32_t I2C_ClockSpeed;  //设置时钟频率,必须低于400000        

  uint16_t I2C_Mode;         //指定工作模式,可选IIC模式及SMBUS模式       

  uint16_t I2C_DutyCycle;   //时钟占空比,可选LOW/HIGH,2:0或16:9

  uint16_t I2C_OwnAddress1;  //自身的IIC设备地址       

  uint16_t I2C_Ack;          //使能或关闭相应,一般为使能      

  uint16_t I2C_AcknowledgedAddress;  //指定地址长度,可为7或10
                                         
}I2C_InitTypeDef;
  1. uint32_t I2C_ClockSpeed
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值