您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > I2C总线控制及基于FPGA的实现
I2C总线控制及基于FPGA的实现[摘要]根据串行扩展的特点,详细描述了12C总线的结构、原理和工作过程,通过举例介绍了通过FPGA设计实现12C总线的基本思想,并给出了xlinxise6.1环境下仿真程序部分代码和ModelSim软件下的仿真时序图。[关键词]12C总线;VHDL;FPGA引言:在开发FPGA中,利用EDA工具设计芯片实现系统功能已经成为支撑电子设计的通用平台,并逐步向支持系统级的设计方向发展,各分立元件的连接和接口扩展就显得十分重要。扩展的方法有两种:一种是并行总线,另一种是串行总线。由于串行总线连线少,结构简单,往往不用专用的母板和插座而直接用导线连接各个设备即可。因此,采用串行总线大大简化了系统硬件设计。尤其是12C串行总线,它是具备多主机系统所需的包括裁决和高低速设备同步等功能的高性能串行总线,以其接口简单、使用灵活等突出优点在数字系统中获得了广泛的应用。1、几种串行总线虽然现代的微控制器和FPGA提供了大量的120插脚,并且SMD技术(表面安装器件)也在一块几英寸大小的PCB上提供了尽可能多的插脚,但这并没有影响串行总线连在电路板分立元件连接方面的应用。除传统的总线如12C和SPI(串行外围接口)之外,还有在温度计和智能按键等的灵敏传感器方面广泛应用的Dallas1-Wire单总线等。SPI通过快速ADC、DAC、E2PROM设备连接微控制器,分离的输入输出插脚保证了数据高速率。由于协议中并没有内嵌式地址,因此总线上各个设备必须支持片选信号,每个从设备有一个被选输入,主设备必须具有与其从属设备数量一样多的被选输出,或者必须有一个外部解码器。SPI允许简单地连接移位寄存器之类的非智能外围设备,连锁式的移位寄存器可以实现大容量输入输出扩展器。Dallas单总线上的连接则必须具备高智能水平。在这个协议中,单总线通常要求外接一个4.7kΩ左右的上拉电阻,用持续1到15μs的低电平来传送1,用持续60μs到1201μs的低电平来传输0。指令和数据通过这种方式传输到从设备。控制器为了同步发送一个“1”,从设备将其中一部分转换为“O”,数据通过这种方式从设备传输至控制器。Philips公司早在1980年开发了I2C标准,I2C总线是关注速度和复杂程度之间的很好的折衷,当时只定义了100kHZt和400kHZ两个传输速率,但并没有规定单个比特的长度,所以在一个没有诸如中断限制的微控制器的系统中用软件驱动I2C设备很容易实现。I2C总线只使用两根I20,就可以对一系列的I2C器件进行控制,节省了I/O口,受到越来越多工程师的青睐。由于电接口的集电极开路特性,从设备可以在任意时刻连接或断开而不会影响总线上的其它设备。I2C总线还包括了一个利用线与连接的仲裁机制,这就意味着真正的多主体总线可以实现,在特定时间内只有一个主控端能够取得总线控制权。实际上,如果两个甚至更多的主体试图在总线上传递信息(第一个产生“1”的同时,其他主体产生“0”),它们将会失去主控权。同时,如果有一台从设备是低速设备,它将抑制时钟线路延缓总线上所有事务。基于以上原因,12C总线是一个控制FPGA器件的很好选择,可以在FPGA上通过自定义逻辑来实现从接口。2、I2C总线详解I2C是英文“InterIntegratedCircuit”的缩写,中文意思是“集成电路之间”。I2C总线就是集成电路之间传送时钟脉冲与数据的公用线路。采用I2C总线控制就是将微处理器的SCL(串行时钟)、SDA(串行数据)总线与其它集成电路或存储器连接起来,通过总线来交换信息,实行控制。I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,从而减少了电路板的空间和芯片管脚的数量,进而降低了互联成本。I2C总线的男一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主控设备(在任何时间点上只能有一个主控设备)。一个主控设备能够控制信号的传输和时钟频率。有大量的微处理器外围设备可以附加到上面,通过120扩展器(如PCF8574)来起动显示控制器和E2PROM,通过一个12C器件关联的存储器总量没有限制,可以从几个字节到256kb甚至更多。每个I2C器件都拥有一个唯一的7-bitI2C地址,让主控端知道通信传输的对象是谁,通常7-bit中四个较重要的位(MSB――theMostSignificantBit)为固定的,并依器件本身性质的分类区分,如1010即代表串行E2PROM。而其他三个较不重要的位(LSB),即A2、A1与A0则可以通过硬件电子引脚设定,并取得高达8个不同的12C地址组合,因此在同一个12C总线上可以有8个相同形式的器件运作。这些引脚固定在Vcc高电平代表逻辑1,固定在接地低电压则代表逻辑O,7bit的选址方式可以实现总线上128个器件的组合,但由于部份地址设定保留给特殊指令应用,因此实际上最高器件数大约为I20个。对连接到同一总线上的从设备数量的限制是:总线的电容总和必须低于400pF,大约20到30个器件或10m的传输长度,以符合上升与下降时间的要求。同时并联有双向12C总线缓冲器用来隔离总线上不同接线的电容,以实现更大(2000pF)与更长(2000m)的总线结构。许多微控制器(如CypressCY7C68013和MicrochipPICl8Cxxxfamily)在芯片上包含了一个12C总线主外设,如果没有硬件接口,它可以控制一对I/O插脚用软件来实现。而且许多编译器提供了驱动程序来控制I2C设备,无论设备有没有硬件接口。图1例示了在CCSc编译器如何对PIC(外围接口控制)微处理器上的I2C外围设备的声明。I2C库包含了实现I2C总线的函数,#USEI2C保存I2C_START,I2C_STOP,I2C―READ,12C_WRITE和I2CPOLL函数的结果直到下一个I2C进程到来。软件作用在NOR―FORCE_sW特定时产生。I2C总线支持三种传输速度。早期设备的初始速率很低,支持100KHZ的低速模式和400KHZ的快速模式,目前已经扩展了3.4MHZ的高速模式,而且被更多的新设备所支持。其它选项用来规定I2C接口是否为主(从)接口,规定了采用硬件接口还是软件仿真以及插脚是否被时钟和数据所用。3、12G总线连接12C总线中的两根线通常称为SDA(串行数据)和SCL(串行时钟),它们分别用来传输数据和时钟信号。连接到这两线的设备必须禁止ESD(Electro-Staticdischarge静电放电)保护二极管嵌位输入线信号到其本身的电源电压。这使I2C总线能被不同电源电压的设备共享。SDA和SCL上拉电阻必须连接到5V±10%。每个设备都要包含片内滤波器以消除尖峰信号并改进总线整体健壮性。如图2所示。I2C总线允许多主体配置,一个主体要释放总线必须完全停止操纵SCL线。如果一个系统只有一个主设备且从设备是不要求时钟扩展的高速设备,则SCL上的上拉电阻可以取消且主设备可以用低电平和高电平驱动SCL线路。二线协议是基于起、止状态识别的。起始信号就是在SCL线为高时SDA线从高到低;停止信号则是在SCL线为高时SDA线从低到高;应答信号是在SCL为高时SDA为低;非应答信号相反,是在SCL为高时SDA为高。传输数据“0”和数据“1”与发送应答位和非应答位时序图是相同的(图3)。在其它所有时刻,只要SCLD在数据转移阶段是高电平,SDA就必须保持稳定。SDA起动时间(SCL上升)的定义基于总线标准速率:在100kHZ总线上为200ns,在400kHZ总线上为100ns。在一个起止状态之间的数据字节数没有限制,唯一的要求是每个数据字节必须是得到确认的,确认状态是在SDA上每一个8位字节后面的第9位用低电平表示,在一个写周期中,从设备在数据字节中提供确认信息;在一个读周期中,主设备提供除最后一个数据字节外的所有确认信息。丢失认证信息会导致事务终止。图3画出了I2C总线上几个基本信号的时序,包括起始信号、停止信号、应答信号、非应答信号以及传输数据“0”和数据1”的时序。图3还表不了一个完整的数据传送过程,一个在I2C总线发送起始信号后,发送从设备的7位寻址地址和1位表示这次操作性质的读写标识位,在有应答信号后开始传送数据,直到发送停止信号。数据是以字节为单位的。发送节点每发送1个字节就要检测SDA线上有没有收到应答信号,有则继续发送,否则将停止发送数据。4、开发工具技术进步和高性能PC机的广泛使用使工程人员和电子爱好者也能设计自定义芯片,而不仅仅只有大公司才能做到。几乎所有FPGA厂商已经开发了自己的综合设计软件包。有的已经在网络上发布了免费使用的软件包。Xilinx的免费WebPACK支持方案设计(图表、VHDL和Verilog)并用功能强大的MentorGraphicsModelSim进行逻辑仿真。后面的设计很容易用虚拟示波器、逻辑状态分析软件和虚拟测试点等虚拟工具验证。Xilinx软件包允许将设计移置到它的不同芯片系列。包括Virtex,Spartan-II,Spartan-3,CoolRunner和XC9500CPLDs。很容易就微处理器外围设备移置到大的FPGA设备或普通的CPLD设备上。Spar-tan-II系列以较低的价位提供了足够的逻辑门数,I/O资源允许直接连接到12C总线。方案也可以移置到新的partan-3系列,不过由于这个系列不能禁止ESD保护,I/O配置必须重新定义。Spartan-II具备禁止I/O缓冲器内上拉电阻和ESD保护二极管的能力。这使芯片因插脚能承受外部电阻上拉到5V电压而可以在多电压系统中使用。而Spartan一3系列的ESD保护二极管不能被禁止。这在单一电压系统中没有影响,但在多电压系统中,必须用一对MOSFET(金属氧化物半导体场效应晶体管)晶体管分离电压。图4采用两个N通道MOSFET将12C分离到5V和3.3V两个范围。5.FPGA设计应用举一个简单的例子,本例(图5)中Revision为一个8位只读寄存器,只有l位输出。12C总线模块植入PGA,只需用两个引脚加上系统时钟。如图左下角所示,利用I/O缓冲器的上拉电阻和引脚电容就可以产生一个低精度的振荡器作为内部逻辑时钟。该FPGA设计举例包括两路12C总线端口模块,外部时钟模块和外部时钟专用接口缓冲器,一个可读寄存器,一个驱动测试LED(发光二极管)的一位可写寄存器(图5)。12C总线模块提供两路8位总线,一路输入(I2CIN(7:0)),一路输出(12COUT(7:0))。(本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。)
本文标题:I2C总线控制及基于FPGA的实现
链接地址:https://www.777doc.com/doc-5465740 .html