初学i2c协议

主要从两种协议的读取操作,数据流向叙述;

i2c协议:有两个信号分别是i2c_sda和i2c_scl。

inout:i2c_sda;

output:i2c_scl。

串行输入串行输出;对i2c有两种操作,一种是FPGA对i2c写数据,另一种是FPGA从i2c读取数据。

当FPGA对i2c设备写数据时,i2c_sda为一个 输出信号,写操作过程如下:

1 起始信号:在i2c_scl为高电平期间,i2c_sda从高电平变为低电平;即i2c_scl==1&&i2c_sda:1>>0;

2 写从机设备的物理地址:从机设备地址为7位,后面补0表示主机向从机写数据;后面补1表示主机从从机 读取数据;

3 从机向主机发送应答信号ack==0,表示从机告诉主机已经准备好接收数据;

4 主机向从机发送要操作的寄存器地址8位;

5 从机向主机发送应答信号ack==0,表示从机告诉主机已经准备好接收数据;

6 主机向从机写数据;

7 从机向从机发送应答信号ack==0,表示从机告诉主机已经准备好接收要发送的数据;

8 结束信号:i2c_scl==1期间,i2c_sda为 上升沿。

如下图所示为主机向从机 写数据操作的时序图:

主机向从机写数据的过程:是将并行的数据转成串行数据输出;如:待写入的数据

input[7:0]   i2c_wr_data;

数据流向:{I2C_SLAVE_ADDR,1'b0,i2c_reg_addr,i2c_wr_data}>>shift_w_reg>>i2c_sdata_out>>i2c_sda;

当FPGA从i2c设备读取数据时,此时,i2c_sda作为输入信号,读操作过程如下:

1 起始信号:i2c_scl==1期间,i2c_sda为下降沿;

2 主机写从机设备的物理地址,为7位,在后面添加0表示主机向从机写数据;

3 从机向主机发送应答信号;

4 主机向从机写要操作的寄存器地址,为8位;

5 从机向主机发送应答信号;

6 主机再次向从机发送起始信号Sr(Repeated started)

7 主机向从机写7位设备物理地址,并在后面添加1,表示主机要从从机读取数据;

8 从机向主机发送应答信号;

9 主机读取从机中的数据;

10 发送完毕后,主机再次占用i2c_sda 信号线发送一个非应答信号ack==1;

11 主机发送一个停止信号给从机结束整个读取过程。

白色:表示从机正在控制i2c_sda 总线;

灰色:表示主机正在控制i2c_sda 总线。

主机从从机读取数据,是将串行数据转成并行数据读入主机,此时,i2c_sda是主机的输入信号,数据流向如下:

output[7:0]   i2c_rd_data;

i2c_sda>>i2c_sdata_in>>{shift_r_reg[I2C_DATA_BYTE*8-2:0],i2c_sdata_in}>>i2c_rd_data.

在实际操作时, 需要添加启动i2c总线的信号i2c_go,命令模式信号i2c_cmd,应答信号i2c_ack,从机设备地址,要操作的从机寄存器地址等。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值