【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术

FPGA 基础 第 11 期 I2C 总线通信技术 ,选自**ALINX 黑金云课堂 FPGA 免费直播课** 。该课程由 ALINX 资深工程师团队倾力打造,从 0 到 1 系统化教学,帮助每位工程师跨过 FPGA 开发门槛。

🔍 ALINX:关注 ALINX,进入视频号即可查看完整黑金云课堂 FPGA 视频教程。配合笔记学习效果更佳。

一、I2C基本原理

  • 总线特点半双工、同步、多主多从的串行通信总线,仅需两根线:SDA(数据线) 和 SCL(时钟线)。
  • 物理层关键
    • 开漏输出 + 上拉电阻实现"线与"逻辑。
    • 上拉电阻影响上升时间和功耗:标准模式(100kHz)推荐 4.7kΩ,快速模式(400kHz)推荐 2.2kΩ / 1.8kΩ。
  • 协议层核心
    • 起始条件 (START):SCL高电平时SDA由高→低。
    • 停止条件 (STOP):SCL高电平时SDA由低→高。
    • 数据帧:8位数据,高位优先,每字节后跟1位应答位(ACK/NACK)。
    • 地址帧:7位从机地址 + 1位读写位(0=写,1=读)。
  • 通信流程
    • 写操作:START → 地址+写 → ACK → 数据 → ACK → STOP。
    • 读操作:START → 地址+写 → ACK → 寄存器地址 → ACK → 重复START → 地址+读 → ACK → 读数据 → NACK → STOP。

二、EEPROM读写实验(AT24C02)

  • 实验目标通过FPGA对AT24C02进行字节/页写和读操作。

  • 硬件连接SDA/SCL接上拉电阻(4.7kΩ)至5V。

  • 关键注意写入操作后需等待至少 5ms(写入周期),或通过轮询ACK确认。

  • FPGA实现通过状态机模拟I2C时序,控制起始、地址、数据、停止及应答检测。

    // I2C主设备模块定义
    module i2c_master
    (input clk, rst_n,
    inout sda, scl,
    input [6:0] addr);

    // 写EEPROM状态机
    case (state)
    IDLE: begin scl=1; sda=1; end
    START: sda=0; // 起始条件
    ADDR: sda=addr[bit]; // 发地址
    DATA: sda=data[bit]; // 发数据
    STOP: sda=0; scl=1; sda=1; // 停止
    endcase

    // 读EEPROM状态机
    case (state)
    RD_ADDR: sda=addr[bit];
    RD_DATA: begin // 释放SDA
    sda=1'bz; // 高阻态
    data_rd=sda; // 采样数据
    end
    endcase

三、LM75温度传感器读取实验

  • 实验目标FPGA通过I2C读取LM75温度值。

  • LM75要点

    • 地址格式:1001 A2 A1 A0,最多挂载8个设备。
    • 温度寄存器地址:0x00,16位数据,高9位有效(符号位+整数位)。
    • 温度计算公式:实际温度 = (原始数据 >> 7) × 0.5°C
  • FPGA实现状态机先写寄存器地址(0x00),再读2字节数据,最后移位计算温度。

    verilog 复制代码
    // 状态机:写寄存器地址 & 读温度数据
    always @(posedge clk) begin
        case (i2c_state)
            WRITE_ADDR: begin  // 阶段1: 写0x00
                sda_out <= lm75_addr[7:0];
                if (ack) i2c_state <= READ_DATA;
            end
            READ_DATA: begin  // 阶段2: 读2字节
                temp_raw[15:8] <= sda_in; // 高8位
                temp_raw[7:0]  <= sda_in; // 低8位
                i2c_state <= IDLE;
            end
        endcase
    end

四、总结与进阶

  • 核心回顾
    • 双线、开漏、上拉电阻、起始/停止、地址/数据帧、应答机制、主读/主写流程。
  • 常见总线对比
    • I2C:2线,多主多从,低速,常用于传感器、EEPROM。
    • SPI:4线,单主多从,高速,常用于ADC/DAC。
    • UART:2线(TX/RX),异步,常用于上位机通信。
  • 进阶学习
    • 多主设备仲裁、10位地址模式、软件I2C(Bit-Banging)、逻辑分析仪调试。

💡 完整视频讲解可前往 ALINX 视频号进行直播回看

更多细节欢迎关注我们黑金云课堂全年免费直播课黑金云课堂六月直播日历 我们将在每周二、三、四,同步推进 Verilog开发、Vitis开发、Linux开发三大系列,带你从零开始,稳扎稳打掌握 FPGA 开发全流程!

系列 内容定位
Verilog开发 硬件描述语言基础、逻辑设计、仿真调试
Vitis开发 Zynq软硬件协同、外设驱动、网络协议栈
Linux开发 嵌入式Linux系统移植、驱动编写、应用开发
相关推荐
嵌入式分享2 天前
I2C 信号怎么测?从万用表到示波器的完整排查流程
i2c
博览鸿蒙2 天前
FPGA开发使用的语言
fpga开发·fpga
明德扬3 天前
机器人多摄像头如何做FPGA多路视频聚合?
学习·fpga开发·fpga
JoYER_cc3 天前
FPGA 调试实录:LED 闪烁程序从踩坑到仿真验证的完整经验总结
fpga开发
ktd0073 天前
复旦微开发环境搭建流程备忘录
fpga开发
ERROR:993 天前
陈工,试试Agent开发FPGA
fpga开发
威嵌神州3 天前
复旦微 FMQL100TAI 开发 8 问:仿真器、系统、接口高频问题解答
人工智能·嵌入式硬件·fpga开发
北京青翼科技3 天前
青翼基于PCIe的VU13P FPGA信号处理板
fpga开发·fpga开发板·图像处理卡·pcie板卡
szxinmai主板定制专家3 天前
NXP LS1046A 硬件方案: LS1046A+FPGA 异构加速架构实践
大数据·图像处理·人工智能·嵌入式硬件·fpga开发
Riwuarua4 天前
从近似0基础开始FPGA开发 -- part.14 JESD204协议、IP核与嵌入式初始化
fpga开发·jesd