IIC 接口

IIC总线概述

IIC总线简介

IIC总线是Philips公司在八十年代初推出的一种串行、半双工总线,主要用于近距离、低速的芯片之间的通信;IIC总线有两根双向的信号线一根数据线 SDA 用于收发数据,一根时钟线 SCL 用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用。

IIC总线是一种多主机总线,连接在IIC总线上的器件分为主机和从机主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备冲突检测和仲裁的功能来防止错误产生;每个连接到IIC总线上的器件都有一个唯一的地址(7bit),且每个器件都可以作为主机也可以作为从机(同一时刻只能有一个主机),总线上的器件增加和删除不影响其他器件正常工作;IIC总线在通信时总线上发送数据的器件为发送器,接收数据的器件为接收器;

在这里插入图片描述

IIC总线通信过程

  1. 主机发送起始信号启用总线;

  2. 主机发送一个字节数据指明从机地址后续字节的传送方向

  3. 被寻址的从机发送应答信号回应主机;

  4. 发送器发送一个字节数据;

  5. 接收器发送应答信号回应发送器;

    … …(循环步骤4、5)

  6. 通信完成后主机发送停止信号释放总线。

IIC总线寻址方式

IIC总线上传送的数据是广义的,既包括地址,又包括真正的数据。

主机在发送起始信号后必须先发送一个字节的数据,该数据的高7位为从机地址,最低位表示后续字节的传送方向,'0’表示主机发送数据,'1’表示主机接收数据;总线上所有的从机接收到该字节数据后都将这7位地址与自己的地址进行比较,如果相同,则认为自己被主机寻址,然后再根据第8位将自己定为发送器或接收器。

在这里插入图片描述

IIC总线信号实现

起始信号、停止信号

  • SCL为高电平时, SDA由高变低表示起始信号

  • SCL为高电平时, SDA由低变高表示停止信号

  • 起始信号和停止信号都是由主机发出,起始信号产生后总线处于占用状态停止信号产生后总线处于空闲状态

在这里插入图片描述

字节传送与应答

IIC总线通信时每个字节为8位长度,数据传送时,先传送最高位,后传送低位,发送器发送完一个字节数据后接收器必须发送1位应答位来回应发送器即一帧共有9位

在这里插入图片描述

同步信号

IIC总线在进行数据传送时,时钟线SCL为低电平期间发送器向数据线上发送一位数据,在此期间数据线上的信号允许发生变化,时钟线SCL为高电平期间接收器从数据线上读取一位数据,在此期间数据线上的信号不允许发生变化,必须保持稳定。

在这里插入图片描述

IIC典型时序

  1. 主机向从机发送数据

在这里插入图片描述

  • 停止发送有两种情况:①主机不想发了;②从机不想应答了。但是终止信号只能是主机发出
  1. 从机向主机发送数据

在这里插入图片描述

  1. 主机先向从机发送数据,然后从机再向主机发送数据

在这里插入图片描述

  • 变更操作方向的时候不用发停止信号,如果发了停止信号再变更,有可能总线使用权就被别的主机抢走了

注:阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送;A表示应答,A非表示非应答,S表示起始信号,P表示终止信号
别的主机抢走了

注:阴影部分表示数据由主机向从机传送,无阴影部分则表示数据由从机向主机传送;A表示应答,A非表示非应答,S表示起始信号,P表示终止信号

IP设计

IP 例化界面

IP 接口

信号方向说明
i2c_scl_ooutputi2c 时钟信号
i2c_sda_iinputi2c 数据输入信号
i2c_sda_ooutputi2c 数据输出信号
i2c_sda_toutputi2c 数据三态使能信号,高电平为输入,低电平为输出
i_wr_eninput写使能
i_dev_addr[6:0]input从设备地址
i_addr[ADDR_W-1:0]input读写操作地址,支持位宽8/16bit
i_wdata[7:0]input写数据。单字节写操作时写使能在 o_wr_sucess 置位时拉低;多字节写操作时写数据在 o_wr_sucess 置位时更新数据
i_rd_eninput读使能。若要停止读操作时,在 o_rvalid 置位后拉低读使能信号
o_rvalidoutput读数据有效指示,高脉冲有效
o_rdata[7:0]output读数据
o_wr_sucessoutput完成一个字节写操作指示,高脉冲有效
o_wr_nackoutput写操作未响应指示

若要变更操作方向,在写使能或者读使能信号拉低前置位读使能或者写使能,这样可以避免发送停止信号,导致总线使用权被抢走。

IP 状态机

在这里插入图片描述

IP 验证

使用 24LC04 EEPROM 进行读写测试。

  • 24LC04 EEPROM 容量为 4Kbit(2*256*8bit),由 2 个 256 byte 的 block 组成,通过 IIC 总线进行通信。

  • 设备地址为 7‘b1010xxx,bit[0]表示 block 地址选择,对应两个 block,操作地址为 8bit,对应 256 byte 数据。

  • 支持页操作,长度为 16 byte,超过该长度会回卷

  • 25
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FPGA的花路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值