【黑金云课堂】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系统移植、驱动编写、应用开发
相关推荐
Hello-FPGA2 小时前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发
明德扬2 小时前
AD采集卡应用示例交流:从传感器采集到高速信号验证
fpga开发
傻童:CPU2 小时前
PS与PL之间的交互
fpga开发
神奇元创14 小时前
商用级光路加速卡:大模型推理的极速落地方案
python·神经网络·fpga开发·dsp开发
FPGA小徐1 天前
深度神经网络FPGA设计进展、实现与展望
fpga开发
FPGA小徐1 天前
FPGA数字信号处理(一)数字混频实现详解|NCO/DDS原理、有符号数避坑、直流滤除工程实战
fpga开发
Passionate.Z1 天前
基于FPGA的CLAHE自适应限制对比度直方图均衡算法硬件verilog实现
图像处理·嵌入式硬件·算法·fpga开发·fpga
Szime2 天前
AD9694 国产替代方案:四通道高速 ADC 在通信与雷达项目中的选型参考
单片机·嵌入式硬件·fpga开发
kaizq2 天前
在线MakerChip虚拟FPGA设计动态仿真实践
fpga开发·mulerun·makerchip·virtualfpgalab·在线动态仿真·imacopilot