FPGA实战:从零构建IIC控制器驱动LM75与AT24C128
在嵌入式系统开发中,IIC总线因其简洁的两线制设计和多设备支持能力,成为传感器与存储器件连接的理想选择。本文将带您深入理解IIC协议核心机制,并手把手指导如何用Verilog实现一个稳健的IIC主控制器,最终完成对LM75温度传感器和AT24C128 EEPROM的读写操作。
1. IIC协议精要与设计考量
IIC(Inter-Integrated Circuit)总线由Philips(现NXP)开发,仅需SCL(时钟线)和SDA(数据线)两根信号线即可实现多主多从通信。其核心特征包括:
- 地址寻址机制:7位或10位设备地址,支持同一总线上挂载多个从设备
- 半双工通信:同一时刻只能进行单向数据传输
- 时钟同步:主设备产生时钟信号,从设备可拉低SCL实现时钟扩展
- 应答机制:每个字节传输后跟随ACK/NACK应答位
在设计FPGA实现的IIC控制器时,需要特别注意几个关键时序参数:
| 时序参数 | 标准模式(100kHz) | 快速模式(400kHz) | 单位 |
|---|---|---|---|
| tSU;STA | 4.7 | 0.6 | μs |
| tHD;STA | 4.0 | 0.6 | μs |
| tSU;DAT | 250 | 100 | ns |
| tHD;DAT | 0 | 0 | ns |
| tSU;STO | 4.0 | 0.6 | μs |
提示:实际设计中应留有时序裕量,建议在标准模式按150kHz设计,快速模式按300kHz设计,以应对PCB走线延迟等不确定因素。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 状态机架构设计
一个完整的IIC控制器本质上是一个精密的状态机,需要处理起始条件、停止条件、数据传输和应答等多个状态。我们采用分层状态机设计,将控制流程分为顶层事务状态机和底层比特状态机。
2.1 顶层事务状态机
顶层状态机负责完整的IIC事务控制,典型状态包括:
verilog复制parameter MAIN_IDLE = 'd20; // 空闲状态
parameter MAIN_STAR = 'd21; // 起始条件
