串行总线和并行总线比较具有结构简略、占用引脚少、成本低的长处。常见的串行总线有USB、IEEE1394、I2C等,其间I2C总线具有运用简略的特色,在单片机、串行E2PROM、LCD等器材中具有广泛的运用。
I2C(Inter IC BUS)是Philips公司开发的用于芯片之间衔接的总线。 I2C总线用两根信号线进行数据传输,一根为串行数据线(SDA),另一根为串行时钟线(SCL)。I2C总线答应若干兼容器材(如存储器、A/D转化器、D/A转化器、LCD驱动器等)同享总线。I2C总线理论上能够答应的最大设备数,是以总线上一切器材的总电容(其间包含连线自身的电容和衔接端的引出电容)不超越400pF为限,总线上一切器材依托SDA线发送的地址信号寻址,不需求片选线。任何时刻总线只能由一个主器材操控,各从器材在总线闲暇时发动数据传输。I2C总线数据传输的规范形式速率为100kbps,快速形式速率为400kbps,高速形式速率为3.4Mbps。
用VHDL和CPLD规划数字体系具有传统办法无与伦比的优胜性,它已经成为大规模集成电路规划最为有用的一种手法。为简略起见,本文选用VHDL规划规范形式的I2C总线操控电路。
1 I2C总线上的数据传输
I2C总线包含时钟线SCL和数据线SDA两条连线,SCL由主机发生。I2C总线的数据传输流程如图1所示。其传输进程为:首要主机发生开端位,然后传送榜首个字节。8位数据中首要传送的是数据的最高位MSB,最低位LSB为读写指示位,1表明主机读,0表明主机写,高7位地址可使主机寻址128个从器材。
从机收到榜首字节数据后发呼应位,主机收到呼应位后接着发送第二个字节的数据。数据发送完毕后发生完毕位,数据传送完毕。数据传送时,只要时钟SCL为低电平时SDA才答应切换,SCL为高电平时SDA有必要安稳,此刻SDA的电平便是总线转送的数值。
在SCL为高电平时,SDA线由高到低切换表明开端位,SDA线由低到高切换表明中止位。开端位和中止位由主机发生,在开端位发生后总线处于忙状况,中止位呈现并经过必定时刻后总线进入闲暇状况。发送器每发送一个字节后,接纳器有必要发生一个呼应位。呼应位的驱动时钟由主机发生则接纳器将SDA线拉低发生呼应位。假如主机是接纳器,则接纳最终一个字节时,呼应位为1,告诉从机完毕发送,不然呼应位为0。当从机不能呼应从机地址(例如它正在履行一些实时函数,不能接纳或发送)时,或呼应了从机地址但在传输一段时刻后不能接纳更多的数据字节,此刻从机能够经过呼应位为1告诉主机中止当时的传输,所以主机发生一个中止位中止传输,或许发生重复开端位开端新的传输。
SDA线上传送的数据有必要为8位,每次传送能够发送的字节数量不受约束。假如从机要完结一些其他功用(例如履行一个内部中止服务程序)才干接纳或发送下一个数据字节,则从机能够使SCL保持低电位,迫使主机进入等候状况。从机准备好接纳或发送下一个数据字节时,开释SCL,数据传输持续。
SDA和SCL都是双向线路,运用时经过上拉电阻衔接到电源。总线闲暇时这两条线路都是高电平,衔接到总线的器材的输出级有必要是漏极开路或集电极开路,这样总线才干履行“线与”的功用。
主机发完榜首个字节后,数据传输方向的改动或许存在三种状况。(1)传输方向不变,如主机向从机写;(2)传输方向改动,如主机从从机读数据;(3)传输方向改动屡次,如主机对从机进行屡次读写。
2 时钟同步与裁定
I2C总线在任何时刻只能有一个主机,当I2C总线一起有两个或更多的器材想成为主机时,就需求进行裁定;时钟同步的意图便是为裁定供给一个确认的时钟。时钟SCL的同步和裁定经过“线与”来履行,SCL的低电平时刻取决于低电平时刻最长的主机,高电平时刻取决于高电平时刻最短的主机。
裁定进程在数据线SDA线上进行,当SCL为高电平时,假如SDA线上有主机发送低电平,则发送高电平的主机将封闭输出级。由于总线的状况和自身内部不一样,所以发送低电平的主机赢得裁定。裁定能够持续多个位,在实践通讯进程中,裁定的榜首阶段比较地址位,假如多个主机寻址同一个从机,则持续比较数据位(主机是发送机)或呼应位(主机是接纳机)。由于I2C总线上的地址和数据由赢得总线的主机决议,因而裁定进程中不会丢掉信息。假如一个主机具有从机功用,则当它失掉裁定时,有必要当即切换到从机状况,由于它或许正在被其他主机寻址。
3 I2C总线操控器规划
I2C总线操控器的首要作用是供给微操控器(μC)和I2C总线之间的接口,为两者之间的通讯供给物理层协议的转化。在串行运用体系中,外围器材(如串行E2PROM、LCD、实时钟等)衔接在I2C总线上,再经过I2C总线操控器和μC连起来。其典型的运用,如现在许多彩电的操控体系都根据I2C总线。为了使规划明晰明晰,本文将操控器的规划分红两部分。一部分为微操控器(μC)接口,另一部分为I2C接口,如图2所示。
μC接口部分首要包含状况寄存器(MBSR)、操控寄存器(MBCR)、地址寄存器(MADR)、数据寄存器(MBDR)和地址译码/总线接口模块。状况寄存器指示I2C总线操控器的当时状况,如传输是否完结、总线是否忙等信息。操控寄存器是μC操控I2C总线操控器的首要途径,经过置0/1完结I2C总线操控器使能、中止使能、主/从(Master/Slave)形式挑选、发生开端位等操作。地址寄存器保存着I2C总线操控器作为从机时的地址。数据寄存器用于保存接纳的数据或是待发送的数据。
I2C接口的中心是主状况机,它操控着整个I2C接口的运作。和I2C总线直接相连的模块有开端/中止位发生模块、I2C Header寄存器、I2C数据寄存器和裁定及开端/中止位检测模块。当操控器是Master时,开端/中止位发生模块用于在I2C总线上发生开端位和中止位;I2C数据寄存器用于保存总线上传送的数据;裁定及开端/中止位检测模块的作用是履行裁定,并检测I2C总线上的开端/中止位,以便为主状况机供给输入。其他模块包含:I2C状况寄存器,用于记载I2C总线的状况;地址比较模块,用于比较总线上传送的地址和本机的从机地址是否共同,假如共同,阐明其他主机正在寻址本操控器,操控器有必要当即切换到从机状况,一起宣布呼应位。
3.1 μC接口规划
μC接口用于衔接I2C接口电路和μC,首要完成两者之间的信号交互握手机制。规划时能够用VHDL供给的状况机来描绘信号交互机制中的作业状况切换,如图3(a)所示。
μC接口电路中运用的四组寄存器的地址是24位的,高16位为I2C总线操控器的基址(MBASE),占用μC的地址空间,低8位用于差异不同的寄存器。寄存器自身是8位的,图3(b1)为操控寄存器,图3(b2)为状况寄存器。图中示出了每一位的意义。
3.2 I2C接口规划
I2C接口用于衔接μC接口电路和I2C总线,由两个状况机构成:一个是I2C接口主状况机,用于履行发送和接纳操作;另一个为“SCL/SDA/ STOP 发生”状况机,当I2C总线操控器为主机时,这个状况机发生SCL/START/STOP信号。
I2C接口用于I2C总线的驱动和接纳,当I2C总线操控器为主机时,I2C接口有必要按I2C总线规范驱动总线;当总线操控器为从机时,I2C有必要能正确接纳满意I2C总线规范的信号。I2C规划规范对总线的时序作了详细的界说,在不同形式下这些参数的详细数值都有清晰的规则。“SCL/START/STOP 发生”状况机的状况转化如图4所示, I2C接口主状况机的搬运图如图5所示。
4 仿真与硬件完成
本文中仿真东西选用Mentor公司的ModelSim Plus 6.0 SE,其明显的优胜功用是供给了一个混合言语仿真环境,已在产业界广泛运用。为了测验验证体系的功用,本文选用了Atemel公司供给的选用I2C总线协议的AT24C02 E2PROM芯片(256B 8bit)的VerilogHDL仿真模型(AT24C02.v)作为从器材目标,用VerilogHDL言语构建了testbench(测验向量),对所规划I2C总线操控器进行仿真。
图6和图7为μC经过I2C总线操控器对E2PROM进行数据写/读的仿真波形(将数据FFH~0HH写进地址0~255单元,然后将它们再按次序读的形式读出)。往E2PROM写入时需求给出所写开端单元的地址(图6中为00H); 从E2PROM次序读时不必给出开端单元地址而从当时地址处开端读(本文中写完256B数据后,地址指针又回到0处)。相关状况及数据已在图中作了标明。由此可见,所规划的总线操控器完全符合规范I2C串行协议的时序要求。
本文规划的体系完成渠道选用Xilinx公司的XC95216-10-PQ160 CPLD芯片,总逻辑门个数为4 800。经归纳、适配、布局布线后占用器材资源的状况为:宏单元120/216(56%)、寄存器111/216(52%)、功用块331/432(77%)、乘积项分配器544/1080(51%)。可见,体系占用约一半的资源,适当精简。整个体系下载到CPLD后在2MHz时钟频率下运转正常。