当前位置: 首页 > news >正文

I2C 通信、AT24C02 EEPROM及LM75温度传感器的配置

一、基础概念

1. I2C协议

I2C(Inter-Integrated Circuit,集成电路间总线)是由飞利浦公司于 1982 年开发的一种同步、半双工串行通信协议,主要用于短距离内低速设备间的数据交互(如传感器、EEPROM、LCD 控制器等)。其核心优势在于仅需两根信号线即可实现多设备通信,简化了硬件布线,降低了系统成本。

2. 核心特征

特征说明
通信方式同步通信(依赖时钟线同步)、半双工(数据双向传输但不同时)
信号线数量仅需 2 根:SDA(Serial Data,串行数据线)、SCL(Serial Clock,串行时钟线)
设备寻址采用 7 位或 10 位地址编码,7 位地址可支持 128 个设备(预留部分地址为通用地址)
传输速率标准模式(100kbps)、快速模式(400kbps)、高速模式(3.4Mbps)等
总线结构多主从结构(可支持多个主设备,但同一时刻仅一个主设备占用总线)
电平标准通常为 TTL 电平,SDA 和 SCL 均需通过上拉电阻(一般 4.7kΩ)接电源,空闲时为高电平

3.线与特性

当总线上的引脚输出高电平时,总线上的电平高低,由通信新中的对方决定

二、I2C 总线物理层与时序

1. 物理层结构

  • 信号线
    • SDA:双向数据线,用于传输数据字节(高位先传)。
    • SCL:时钟线,由主设备控制,决定数据传输的速率和时序。
  • 上拉电阻:SDA 和 SCL 必须外接上拉电阻至电源(如 VCC=3.3V 或 5V),确保总线在空闲状态下保持高电平;当设备输出低电平时,将总线拉低。
  • 多设备连接:多个主设备和从设备可同时挂接在 SDA 和 SCL 总线上,每个从设备拥有唯一的地址,主设备通过地址选择通信对象。

2. 关键时序信号

注意:

(1)起始信号(start)
  • 条件:当 SCL 为高电平时,SDA 由高电平跳变为低电平。
  • 作用:标志着一次 I2C 通信的开始,所有挂接在总线上的设备都会检测到该信号并准备接收地址信息。

start信号:在时钟线为高电平时,数据线产生一个下降沿,即开始通信

(2)停止信号(stop)
  • 条件:当 SCL 为高电平时,SDA 由低电平跳变为高电平。
  • 作用:标志着一次 I2C 通信的结束,总线恢复空闲状态。

stop信号:在时钟线为高电平时,数据线产生一个上升沿,即通信结束

(3)应答信号(ACK/NACK)
  • 应答(ACK):接收设备在收到 8 位数据后,在第 9 个时钟周期内将 SDA 拉低,表示数据已正确接收。
  • 非应答(NACK):接收设备在第 9 个时钟周期内保持 SDA 为高电平,表示数据接收失败或无需继续接收(如主设备读数据时,最后一个字节用 NACK 结束)
(4)数据传输时序
  • 每传输 1 个字节(8 位),跟随 1 个应答位(共 9 个时钟周期)
  • 数据传输期间,SDA 的电平变化必须在 SCL 为低电平时进行;SCL 为高电平时,SDA 电平必须保持稳定(否则视为起始 / 停止信号)

三、I2C 通信核心流程

I2C 通信以 “主设备发起,从设备响应” 为核心,主要包括主写从读主读从写两种基本流程。

1. 主写从读(主机向从机发送数据)

  1. 主设备发送起始信号(S)
  2. 主设备发送 7 位从设备地址 + 1 位写指令(0),共 8 位;
  3. 从设备接收到地址后,返回应答信号(ACK)
  4. 主设备逐字节发送数据,每发送 1 字节,从设备返回 1 个 ACK;
  5. 数据发送完成后,主设备发送停止信号(P),通信结束。

2. 主读从写(主机由从机读取数据)

  1. 主设备发送起始信号(S)
  2. 主设备发送 7 位从设备地址 + 1 位写指令(0),从设备返回 ACK;
  3. (可选)主设备发送要读取的寄存器地址(如传感器的某个数据寄存器),从设备返回 ACK;
  4. 主设备再次发送起始信号(S)(重复起始信号);
  5. 主设备发送 7 位从设备地址 + 1 位读指令(1),从设备返回 ACK;
  6. 从设备逐字节发送数据,每发送 1 字节,主设备返回 ACK(最后 1 字节返回 NACK);
  7. 数据读取完成后,主设备发送停止信号(P),通信结束。

四、I2C 设备地址

1. 地址编码

I2C 设备地址通常为 7 位(标准)或 10 位(扩展),7 位地址最常用:

  • 7 位地址:高 7 位为设备地址,第 8 位为读写位(0 = 写,1 = 读)
  • 10 位地址:兼容性较差,需特殊时序支持,一般用于设备数量超过 128 的场景

