基于DSP与CPLD的I2C总线接口的设计与实现
摘要:介绍了一种使用CPLD完成DSP芯片I2C总线接口的设计和实现方案,重点叙述了I2C核的设计思想。
关键词:PWM SG3524 控制器
带有I2C总线接口的器件可以十分方便地将一个或多个单片机及外围器件组成单片机系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连接线和连接引脚少,因此其构成的系统价格低、器件间总线连接简单、结构紧凑,而且在总线上增加器件不影响系统的正常工作,系统修改和可扩展性好。即使有不同时钟速度的器件连接到总线上,也能很方便地确定总线的时钟。
如今,为了提高系统的数据处理精度和处理速度,在家用电器、通讯设备及各类电子产品中已广泛应用DSP芯片。但大多数的尚未提供I2C总线接口,本文将介绍一种基于CPLD的已实现的高速DSP的I2C总线接口方案。
图1 I2C总线接口电路结构
1 I2C通信协议
I2C总线是一种用于IC器件之间的二线制总线。它通过SDA(串行数据线)及SCL(串行同步时钟线)两根线在连到总线上的器件之间传送信息,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的扩展与控制。I2C总线接口电路结构如图1所示,I2C总线时序图如图2所示。
I2C总线根据器件的功能通过软件程序使其可工作于发送(主)或接收(从)方式。总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路的,以具有线“与”功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。
javascript:window.open(this.src);" style="cursor:pointer;"/>
在数据传送过程中,必须确认数据传送的开始和结束信号(也称启动和停止信号)。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平则定义为“开始”信号;当SCL为高电平时,SDA由低电平跳变为高电平则定义为“结束”信号。开始和结束信号都由主器件产生。在开始信号以后, 总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲状态。
在I2C总线开始信号后,依次送出器件地址和数据,I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位(ACK)。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。
2 设计方案
本文以DSP芯片ADSP21992与时钟芯片PCF8583的控制接口为例,说明基于CPLD的I2C总线接口设计方案。
ADSP21992是2003年最新推出的160MIPS、带CAN通信接口的适合于高精度工业控制和信号处理的高性能DSP芯片。它带有48K片内RAM、SPORT通信接口、SPI通信接口、8通道14位A/D转换器以及PWM等。
javascript:window.open(this.src);" style="cursor:pointer;"/>
PCF8583是一款带有256字节静态CMOS RAM的时钟/日历芯片。地址和数据严格按照双向双线制I2C总线协议传输。内置地址寄存器在每次读/写后自动递增。
2.1 系统结构设计
系统的基本功能是通过CPLD的I2C总线接口完成ADSP21992(主控芯片)与PCF8583的数据交换。系统框图如图3所示。
系统主要由两个部分组成:一是DSP与CPLD的接口;另一是I2C核。为了能在DSP指定的时刻读/写PCF8583的数据,使用DSP的读写信号、同步时钟和最高位地址控制数据的传输。最高位地址作为控制信号是因为DSP的I/O口比较少,必须优先供应给其它外设,因此用它来产生DSP提供给I2C核的片选信号。而DSP的地址总线位数较多,最高位一般使用不到,这样正好可以充分利用资源。
2.2 I2C核
I2C核原理示意图如图4所示。
整个I2C核由控制模块和I/O模块构成。其中,控制模块包括控制信号发生部分和时钟开关,I/O模块包括数据缓存和同步时钟缓存。
当DSP的最高地址位出现一个有效信号时,便会使I2C核内的触发器产生一个全局使能信号EN?熏它将会启动时钟、计数器和其它控制信号,但数据不会出现交换。如果此时DSP的读/写同步产生,则会启动相应的读/写进程,进行数据传输。
javascript:window.open(this.src);" style="cursor:pointer;"/>
I2C核的关键技术是:
①用计数器和全局使能信号EN配合触发进程。
由于I2C核的片选信号EN是由触发产生的,不能象电平信号一样由DSP的I/O控制,因此只能通过精确的计数器定时和读/写使能信号共同判别控制。
读/写使能信号WR_EN/RD_EN也象EN那样由触发产生,因此也要用同样的方法判别。
②同步时钟的产生。
从图2中可以看到,数据在同步时钟的高电平脉冲时必须保持稳定,如果此时发生变化将会被视为一个控制信号,而通信也会被中断。因此,同步时钟的高电平脉冲一定要在有效数据的中间出现。而所需的控制信号必须在同步时钟正脉冲的时候出现。
③对数据总线进行三态设置。
因为SDA和DSP_DATA都是双向数据线,在写SDA和DSP_DATA的进程中必须设置高阻态,否则会出现数据线状态“不确定”。
图5 I2C核工作时序图