基于FPGA的 IC 接口的芯片通信设计.docx
基于FPGA的I2C接口的芯片通信设计今天给大侠带来基于EE”的模拟I2C协议设计,由于篇幅较长,分三篇。今天带来第一篇,上篇,FC总线解析以及模拟yc接口程序的基本框架。话不多说,上货。导读I2C(Inter-IntegratedCircuit),其实是I2CBUS简称,中文就是集成电路总线,江一种串行通信总线,使用多主从架构,由飞利浦公司在19砺代为了让主板、嵌入式系统或手机用以连接低速周边设备而发展。Dc的正确读法为“I平方C”(卜SqUared-C"),而“I二C"("ITwoY")则是另一种错误但被广泛使用的读法。自2006年10月1日起,使用Pc协议已经不需要支付专利费,但制造商仍然需要付费以获取HC从属设备地址。I2C简单来说,就是一种串行通信协议,-C的通信协议和通信接且在很多工程中有广泛的应用,如数据采集领域的串行AD,图像处理领域的摄像头配置,工业控制领域的X射线管配置等等。除此之外,由于PC协议占用的IO资源特别少,连接方便,所以工程中也常选用PC接口做为不同芯片间的通信协议。Fc串行总线一般有两根信号线,一根是双向的数据线2A,另一根是时钟线SC1。所有接到Fc总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SC1接到总线的SC1上。在现代虹系统中,有为数众多的IC需要进行相互之间以及与外界的通信。为了简化电路的设计,Phi1ips公司开发了一种用于内部IC控制的简单的双向两线串行总线PC(Inte1-IntegratedCircuitbus)。1998年当推出Fc总线协议2.0版本时,Pc协议实际上已经成为一个国际标准。在进行FPGA设计时,经常需要和外围提供I2C接口的回通信。例如低功耗的CMOS实时时钟/日历芯片PCF8563、1CD驱动芯片PCF8562、并行口扩展芯片PCF8574、键盘/皿驱动器Z1G7290等都提供c接口。因此在FPGA中模拟yc接口已成为FPGA开发必要的步骤。本篇将详细讲解在FPGA芯片中使用VHD1/Vcri1ogHD1模拟Fc协议,以及编写TeStBenCh仿其和测试程序的方法。第一篇内容摘要:本篇会介绍FC总线解析,包括Fc总线概述、Fe协议的基本概念、PC协议的时序要求,还会介绍模拟c接口程序的基本框架等相关内容。一、I2C总线概述下面先对FC协议中有关数据格式和时序的内容进行介绍,这里没有涉及的地方请参考(THEI2C-BUSSPECIFICATIONVERSION2.1JANUARY2000。1.1 I2C总线概述I2C协议作为一个串行总线标准尽管没有并行总线的数据吞吐能力,但是它的以下特点使其有着广泛的应用: 只需要两条总线一串行数据线SDA和串行时钟线SC1; 每个连接到总线的器件都可以通过惟一的地址和一直存在的简单的主/从节点关系软件设定地址,主节点可以发送数据或接收数据; 是真正的多主总线,当两个或更多主节点同时初始化数据传输时,可以通过冲突检迎和仲裁防止数据被破坏; 串行的8位双向数据传输位速率在标准模式下可达100kbits,快速模式下可达40Okbits,高速模式下可达3.4Mbit/s; 片上的滤波盎可以滤去总线数据线上的毛刺波,保证数据完整; 连接到相同总线的IC数量只受到总线的最大电容(40OPF)限制。总线不仅仅是互连的线,还包含系统通信的所有格式和过程。FC总线结构上的特点保证了其应用时的简洁,另外其完备的协议避免了所有混乱、数据丢失和妨碍信息的可能性。1.2 I2C协议的基本概念C总线支持任何IC生产过程(NMoS、CMOS和双极性)。串行数据线SDA和串行时钟线SC1在连接到总线的器件间传递信息。每个器件都有一个惟一的地址作为识别的标志(无论是微控制器、1CD驱动器存储器还是键盘接口),并且都可以发送数据和接收数据。很明显1CD驱动器只需要接收数据,而存储器需要接收和发送数据。图1所示的是一个高性能集成电视的例子。图1高性能集成电视从图1可以看到,应用FC总线是非常方便的。用通俗的话讲FC总线的硬件设计工作就是连接SDA和SC1两条线,依靠Fc协议完成软件工作。在I2C协议中应理解如下的概念。1)主/从节点主节点负责初始化总线的数据传输,并产生允许传输的时钟信号。此时任何被寻址的器件都被认为是从节点。当有多个主节点在总线上传输数据时,每个主节点产生自己的时钟信号。挂接到总线上的所有外围器件、外设接口都是总线上的节点。2)总线上节点的寻址方式在任何时刻总线上只有一个主控器件(主节点)实现总线的控制操作,对总线上的其他节点寻址,可分时实现点-点的数据传送。因此总线上每个节点都有一个固定的节点地址。I2C总线上主节点的地址由软件给定,此地址存放在Fc总线的地址寄存暹中。Fe总线上所有的外围器件都有规范的器件地址。器件地址由7位数字组成,它和1位方向位构成了-C总线器件的寻址字节S1A(S1aveaddress)。器件地址是C总线外围接口器件固有的地址编码,器件出厂时就己给定。数据方向位规定了总线上主节点对从节点的数据传送方向。1.3 FC协议的时序要求1)总线上的数据传递时序I2C总线上数据传递时序如图2所示,具体步骤如下。条件条件图2FC总线的数据传递时序 首先主节点器件发送一个起始信号。 接下来主节点器件发送从节点地址和读写方式,一共8位。其中从节点地址7位,读写方式1位。 与传输地址一致的从节点器件应答(即ACK)0 开始数据传输,传输数据数量不限。每个字节(八位)后面跟接收数据方的应答位。例如主节点器件读取从节点数据,从节点发送数据,主节点应答;主节点器件写数据到从节点,主节点发送数据,从节点应答。 数据传输结束,主节点器件发送一个终止信号结束整个过程。采用yc总线后对传送的字节数没有限制,只要求每传送一个字节后对方回应一个应答位。在发送时首先发送的是数据的最高位(MSB,MostSignificantBit)0每次传送开始有起始信号,结束时有停止信号。在总线传送完一个字节后,可以通过对时钟线(SC1)的控制使传送暂停。例如当某个外围器件接收N个字节数据后需要一段处理时间以便继续接收以后的字节数据,这时可在应答信号后使SC1变为低电平控制总线暂停。如果主节点要求总线暂停也可使时钟线保持低电平控制总线暂停。2)总线上的时序信号I2C总线为同步传输总线,总线信号完全与时钟同步。Fc总线上与数据传送有关的信号有起始信号S、终止信号P、应答信号A以及位传送信号。下面将对这些信号一一介绍。(1)起始信号起始信号(StartCondition)如图3所示。当时钟线SC1为高电平时,数据线SDA从高电平向低电平变化将形成起始信号,启动Fc总线。(2)终止信号终止信号(StopCondition)如图3所示。当时钟线SC1为高电平时,数据线SDA从低电平向高电平变化将形成终止信号,停止PC总线。(3)应答信号如图3所中ACK第9个时钟脉冲对应应答位,相应数据线上低电平时为应答信号,高电平时为非应答信号。TrJUTXJU:OQIIIIIIIIIIIIWU二WUtISIIPI1.JI11_JIIII1III1I!_JSTARTADDRESSRWACKDATAACKDATAACKSTOPconditionconditionMBCdtM图3起始信号和终止信号(4)位传送信号在PC总线启动后或应答信号后的第18个时钟脉冲对应于一个字节的8位数据传送。脉冲高电平期间,数据串行传送;低电平期间为数据准备,允许总线上数据电平变换。二、模拟Fc接口程序的基本框架模拟FC接口程序的基本框架如图4所示。图4模拟OC接口程序的基本框架1)程序接口用于和应用程序连接的接口,将应用程序的数据按照C协议的方式通过SDA传递给外部器件。包括下列内容: c1k_IFPGA外部时钟信号。 rst_I同步重起信号。 arst异步重起信号。 adr_I从节点地址。 dat_I输入数据。 dat_o输出数据。 we写有效信号。 stb_I接口有效信号。 cyc_I有效总线周期输入。ack,o应答信号输出。,inta_o中断信号输出。2)时钟设置寄存器I2C协议提供了3种速度模式:正常速度模式IOOkbit/s、快速模式40Okbit/s、高速模式3.5Mbit/s。SC1输出的时钟信号频率和速度模式一致。程序内部使用5倍SC1信号作为时钟,而FPGA外部时钟需要经过分频得到程序内部使用的时钟。例如:采用正常速度100kbits,FPGA外部时钟为50MHz,则时钟设置寄存器需要设置为(50MHZ/5*10OkHZ-1=99)o3)时钟产生模块时钟产生模块产生4倍SC1频率的时钟信号,它为位传输控制模块中所有同步动作提供触发信号。4)命令寄存器命令寄存器共8位,它决定是否在总线上产生各种时序信号、是否读/写数据,各位表示的含义如表1所示。表1命令寄存器内容位内容描述7STA,产生起始信号6STO,产生终止信号5RD,从从节点读取数据4WR,往从节点写数据3ACK,应答信号2:1保留位0IACK,中断应答信号5)状态寄存器状态寄存器用来显示当前总线的状态,例如是否接收到从节点的应答信号、是否忙、是否在传递数据等,具体内容如表2所示。表2状态寄存器内容位内容描述7RxACK,获得从节点的应答信号。“1”代表没有,代表获得应答信号6STO,产生终止信号5RD,从从节点读取数据4WR,往从节点写数据3ACK,应答信号2:1保留位OIACK,中断应答信号6)数据传输寄存器数据传输寄存器用于保存等待传输的数据。当传递从节点地址信息时,前7位保存从节点地址,最后一位保存读写命令;当传递普通数据时,8位保存一个字节数据。数据传输寄存器具体内容如表3所示。表3数据传输寄存器内容位内容描述7:1传输的下一个字节内容0传输地址时是读写位,其他时候是数据7)数据接收寄存器数据接收寄存器用于保存通过Pc总线接收到的最后一个字节内容,具体内容如表4所示。表4数据接收寄存器内容位内容描述7:0接收到的最后一个字节内容8)字节传输控制模块字节传输控制模块以字节为单位控制C总线的数据传输。这个模块按照命令寄存器设置的内容将数据传输寄存器内容传递到Fc总线的接收端,或者从C总线发送端接收数据并保存到数据接收寄存器中。9)位传输控制模块位传输控制模块以位为单位进行C总线的数据传输和产生各个PC协议命令(如开始、停止、重复开始等)。字节传输控制模块控制位传输控制模块的各种动作。例如读取一个字节数据,位传输控制模块需要执行8个读的命令。10)数据移位寄存器数据移位寄存器保存的数据总是和当前的数据传输相关的。例如在进行读操作时,主节点通过移位寄存器依次通过SDA获得来自Pc发送端的数据,完成后数据拷贝到数据接收寄存器中。在写操作时,数据传输寄存器中的数据拷贝到数据移位寄存器中,然后依次通过SDA将数据传输到FC总线的接收师。黄飞