FPGA构造IIC时序——switch1848为例

本文介绍了如何使用FPGA构建IIC时序,以switch1848设备为例,详细阐述了IIC的时序流程,包括开始位、停止位和数据发送的细节。在软件仿真测试中,验证了起始位、停止位的正确性和数据传输的准确性,符合IIC协议及switch1848手册的要求。
摘要由CSDN通过智能技术生成

一.对IIC的时序理解

       IIC接口是一种总线结构,只能有一个主控器件,挂在IIC的两根线上其余都为从器件。主控,发送数据和接收数据都由主器件控制。主控器件要遵从标准的IIC时序和从器件的芯片手册时序。标准的IIC时序的工作流程为:


       首先要发送数据,需要发送一个开始位,然后传送八位数据,从机在第九个时钟会回复一个应答信号主机可以选择继续发送数据和拉一个停止位。这是标准的IIC时序流程,这个时序还要和1848手册上的时序图做个对比。



       主机首先要发送一个起始位,然后发送要访问的7bits的设备ID,在1848电路中是由七个电阻上拉下拉决定ID值的,经过确认,ID值为1100000,但是一次要发送八个数据,最后bit是1就是读请求,0就是写请求。然后第九个时钟芯片在数据线SDA回复一个应答。然后发送24bit的要操作的寄存器值,每8bit从机都会回复一个ACK应答信号,发送完毕之后还要输入32bit的寄存器的数值随后接收应答之后,发送停止位。
       但是IIC时序,也有严格的时序要求。

开始位:


       开始位的时序要求为:在SCL高电平期间,主机将数据线拉低,拉低的整个过程称为IIC的起始位。

停止位:



停止位是SCL高电平器,将数据线拉高,这个拉高的过程称为停止位。

发送数据的时:



       发送数据,时钟沿的要求为,SCL高电平开始接收数据,在高电平达到之前,数据就要求稳定,在时钟SCL的低电平器件,允许数据线发生变化。
二.FPGA的原理设计
  1. 调用Ip核


       控制模块在调用此IP核的时候,需要先装填好所有要发送的值,然后启动一次写使能信号,根据1848手册,共需要写入8个8bit的数据(1的设备地址3个寄存器地址4个数据),所以每次装填好数据之后等待忙线,当检测到IIC总线不忙的时候再启动下一次的写。一共需要写入四套数据,每套是8个8bit的数据。

三.软件仿真测试
1.首先看发送数据的第一个起始位:

起始位在最初的时候scl是高,数据线被主机拉低。我发送的第一个是设备地址C0也就是
1100000 0,数据在SCL上升沿到来之前已经被赋值上,到第九个时钟三态门的dir是低准备接收应答。数值都是对的也是符合时序要求的
2.再看看停止位:

dir为低的时候是三态门方向,可以看到,dir为低接收应答之后,再SCL为高的时候,SDA也拉高。这就开启了停止位。代表一次传输的8个8bit传输结束。
3.总体来看:

busy信号共BUSY了四段每次都传输32个8bit.符合胡佳顺师兄给的寄存器的值,这32个8bit 是:
memory_initialization_radix=16;

memory_initialization_vector=c0 38 60 09 00 0000 09 c0 38 64 08 00 00 00 08 c0 00 00 97 d0 60 00 01 c0 00 00 9f d0 60 00 01;是和STM32发的值是一样的。而且软仿的时候我都是一个一个查的,时序是符合逻辑和满足要发的数据都是对。可以说明,保证FPGA是按时序输出的数据。
四.程序源码
`timescale 1ns / 1ps
//
// Company: 
// Engineer: fzh
// 
// Create Date: 2018/01/23 20:34:23
// Design Name: 
// Module Name: iic_drive
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//




module iic_drive( 
input clk, 
input reset_n,


// 与控制器通信信号
input   [31:0]      slv_reg0,//地址


input   [31:0]      slv_reg1,//reg地址'
input   [31:0]      slv_reg1a,//reg地址'
input   [31:0]      slv_reg1b,//reg地址'


input   [31:0]      slv_reg2,//待发送的数据
input   [31:0]      slv_reg2a,//待发送的数据
  • 9
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值