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
    +关注

    关注

    1638

    文章

    21852

    浏览量

    609004
  • IIC
    IIC
    +关注

    关注

    11

    文章

    304

    浏览量

    38785
  • 工业控制
    +关注

    关注

    38

    文章

    1485

    浏览量

    86275

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

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

收藏 人收藏

    相关推荐

    为什么IIC总线会难住这么多人?

    为什么 IIC 总线让很多人头疼?其实可以把它想象成一场复杂的 "设备对话游戏",新手容易在这些地方栽跟头:
    的头像 发表于 03-12 10:14 193次阅读
    为什么<b class='flag-5'>IIC</b>总线会难住这么多人?

    在APP FPGA 中通过IIC接口对DLPC910寄存器进行配置遇到的两个问题求解

    在APP FPGA 中通过IIC接口对DLPC910寄存器进行配置,有两个问题想要请教: 1、DLPC910被封装成了FPGA,通过IIC改变它的寄存器的值,掉电后,该值会被保留还是
    发表于 02-25 06:47

    使用FPGA控制DLPC3438,采用IIC协议进行读写操作,读取的数据存在错误,无法正确从寄存器中读取数据怎么解决?

    我使用FPGA控制DLPC3438,采用IIC协议进行读写操作,主要存在如下问题: (1)当写入8个字节到0x2E地址时,通过Xilinx工具ChipScope抓取IIC信号,发现DLPC3438
    发表于 02-24 07:47

    DLPC3479 IIC通讯异常的原因?

    电路是按照TI硬件方案自主设计的电路,但是没有使用Cypress,直接用了一个FPGA通过IIC控制,上电后DLP3479的HOST_IRQ引脚正常拉低,但是遇到如下问题: 1. 按照说明发送
    发表于 02-18 07:04

    请问DS90UB903Q的IIC工作频率必须为100KHz吗?

    ;PCLK=10MHz。芯片完成上电,使用FPGAIIC访问DS90UB903Q的ID,结果为0xFF。这与芯片默认的地址0xB0不符。FPGAIIC频率为20KHz。 经过调试,
    发表于 12-26 07:08

    如何通过FPGA配置CDCI6214?

    我想直接采用FPGA通过IIC接口配置CDCI6214内部寄存器,而不是先写入EEPROM再由EEPROM写入内部寄存器。在这种配置下,RESETN和EEPROMSEL引脚应该如何接?
    发表于 11-11 06:24

    爱芯元智亮相IIC Shenzhen 2024

    近日,国际集成电路展览会暨研讨会(IIC Shenzhen 2024)在深圳福田会展中心拉开帷幕。作为业界最具影响力的系统设计盛会之一,IIC汇聚了国内外电子产业领袖、管理人员、设计精英及决策者。在
    的头像 发表于 11-07 15:41 519次阅读

    MCU通过IIC口控制TLV320AIC3204,请问MCU的IIC接口和TLV320AIC3204的IIC接口对接时需要电平转换吗?

    MCU通过IIC口控制TLV320AIC3204,该芯片的IOVDD接1.8V,MCU的IIC上拉电平是3.3V,请问MCU的IIC接口和TLV320AIC3204的IIC接口对接时
    发表于 10-30 06:02

    IIC信号线需要增加上拉电阻,是因为IIC的IO是什么

    IIC(Inter-Integrated Circuit,即集成电路总线)信号线需要增加上拉电阻,这主要是因为IIC的IO(输入输出)设计采用了开漏(Open-Drain)输出方式。开漏输出方式在
    的头像 发表于 10-06 15:50 1494次阅读

    FPGA通过IIC给TLV320AIC3204写入寄存器,读出来的数据一直是零,为什么?

    FPGA通过IIC给TLV320AIC3204写入寄存器,但好像没写进去,读出来的数据一直是零
    发表于 09-29 06:06

    iic通讯的ardunio的文件下载

    里面很多iic通讯的ardunio的文件
    发表于 07-05 10:55 1次下载

    示波器如何捕获和分析IIC波形?

    示波器捕获和分析IIC(集成电路间通信)波形是一项重要的电子测量任务,特别是在嵌入式系统和微控制器的调试过程中。
    的头像 发表于 05-20 15:08 3909次阅读

    STM8L051F3手册里是否有IIC作为slave的IIC address?

    各位使用过STM8L051F3硬件IIC的朋友们,手册里是否有IIC作为slave的IIC address,并没有看到啊。请大家帮忙告知。谢谢!
    发表于 05-07 07:25

    lis3dh使用IIC通讯,CS引脚悬空也能正常IIC通信吗?

    芯片手册上CS引脚接高电平是IIC通讯,接低电平是SPI通讯;接手的项目中,CS引脚是悬空的,IIC通讯能进行,我想知道悬空能IIC可靠通讯嘛?
    发表于 03-28 09:44

    巨霖科技将亮相IIC Shanghai并发表主题演讲

    活动预告∣巨霖科技将亮相IIC Shanghai 并发表主题演讲
    的头像 发表于 03-27 09:50 486次阅读
    巨霖科技将亮相<b class='flag-5'>IIC</b> Shanghai并发表主题演讲