0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

《基于FPGA的IIC设计》

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2020-11-20 16:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

《基于FPGA 的 IIC设计

设计背景:

IIC 简单来说,就是一种串行通信协议,IIC 的通信协议和通信接口在很多工程中有广泛的应用,如数据采集领域的串行 AD,图像处理领域的摄像头配置,工业控制领域的 X 射线管配置等等。除此之外,由于 IIC 协议占用的 IO 资源特别少,连接方便,所以工程中也常选用 IIC 接口做为不同芯片间的通信协议。

设计原理:

IIC 电路原理图如下:

24LC64 各引脚定义:

1、A0,A1,A2 为 24LC64 的片选信号,由于 IIC 总线可以挂载多个 IIC 接口器件,所以每个器件都应该有自己的“身份标识”,通过对 A0,A1,A2 输入不同的高低电平,就可以设置该 EEPROM 的片选信号。

2、WP 为读写使能信号,当 WP 悬空或者接地,EEPROM 可读可写,当 WP 接电源,EEPROM 只能读不能写。

3、SCL 为 IIC 接口的时钟线。

4、SDA 为 IIC 接口的数据线。

IIC 接口的读写时序:

IIC 接口读写时序分为随机读写(单字节读写)和页面读写(多字节读写),先分析随机读写(Byte Write/Read)时序。Byte Write 时序如下:

时序解读:如果我们要向 EEPROM 写入一个字节,那么必须经过以下步骤:

1. 发送启动信号

2. 发送控制字

3. 接收并检测 EEPROM 发来的应答信号 ACK

4. 发送高字节地址位

5. 接收并检测 EEPROM 发来的应答信号 ACK

6. 发送低字节地址位

7. 接收并检测 EEPROM 发来的应答信号 ACK

8. 发送 8bit 有效数据

9. 接收并检测 EEPROM 发来的应答信号 ACK

10.发送停止信号

Byte Read 时序如下:

时序解读:如果我们要从 EEPROM 读出一个字节,那么必须经过以下步骤:

1. 发送启动信号

2. 发送控制字 1010_A2A1A0_0

3. 接收并检测 EEPROM 发来的应答信号 ACK

4. 发送高字节地址位

5. 接收并检测 EEPROM 发来的应答信号 ACK

6. 发送低字节地址位

7. 接收并检测 EEPROM 发来的应答信号 ACK

8. 发送启动信号

9. 发送控制字 1010_A2A1A0_1

10. 接收并检测 EEPROM 发来的应答信号 ACK

11. 读取一个字节数据

12. 发送 NO ACK 信号

13. 发送停止信号

接下来则需要分析各步骤具体意义:

1.启动信号

在 SCL 保持高电平期间,如果 SDA 出现由高到低的跳变沿,代表启动信号

2. 控制字

我们的控制字为 1010_0000,其中 1010 为 EEPROM 的型号标识,为一组固定的序列,紧接着 A2,A1,A0 就是我们的片选信号,最后一位为读写控制位,低电平代表写,高电平代表读,我们这里首先需要对 EEPROM 写入地址位,所以我们最后一位为 0。

3. 高/低位地址

由于 24LC64 有 64Kbit 的存储空间,所以我们需要 13 位的地址位宽才能寻址所有的存储空间,由于 IIC 协议规定只能以字节形式写入,所以必须将 13 位的地址扩展为 16 位的地址,分为高八位和低八位,多出来的前三位填充任意数据即可,对我们的寻址地址没有影响。

3. 停止信号

4. 应答信号 ACK

应答信号是由数据接收方发出的,当 SCL 为高电平期间,如果监测到 SDA 为低电平,说明有应答信号。

5. 非应答信号 NO ACK

非应答信号也是由数据接收方发出的,当 SCL 为高电平期间,如果 SDA 为高电平,说明有非应答信号。

说明:由于 IIC 总线协议启动和停止信号都是在 SCL 高电平期间发生跳变,这就决定了我们其他数据的改变只能发生在 SCL 低电平期间,在 SCL 为高电平期间,数据必须保持稳定。即在 SCL 低电平改变数据,在 SCL 高电平采集数据。相比于单字节读写,页面读写只是增加了几个状态,具体时序如下,这里和后面的设计代码不做详细论述。

Page Write 时序如下:

Page Read 时序如下:

设计架构图:

本设计用两个按键控制 EEPROM 读写,当写按键按下时,向EEPROM 某一固定地址写入一个字节数据,当读按键按下时,将该地址数据读出,并显示到数码管LED 灯是一个标志信号,LED 亮说明数据写入完毕。设计架构如下:

设计代码:

iic_wr 模块代码:负责进行 IIC 数据的读写

seg7_lut 模块代码,负责数码管显示

IIC 顶层模块代码:

tb 顶层测试模块代码:

仿真图:

随机读写,仿真写时序:

随机读写,仿真读时序:

在仿真时,需要将检测应答的状态跳过,直接向下一状态跳转,观察读写时序,当读写按键按下时,都会产生对应的动作。

