基于FPGA的IIC总线接口实现方法_王前

  • 格式:pdf
  • 大小:187.99 KB
  • 文档页数:4

第30卷 第3期Vol.30No.3微 电 子 技 术M ICROELECT RO NI C T ECHN OLOG Y总第145期2002年6月综 述基于FPGA的IIC总线接口实现方法王 前,吴淑泉,刘喜英(华南理工大学电子与信息学院,广州 510640)摘 要: 本文简述了IIC总线协议,重点介绍了基于现场可编程门阵列(FPGA)的IIC总线接口的系统结构及实现方法。

关键词: IIC总线;FPGA;VHDL中图分类号:TN431.2 文献标识码:A 文章编号:1008-0147(2002)03-21-04Implementation of IIC Bus Based on FPGA TechnologyWANG Qian,WU Shu-quan,LIU Xi-y ing(Colle ge of Ele ctronic&Information Engineering,SCUT,Guangzhou,510640,China)A bstract: In this paper,IIC Bus Protocol is briefly introduced and a method to implement the IIC Businterface using FPGA is emphatically proposed.Keywords: IIC Bus;FPGA;VHDL1 引言 由于IIC总线的连线少,结构简单,可不用专门的母板和插座直接用导线互连各个设备,因而可大大简化系统的硬件设计。

许多半导体厂商都引进了此项总线技术,并推出了不少带IIC总线接口的芯片。

已有不少文献讨论了IIC总线接口的单片机编程技术,本文从另一个角度论述基于FPGA的IIC总线接口的实现方法。

2 IIC接口及通讯协议IIC总线是以双向的数据线SDA和时钟线SCL 二根连线实现了完善的全双工同步数据传送。

总线备用时SDA和SCL都必须保持高电平状态,只有关闭IIC总线时才使SC L箝位在低电平。

所有具有IIC接口的芯片,其SDA线都接到总线的SDA 上,其时钟线SCL接到总线的SCL。

由于IIC总线接口均为开漏(OD)或开集电极(OC)输出,从而总线上所有电路的输出能实现“线与”逻辑功能,故要求IIC系统总线的输出端必须接上拉电阻。

总线的数据传输由主器件控制。

主器件在时钟线(SCL)上产生时钟脉冲,在数据线(SDA)上产生寻址信号、启始信号、停止信号。

任何被寻址 收稿日期:2001-11-30选中的器件都被看成是从器件。

每个具有IIC 接口的设备都有一个唯一的7位地址,以便于主控器寻访。

IIC 总线的数据传输格式如图1所示。

