基于DSP与CPLD的I2C总线接口的设计与实现
带有I2C总线接口的器件可以十分方便地将一个或多个单片机及外围器件组成单片机系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连接线和连接引脚少,因此其构成的系统价格低、器件间总线连接简单、结构紧 凑,而且在总线上增加器件不影响系统的正常工作,系统修改和可扩展性好。即使有不同时钟速度的器件连接到总线上,也能很方便地确定总线的时钟。
如今,为了提高系统的数据处理精度和处理速度,在家用电器、通讯设备及各类电子产品中已广泛应用DSP芯片。但大多数的尚未提供I2C总线接口,本文将介绍一种基于CPLD的已实现的高速DSP的I2C总线接口方案。
1 I2C通信协议
I2C总线是一种用于IC器件之间的二线制总线。它通过SDA(串行数据线)及SCL(串行同步时钟线)两根线在连到总线上的器件之间传送信息,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的扩展与控制。I2C总线接口电路结构如图1所示,I2C总线时序图如图2所示。
I2C总线根据器件的功能通过软件程序使其可工作于发送?主或接收从方。总线上主和从?即发送和接收?的关系不是一成不变的,而是取决于数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路的,以具有?quot;与"功能。I2C总线的数据传送速率在标准工作方式下为100kbit/s,在快速方式下,最高传送速率可达400kbit/s。
在数据传送过程中,必须确认数据传送的开始和结束信号(也称启动和停止信号)。当时钟线SCL为高电平时,数据线SDA由高电平跳变为低电平则定义为"开始"信号;当SCL为高电平时,SDA由低电平跳变为高电平则定义为"结束"信号。开始和结束信号都由主器件产生。在开始信号以后, 总线即被认为处于忙状态;在结束信号以后的一段时间内,总线被认为是空闲状态。
在I2C总线开始信号后,依次送出器件地址和数据,I2C总线上每次传送的数据字节数不限,但每一个字节必须为8位,而且每个传送的字节后面必须跟一个认可位(第9位),也叫应答位(ACK)。从器件的响应信号结束后,SDA线返回高电平,进入下一个传送周期。关于I2C总线协议的详细说明请参看参考文献。
2 设计方案
本文以DSP芯片ADSP21992与时钟芯片PCF8583的控制接口为例,说明基于CPLD的I2C总线接口设计方案。
ADSP21992是2003年最新推出的160MIPS、带CAN通信接口的适合于高精度工业控制和信号处理的高性能DSP芯片。它带有48K片内RAM、SPORT通信接口、SPI通信接口、8通道14位A/D转换器以及PWM等。关于ADSP21992的详细说明请参看参考文献。
PCF8583是一款带有256字节静态CMOS RAM的时钟/日历芯片。地址和数据严格按照双向双线制I2C总线协议传输。内置地址寄存器在每次读/写后自动递增。关于PCF8583的详细说明请参看参考文献。
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的读/写同步产生,则会启动相应的读/写进程,进行数据传输。
I2C核的关键技术是:
①用计数器和全局使能信号EN配合触发进程。
由于I2C核的片选信号EN是由触发产生的,不能象电平信号一样由DSP的I/O控制,因此只能通过精确的计数器定时和读/写使能信号共同判别控制。
读/写使能信号WR_EN/RD_EN也象EN那样由触发产生,因此也要用同样的方法判别。
②同步时钟的产生。
从图2中可以看到,数据在同步时钟的高电平脉冲时必须保持稳定,如果此时发生变化将会被视为一个控制信号,而通信也会被中断。因此,同步时钟的高电平脉冲一定要在有效数据的中间出现。而所需的控制信号必须在同步时钟正脉冲的时候出现。
③对数据总线进行三态设置。 因为SDA和DSP_DATA都是双向数据线,在写SDA和DSP_DATA的进程中必须设置高阻态,否则会出现数据线状态"不确定"。
2.3 DSP与CPLD的接口模块
根据DSP的时序,DSP与CPLD之间必须根据双方(ADSP21992和PCF8583)的时序制定一个握手协议。当读程序时,由于I2C总线协议只能支持最高400kbit/s的传输速率,而DSP的同步时钟可达几十兆赫。因此,DSP必须等到I2C核把PCF8583的数据读到CPLD后才能获得正确的数据(这里可以通过设立一个忙标志来实现)。而当写程序时,为了节约CPLD的资源(数据缓存特别占用资源),可以设置DSP定时输出数据给I2C核,让I2C核的一次只送一个数据。
2.4 硬件设计
此I2C核可外挂多个带有I2C总线接口的芯片,可以通过发送不同的器件地址来选择。SDA和SCL线必须接上拉电阻。此外,同步时钟不能太高,否则会影响数据传输的稳定性。
2.5 时序
(1)I2C核时序
以写为例,I2C核时序如图5所示。
(2)PCF8583时序
PCF8583的数据是8bit一个存储单元,共256个字节,所以只需要8位地址,而且器件本身有两种寻址方式:一种是从指定地址开始递增寻址,另一种是从首地址开始递增寻址。两种寻址方式的时序是不一样的,如图6所示。
3 实现方法
本系统是选用ALTERA公司CPLD7000S系列EPM7128S芯片,并基于MAXPLUSII开发的。I2C核采用VHDL语言编写,使用SYNPLIFY 编译、综合,用AHDL绘成图表,用MAXPLUSII仿真和布局。DSP采用VISUAL DSP++2.0编写。最后分别通过JTAG口下载到芯片并联机调试成功。
随着DSP芯片和I2C通信方式的广泛应用,它们之间的接口问题必须得到解决。本文提出的解决方案具有非常好的可移植性和产品开发能力。本系统既可以作为一个单独的系统运行,又可以作为一个通信模块植入一个大系统中,而其中的I2C核又是一个可移植IP核。利用CPLD的逻辑可编程性,还可以在其剩下的资源中再开发所需的逻辑器件,既能降低硬件成本又能大大减小系统主板的面积,使电路的设计更具灵活性。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)