碎碎思 · 2021年12月29日

优秀的 Verilog/FPGA开源项目介绍(十三)- I2C

0 I2C介绍

权威官网

https://www.i2c-bus.org/

I2C 总线规范是由飞利浦半导体编写的。这家公司后来成为 NXP Semiconductors,现在它是 I2C 总线规范的维护相关者。

不幸的是,最近的 I²C 总线规范,NXP 文档版本 6.0,2014 年 4 月 4 日不再在 NXP 站点上公开。它位于

https://www.nxp.com/docs/en/user-guide/UM10204.pdf

或者登录后下载:

https://www.nxp.com/webapp/Download?colCode=UM10204&location=null.

History of the I2C Bus

https://www.esacademy.com/en/library/technical-articles-and-documents/miscellaneous/i2c-bus/general-introduction/history-of-the-i2c-bus.html

1 fpga4fun上的I2C

https://www.fpga4fun.com/I2C_2.html

详细的设计过程:
image.png
完善的仿真程序:
image.png

2 alexforencich的verilog-i2c

https://github.com/alexforencich/verilog-i2c

alex的项目无需多说,他的网络和PCIe都是完成度等方面首屈一指。
我们先看下这个项目包含哪些文件:

axis_fifo.v             : AXI stream FIFO
i2c_init.v              : Template I2C bus init state machine module
i2c_master.v            : I2C master module
i2c_master_axil.v       : I2C master module (32-bit AXI lite slave)
i2c_master_wbs_8.v      : I2C master module (8-bit Wishbone slave)
i2c_master_wbs_16.v     : I2C master module (16-bit Wishbone slave)
i2c_slave.v             : I2C slave module
i2c_slave_axil_master.v : I2C slave module (parametrizable AXI lite master)
i2c_slave_wbm.v         : I2C slave module (parametrizable Wishbone master)

i2c_init module

通过 I2C 进行外设初始化的模板模块。当一个或多个外围设备(即 PLL chips, jitter attenuators, clock muxes,PLL 芯片、抖动衰减器、时钟多路复用器等)需要在上电时初始化而不使用通用处理器时使用。

i2c_master module

带有 AXI 接口的 I2C 主模块。

i2c_master_axil module

具有 32 位 AXI lite 从接口的 I2C 主模块。

i2c_master_wbs_8 module

带有 8 位 Wishbone 从接口的 I2C 主模块。

i2c_master_wbs_16 module

带有 16 位 Wishbone 从接口的 I2C 主模块。

i2c_slave module

带有 AXI 接口的 I2C 从模块。

i2c_slave_axil_master module

带有参数化 AXI lite 接口的 I2C 从模块。

i2c_slave_wbm module

带有可参数化 Wishbone 主接口的 I2C 从模块。

3 opencores i2c

https://opencores.org/projects/i2c
https://opencores.org/projects/i2c_master_slave_core
https://opencores.org/projects/i2cslave
https://github.com/trondd/oc-i2c

特征

  • Both Master and slave operation
  • Both Interrupt and non interrupt data-transfers
  • Start/Stop/Repeated Start generation
  • Fully supports arbitration process
  • Software programmable acknowledge bit
  • Software programmable time out feature
  • programmable address register
  • Programmable SCL frequency
  • Soft reset of I2C Master/Salve
  • Programmable maximum SCL low period
  • synthesis core

综合结果

各种目标的按钮合成结果。

A54SX16ATQ100-std:352Modules@58MHz
FLEX : EPF10K50ETC144-3: 294LCELLs@82MHz
ACEX : EPF20K30ETC144-3: 257ATOMs@74MHz
Spartan-II:2S15CS144-5:229LUTs@82MHz
Virtex-E:XCV50ECS144-8:230LUTs@118MHz

4 freecores i2c

https://github.com/freecores/i2c
https://github.com/freecores/i2cslave

image.png
虽然没有详细的 文档,但是整个项目还是很完整的,I2C整个逻辑也不复杂即使没有文档,使用这个项目也不是难事。

5 hhping i2c_code

https://github.com/hhping/i2c_code

这套I2C代码已经经过板上验证。在九州探测器版验证过通过。

6 BNUGYX Verilog_i2c_eeprom

https://github.com/BNUGYX/Verilog_i2c_eeprom
https://github.com/mcgodfrey/i2c-eeprom

I2C通信实现eeprom读写
先写入固定字符,再读出此字符,显示在数码管上

7 splinedrive i2c_sdd1306_framebuffer

https://github.com/mcgodfrey/i2c-eeprom

这是一个基于 fpga 的 i2c ssd1306 oled 设计!它包含一个 i2c 主控、帧缓冲区、字体渲染单元、rx 单元......

只需将 115200 波特的数据通过串口发送到 fpga,这些字符就会显示在 oled 上!

8 tmatsuya i2c_edid

https://github.com/tmatsuya/i2c_edid

用于 EDID(扩展显示识别数据)IP CORE 的 I2C ROM

说明

  • 该项目是使用 I2C DDC 协议将显示模式传输到视频源的目标设备。
  • 适用于 HDMI 相机捕获设备或视频切换器开发人员

特点

  • 支持 I2C 从机协议和 EDID(扩展显示识别数据)ROM
  • 8 位寻址(最大 256 字节)

目录结构
/boards/ 顶层设计文件、约束文件和 Makefiles /cores/ 核心库 /software/ 软件和数据文件

总结

I2C相关的开源项目很多很多,很多大佬独立写个I2C总线应该是很容易,头两个项目是使用最常见的项目,无需过多介绍。后面几个项目针对EDID、EEPROM特殊场景的项目,经过上面一些项目的介绍,相信大家对于FPGA实现I2C应该更有信心吧。

原文:OpenFPGA
作者:碎碎思

相关文章推荐

更多FPGA技术干货请关注FPGA 的逻辑技术专栏。
推荐阅读
关注数
10506
内容数
512
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息