图1 IIC 标准通讯协议 主器件发出启始信号(SCL 为高时,SDA 出现下降沿)后,接着发送寻址信号(由7位的从器件地址和数据方向位R /W 组成,其中R /W =`0'表明数据发送到从器件;R /W =`1'表明主器件读取从器件的数据)注意先发送最高位。

ACK 为应答信号,此时主器件在SCL 线上产生一个应答脉冲(第9个脉冲),当被选中的从器件接收到数据后,从器件将SDA 线拉低,这时主器件可以继续发送数据。

当从器件由于某种原因不产生应答信号或全部数据传送结束后,主控器可产生一个停止信号来终止总线数据传输。

此时SCL 线必须保持高电平,SDA 线出现由低到高的电平变化。

IIC 总线的其他具体要求参见文献[1]。

3 硬件构成及实现方案IIC 总线通过器件地址的硬件设置并通过软件寻址方法,完全避免了对器件的片选线寻址操作。

由于它只由两根线构成,从而可以极方便地构成多机系统和实现系统的外围器件扩展。

一般而言,IIC 总线系统常用于控制而无需高速传送数据的应用场合。

本文通过计算机ISA 插槽与MOTOROLA 公司的SCM20014芯片之间的控制接口为例,说明基于FPGA 的IIC 接口的设计方法。

3.1 系统总体结构设计SCM 20014芯片是一种具有标准IIC 接口的Digital Image Sensor 芯片(以下简称为SENSOR )。

计算机通过对SENSOR 内部的寄存器送初始化数据来控制SENSOR 的工作。

由于SENSO R 内部的寄存器的地址不是连续的,因而一次只对SEN -SOR 内的某一个寄存器通过IIC 进行读/写操作。

整个系统的结构框图如图2所示。

图2 基于FPGA 的IIC 总线接口板主要完成两个功能:①接收计算机送来的相关数据并存储在FPGA 内。

②根据IIC 通讯协议的时序要求完成与SEN -SOR 之间的数据交换。

本设计中IIC 总线接口分为两个模块:IIC 控制模块和IIC 数据传输模块。

为实现计算机对SENSOR 的控制或采集SENSOR 的数据,一方面用C 语言编写对SENSOR 写控制数据和读SENSOR 状态信息的界面程序,另一方面用VHDL 编写实现IIC 总线协议的程序。

根据IIC 通讯协议和SENSOR 的技术资料[4],计算机通过ISA 插槽往SENSOR 写控制数据的顺序是:先送SENSOR 的器件地址,再送SENSOR 内部某个寄存器的地址,最后送控制数据。

因为本系统是一主一从的IIC 总线系统,分配3个计算机的I /O 口22微 电 子 技 术 (0300H 、0301H 、0302H )给FPGA 上的IIC 控制模块,0300H 写器件地址(7位)和R /W 位;0301H 写SENSOR 内部某个寄存器地址;0302H 写这个寄存器的控制字。

以下主要介绍IIC 控制模块和IIC 数据传输模块的实现方案。

本系统是基于MAXPLUS Ⅱ平台开发的,其框图如图3所示,其中:图3 I IC 的结构模块 isadata 是ISA 插槽送给SENSOR 的控制数据或读到的SENSOR 的状态信息;bclk 是ISA 插槽上的时钟信号;isaaddr 是ISA 插槽送来的16位端口地址;ior ,iow 是ISA 插槽上的读/写信号;deviceaddr 是SENSOR 的器件地址(7位)和R /W 位(1位);regaddr 是被控制的SENSOR 内部的某个寄存器地址;regdata 是ISA 送来的寄存器初始化数据;reg _read _data 是从SENSOR 中读到的某个寄存器的内容;reg _read _data _en =`1'表示正在进行IIC 的读过程;sclk 是FPGA 产生的IIC 总线时钟;sdata 是IIC 总线的双向数据线;3.2 IIC 控制模块该模块主要完成FPGA 与ISA 的数据交换。

它主要由3个数据寄存器和1个控制/状态寄存器构成。

其写操作过程是:当isaaddr 为0300H 时,此模块将isadata 上的数据存放到deviceaddrbuf 中;0301H 时,isadata 上的数据存放到regaddrbuf 中;0302H 时,isadata 上的数据存放到regdatabuf 中;0303H 时,ISA 往模块控制/状态寄存器的con -trollerbuf (0)写`1',使IIC _process =`1'开始IIC 传送;当erro =`1'时,controllerbuf (1)=`1',告诉计算机IIC 传输出错,进行出错处理。

读操作过程是:当reg _read _data _en =`1'时,IIC控制模块将reg _read _data 送来的SENSOR 数据存放到regdatabuf 中,再送到isadata 上。

实现IIC 控制模块的技术关键是:①isadata 是双向引脚,我们可利用io r 和iow 做方向控制,当ior =0时,isadata 做输出;当iow =0时,isadata 做输入。

②因为ISA 要在大约4个bclk 后才动作,所以从isadata 输出的数据一定要在4个bclk 后才送到isadata 上。

3.3 IIC 数据传输模块通过IIC 数据传输模块可实现IIC 严格的通讯协议,其关键是严格遵守IIC 的时序要求来发启始信号、停止信号和等待响应信号。

在本设计中当IIC _process =`1'时,完成一个完整的IIC 的读操作过程或写操作过程。

注意一定要在SCL 为高时,SDA 出现下降沿发出启始信号;并且在传完一个字节(8位)后,主器件一定要将SDA 线拉高,等待从器件发出响应信号;在SCL 为高时,将SDA 从低拉到高,发停止信号。

另外,在实现过程中,还要注意SCL 的时钟频率不能太高,否则会影响I IC 传送的稳定性。

(下转第26页)23 第2期 王 前,吴淑泉,刘喜英:基于FPGA 的I IC 总线接口实现方法 4.5 重现性在1.0×10-1-1.0×10-3mol/L的K2SO4标准系列溶液中,反复测定三次,电位波动在±1mV 以内。

其结果如表2所示。

表2 硫酸根离子敏感半导体器件的重现性(在13℃下,I DS=26μA,V DS=26mV测试)浓度(mol/L)电位值(mV)测定次数1 2 310-112961296129710-212631264126510-31230122912304.6 回收率试验用研制的半导体敏感器件,测定在待测溶液中加入不同量的K2SO4溶液,进行标准加入回收率试验,求得回收率在96.3-104.5%之间,平均回收率为100.4%,RSD=±4.1%。

其结果如表3所示。

表3 硫酸钾的回收率试验加入量(mg)测定量(mg)回收率(%)RSD(%)平均回收率(%) 2613.752517.9196.3±4.1100.40 3485.003640.08104.5435.63437.37100.4参考文献:[1]刘冬,陈文灿,赵小兰,林辉概,俞汝勤.科学通报,1996,41(6):519.[2]黄西朝.微电子技术,2001,29(3):24.[3]黄强,方培生.化学学报,1984,42(2):190.[4]李先文,黄强.分析试验室,1998,17(3):91.[5]黄西朝,李先文,黄强,黄战龙.化学传感器,1997,17(4):272.(上接第23页)3.4 FPGA的实现本设计选用ALTERA公司FPGA产品FLEX10KE。

整个设计采用VHDL语言描述,在M AXPLUSI I平台上完成了系统的仿真、综合、映射、布局。

在仿真结果正确后,通过器件编程(即通过编程器将设计下载到实际芯片中)进行系统调试,直到最后实现。

4 结束语本文介绍了一种简易的基于FPGA的IIC总线接口板的设计方法。