龙源期刊网总线控制器设计作者:李小琼来源:《数字技术与应用》2014年第01期摘要:文章简要介绍了I2C总线的规范,给出了用FPGA实现I2C总线控制器各个功能模块的详细设计方法,从代码移植方面分析了数据缓存的编码方法,并对该I2C总线控制器进行了仿真验证。关键词:I2C总线FPGA代码移植中图分类号:TP39文献标识码:A文章编号:1007-9416(2014)01-0005-02Abstract:ThispaperbrieflyintroducesthespecificationofanI2CBUS,itdescribesdetaildesignmethodofeveryfunctionmoduleusingFPGAimplementsI2CBUScontroller,andanalysiscodingmethodofdatabuffermodulefromthepointofthecodemigration,andthedesignpassesthetestingofbehavioralsimulationandfunctionverification.KeyWords:I2CBUSFPGAcodemigration1引言I2C总线是荷兰飞利浦PHILIPS开发的一种实用、可靠的双向二线制同步串行总线,只需要两条总线进行数据传输。目前市场上虽然有专用I2C总线接口芯片,但是地址可选范围小,性能指标固定、功能单一、使用不方便,利用可编程器件FPGA方便的实现I2C总线通讯接口,具有高速、易调试等特点,同时大大减少了系统的开发时间。文章设计的I2C总线控制器传输速率支持100kbit/s,400kbit/s及3.4Mbit/s,完全符合I2C总线规范[1],可作为一个IP核方便地嵌入到SOC系统中。2I2C总线协议术语主从机之间一次数据的传输称为一帧。由启动信号、若干数据字节和应答位及停止信号组成。2.1起始和终止信号起始信号:在时钟保持高电平期间,数据线出现由高电平向低电平变化时启动I2C总线。终止信号:在时钟保持高电平期间,数据线出现由低电平向高电平变化时将停止I2C总线的数据传送。龙源期刊网位传送数据传送的基本单位是位数据的传送。I2C总线规定SCL的一个周期传送一位数据,并且在SCL的高电平期间,SDA上的数据必须保持稳定,只在低电平期间SDA的数据允许变化。2.3字节格式送到SDA线上的每一个字节由8位组成,每次传送的字节数不受限制,但每个字节后必须跟一位应答位(ACK)。数据传送时,先传送最高位(MSB),如果接收器不能接收下一个字节,例如正在处理内部中断时,可以使SCL保持低电平,迫使发生器处于等待状态,等它准备好接收下一个字节释放SCL线时,再继续传送。2.4应答信号I2C总线数据传送时,每传送一个字节数据后都必须有应答信号,与应答信号对应的时钟由主控器产生,这时发生器必须在这个时钟位上释放数据线,使其处于高电平状态,以便接收器在这一位上送出应答信号。应答信号在第9个时钟位上出现,接收器输出低电平为应答信号(A),输出高电平则为非应答信号(nA)。2.5帧格式在启动信号之后送出一个7位的从机地址,第8位为方向位(R/nW),“0”表示发送,“1”表示读取数据。一次数据传送总是由主机产生的停止信号而终止。但是如果主机还希望在总线上通讯,可以产生启动信号并寻址另一从机,而无需产生停止信号。在这种传送方式中,可能有读和写组合方式,如图1所示。主机接收方式中,在第一个应答位时,主发送器变成主接收器,从接收器变成从发送器。但是该应答位仍由从机产生,停止信号仍由主机产生。在传送方向改变时,重复发启动信号和地址,而方向位(R/nW)位取反。3I2C总线控制器的设计I2C主控器需要对I2C总提供时钟信号,能产生起始信号和停止信号的功能,数据传送方式有主发送和主接收两种。结构框图如图2所示,内部主要有六部分组成,即APBslaver接口单元、地址分配及内部寄存器组单元、时钟分频单元、数据缓存单元、控制单元及I2C串并相互转换单元。3.1APBslaver该接口单元完成处理器等主设备通过APB总线访问I2C总线控制器内部的各个寄存器。龙源期刊网接口,信号CLK为APB总线的同步时钟。内部寄存器通过多路器与APB总线相连,多路器利用地址总线进行选择,在PSEL为高电平的时钟周期上升沿进行写操作,读操作在PSEL和PENABLE同时为高电平时进行。读写时序符合AMBA规范[2]。3.2地址分配及内部寄存器组单元地址分配单元的3根地址线分别选用APBslaver接口单元的PADRR[2]、PADRR[1]、PADRR[0]。内部寄存器组由地址分配单元产生,包括控制寄存器,速率寄存器,状态寄存器及发送和接收FIFO寄存器。3.3时钟分频单元该单元决定I2C传输的位速率,可根据I2C总线从接口器件的速率和主控器工作的频率设置速率寄存器。I2C总线传输时钟在传输期间产生,在传输完成后时钟变为高电平。3.4数据缓存单元数据缓冲单元包括发送FIFO单元及接收FIFO单元。发送FIFO单元及接收FIFO大小都定义为256*8bits,两个FIFO都有空满标志,可供软件查询。由于不同FPGA器件的硬件资源不同,若根据器件来选用内部RAM生成FIFO,降低了I2C主控器的可移植性,可采用VerilogHDL语言及第三方综合工具simplify提供的方法实现数据缓存单元[3]。3.5控制单元控制单元实现整个设计的控制功能,该单元根据控制寄存器的指令启动或者终止I2C总线通讯,根据状态寄存器(发送FIFO和接收FIFO空满标志、应答或者非应答)的状态控制发送FIFO和接收FIFO与I2C串并/并串转换单元的数据传送,控制I2C总线读写操作的模式,提供I2C主控器状态信息。3.6I2C串并及并串互换单元该接口单元负责将并行数据转换成串行数据及将串行数据转换成一个8bits并行数据。为保证数据可靠传输,其每一位写数据在I2C时钟SCL低电平N(由分频单元决定)个CLK写数据,每一位读数据在I2C时钟SCL高电平N个CLK读数据。4I2C总线控制器的仿真验证龙源期刊网工作模式,对I2C总线控制器进行RTL及仿真测试。主发送模式(字节写模式)的数据传输如图4所示,在起始信号后有4个字节,其中器件地址和方向位专用一个字节,存储器的页内地址专用2个字节,传送的数据占用一个字节,每个应答信号为低应答,当数据线上传送4个字节后出现终止信号。在起始信号和终止信号之间传送了4个字节,由图4中可知,从器件AT24C256中接收的数据Data_in为0x54,0x33,0xf8,0xb3。5结语基于FPGA设计的I2C总线控制器形成IPcore后可移植复用,避免重复开发的开销,降低了产品开发成本,提高了设计效率。文中设计I2C总线主控器已在产品中得到应用,具有一定推广和借鉴意义。参考文献[1]广州周立功单片机发展有限公司.I2C总线规范V2.10.2003.06.26.[2]AMBASpecification[S].ARMLimited.1999.[3]SynopsysFPGASynthesisUserGuide,September2008.[4]夏宇闻.Verilog数字系统设计教程[M].2版.北京:北京航空航天大学出版社,2008.