责任编辑:lq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1664

    文章

    22502

    浏览量

    639106
  • IIC
    IIC
    +关注

    关注

    11

    文章

    311

    浏览量

    40762
  • 工业控制
    +关注

    关注

    38

    文章

    1696

    浏览量

    92281

原文标题:FPGA入门课程《基于 FPGA 的 IIC设计》

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    行芯科技亮相IIC 2026国际集成电路展览会暨研讨会

    近日,全球集成电路领域的年度标杆盛会——2026国际集成电路展览会暨研讨会(IIC 2026)在上海圆满落幕。
    的头像 发表于 04-02 17:28 590次阅读

    如何使用 VisionFive IIC 读取 SHTC3 数据?

    使用 VisionFive IIC 读取 SHTC3 数据
    发表于 03-27 07:09

    IIC的正确用法

    外部上拉电阻将I2C信号线拉至高电平。 在单片机应用中,就要看你使用的单片机是否有标准的IIC标准接口了,如果你使用了标准的IIC接口,这个接口在使能的时候,引脚进入漏极开路模式,不过有一些单片机内 部
    发表于 01-21 07:28

    【瑞萨RA × Zephyr开发板评测】+模拟IIC实现OLED输出(与硬件IIC输出的失败经验)

    无需额外工具即可编写/调试程序。此外,通过Arduino Uno和Pmod™接口,包括对微控制器所有引脚的标准和通孔访问等,它具有很高的可扩展性。 按照上图进行Oled接线,首先使用IIC硬件接口
    发表于 01-19 22:23

    RA MCU众测宝典 | IIC之【RA2E1】IIC通信的OLED显示

    “RAMCU众测宝典”IIC专题上线啦!这次,瑞萨嵌入式小百科将和大家一起聚焦【瑞萨RA2E1】开发板,一步步玩转IIC通信的OLED显示。从IIC协议的核心原理、FSP中I2CMaster的配置
    的头像 发表于 01-01 10:04 3157次阅读
    RA MCU众测宝典 | <b class='flag-5'>IIC</b>之【RA2E1】<b class='flag-5'>IIC</b>通信的OLED显示

    请问设备连接IIC通信接口需要注意什么?

    设备连接IIC通信接口需要注意什么?
    发表于 12-25 07:47

    请问IIC通信中的主设备和从设备是如何工作的?

    IIC通信中的主设备和从设备是如何工作的?
    发表于 12-25 06:35

    通信协议IIC与SPI最全对比分析

    现今,在低端数字通信应用领域,我们随处可见IIC(Inter-Integrated Circuit)和 SPI(Serial Peripheral Interface)的身影。原因是这两种通信协议
    发表于 12-10 06:04

    英诺达亮相IIC Shenzhen 2025

    2025年11月25日,国际集成电路展览会暨研讨会(IIC Shenzhen)在深圳举办,英诺达创始人及CEO王琦博士应邀出席,并于“全球CEO峰会”发表题为《低功耗设计新范式:突破算力芯片能效瓶颈》的主旨演讲,引发行业广泛关注。
    的头像 发表于 12-03 10:53 710次阅读

    MarketsandMarkets FPGA行业报告,2026~2030 FPGA市场洞察

    2025年10月,全球知名市场研究与商业洞察权威咨询机构 MarketsandMarkets 发布 Field-Programmable Gate Array (FPGA) MarketSize
    的头像 发表于 11-20 13:20 734次阅读
    MarketsandMarkets <b class='flag-5'>FPGA</b>行业报告,2026~2030 <b class='flag-5'>FPGA</b>市场洞察

    基于hbirdv2-sdk的iic 0.96寸lcd调试

    一.前言 简介: 基于hbird-sdk的硬件IIC控制 0.96寸lcd. 二.工程结构 硬件: mcu200t fpga开发板 软件结构: 主要由Makefile main.c
    发表于 10-30 06:20

    请问IIC的设备驱动兼容SMbus协议吗?

    请问IIC的设备驱动兼容SMbus协议么?
    发表于 09-29 09:53

    智多晶FPGA设计工具HqFpga接入DeepSeek大模型

    在 AI 赋能工程设计的时代浪潮中,智多晶率先迈出关键一步——智多晶正式宣布旗下 FPGA 设计工具 HqFpga 接入 DeepSeek 大模型,并推出 FPGA 设计专属 AI 助手——晶小助!这是
    的头像 发表于 06-06 17:06 1745次阅读

    如何从FX2LP设备的EEPROM读取固件(.iic)?

    是否有任何工具可以从 FX2LP 设备的 EEPROM 读取固件(.iic)? 我想备份旧固件来重新编程我的设备,但我丢失了旧的 IIC 固件。
    发表于 05-07 06:37

    IIC接口的IIC_SCL和IIC_SDA引脚做普通GPIO,程序启动不起来怎么解决?

    想用IIC接口的IIC_SCL和IIC_SDA引脚做普通GPIO,两个引脚对应的是GPIO58和GPIO59,更改代码将设置为普通GPIO引脚模式后,程序启动不起来。问:这种情况如何解决,官方支持这种应用吗?
    发表于 05-06 08:59