2. 地址类型

  • 固定地址:由设备硬件决定,不可修改(如 EEPROM AT24C02 的固定地址高 4 位为 0101)。
  • 可编程地址:设备通过引脚接高 / 低电平调整部分地址位(如某传感器的 A0、A1 引脚可配置 2 位地址,扩展为 4 个不同地址)。

3. 通用地址

I2C 协议预留了部分通用地址(如 0000000),用于广播通信或设备识别。

五、IMX6ULL 的 I2C 控制器

1. 核心特性

  • 支持主模式和从模式操作;
  • 传输速率最高可达 400kbps(快速模式);
  • 内置 16 字节 FIFO,减少 CPU 干预;
  • 支持中断触发(如发送 FIFO 空、接收 FIFO 满、应答错误等);
  • 可配置 SCL 时钟频率和超时检测。

2. 关键寄存器

寄存器名称地址偏移核心功能
I2Cx_IADR0x00从模式地址寄存器,配置从设备地址
I2Cx_IFDR0x04分频寄存器,通过配置分频系数设置 SCL 时钟频率
I2Cx_I2CR0x08控制寄存器,配置 I2C 使能、主 / 从模式、发送 / 接收模式等
I2Cx_I2SR0x0C状态寄存器,指示总线状态(如应答、忙、FIFO 状态等)
I2Cx_I2DR0x10数据寄存器,发送时写入数据,接收时读取数据(与 FIFO 关联)
I2Cx_IFCR0x14中断标志清除寄存器,清除 I2SR 中的中断标志
I2Cx_I2FDR0x18FIFO 深度寄存器,配置 FIFO 的触发阈值(如接收 FIFO 满阈值、发送 FIFO 空阈值)

六、I2C 配置程序(①AT24C02 EEPROM ②LM75)

1. 硬件引脚配置

IMX6ULL 的 I2C1 对应引脚为 UART4_TX(复用为 I2C1_SCL)和 UART4_RX(复用为 I2C1_SDA),需通过 IOMUXC 寄存器配置引脚复用功能和电气属性。

2. 配置流程

  1. 使能 I2C1 控制器时钟;
  2. 配置引脚复用为 I2C 功能;
  3. 配置 SCL 时钟频率(通过 IFDR 寄存器);
  4. 配置 FIFO(可选,轮询模式可不用);
  5. 使能 I2C 控制器,设置为主模式。

3. 代码实现

①i2c.c

写 write

读  read

main.c

②LM75

LM75温度传感器

引脚编号

名称

功能描述

1

SDA

I²C 数据线

2

SCL

I²C 时钟线

3

OS

过热关断/报警输出​(开漏输出),当温度超限时触发。

5-7

A0, A1, A2

I²C 地址选择引脚。接GND、VCC或悬空,用于设置器件从地址的低3位。

8

VCC

电源正极(2.8V ~ 5.5V)

4

GND

电源地

I²C 地址​:固定高4位为 1001,低3位由A2, A1, A0引脚的电平决定。因此从地址范围为 0x480x4F

注意要在启动代码(start.s)中加入

http://www.dtcms.com/a/390087.html

相关文章:

  • Halcon中的并行编程(二)
  • Gin框架参数绑定完全指南:从基础到实战最佳实践
  • TF 坐标旋转的方向如何确定
  • C++基础(16)——用红黑树封装出map和set
  • 前端编程工具有哪些?常用前端编程工具推荐、前端编程工具对比与最佳实践分享
  • 换网络这事, Comcast 销户了
  • Day26_【深度学习(6)—神经网络NN(1.2)前向传播的搭建案例】
  • 河南省 ERA5 气象数据处理教程(2020–2025 每月均值)
  • IIS短文件漏洞修复全攻略
  • jdk-7u25-linux-x64.tar.gz 安装教程(Linux下JDK 7 64位解压配置详细步骤附安装包)
  • 边界值分析法的测试用例数量:一般边界值分析(4n+1)和健壮性测试(6n+1)计算依据
  • 基于飞算AI的图书管理系统设计与实现
  • Day26_【深度学习(6)—神经网络NN(1)重点概念浓缩、前向传播】
  • 软考 系统架构设计师系列知识点之杂项集萃(151)
  • Python基础 2》运算符
  • docker 部署 sftp
  • 数字ic笔试
  • 武汉火影数字|数字展厅设计制作:多媒体数字内容打造
  • LLM模型的参数量估计
  • STM32H743-学习HAL库
  • 一键防范假票入账-发票识别接口-发票查验接口-信息提取
  • RTEMS 控制台驱动
  • flutter在列表页面中通过监听列表滑动偏移量控制页面中某个控件的透明度
  • linux上升级nginx版本
  • WINCC结构变量/公共弹窗
  • 信息化项目验收计划方案书
  • 1.数据库概述和三种主要控制语言
  • 找到nohup启动的程序并杀死
  • 电磁干扰EMI (Electromagnetic Interference)是什么?
  • python提取域名