I2C,SPI,SMI,SMBus串行接口实现方法 下载本文

内容发布更新时间 : 2024/7/1 10:54:38星期一 下面是文章的全部内容请认真阅读。

龙源期刊网 http://www.qikan.com.cn

I2C,SPI,SMI,SMBus串行接口实现方法

作者:康宾 周玉娟

来源:《中国科技纵横》2014年第04期

【摘 要】 I2C、SPI、SMI(MDC、MDIO)、SMBus等接口受时钟频率的限制,相对于高速运行的CPU芯片来说接口运行速度较慢。但并不是所有CPU芯片都支持这些串行接口,在很多系统中需要解决CPU芯片与串行接口芯片的互联问题。本文提出三种CPU芯片与串行接口互联方案,其中方案一使用CPU芯片的GPIO接口与串行接口芯片互联,方案二CPU芯片通过FPGA芯片与串行接口芯片间接互联,方案三FPGA的SOPC技术代替CPU芯片与串行接口芯片互联。

【关键词】 I2C SPI SMI(MDC、MDIO) SMBus FPGA SOPC

【Abstract】 I2C, SPI, SMI(MDC、MDIO)and SMBus limited by the interface clock frequency, relative to the CPU chip for high-speed operation of the interface to run slower; But not all CPU chips support these serial interfaces, in many systems interconnected issues need to be resolved with the CPU chip and serial interface chip; This paper proposes three CPU chip interconnect solutions with serial interface,Which program to use a CPU chip GPIO interface with serial interface chip interconnect, Option II CPU chip FPGA chip by indirect interconnection with serial interface chip, Option III FPGA SOPC technology instead of the CPU chip interconnect with a serial interface chip.

【Key words】 I2C SPI SMI SMBus FPGA SOPC

为了减小芯片的体积,减小布线的复杂度,提高系统的可靠性以及集成度,越来越多的芯片采用串行I2C接口、SPI接口、SMI(MDC、MDIO)接口、SMBus接口等;例如EEPROM、FLASH、以太网PHY芯片,锁相环芯片,温度测量芯片、光电转换模块等。 串行接口使用简单,用2到4根信号就可以完成芯片初始化、配置、运行状态查询等操作。但在各种系统中,串行接口运行速率较慢,串行接口芯片与高速的CPU芯片如何互联是一个亟待解决的问题。

1 I2C、SPI、SMI、SMBus串行接口简介

I2C接口也就是通常所说的I2C串行总线,一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有I2C设备串行数据SDA都接到总线SDA上,各设备时钟线SCL接到总线SCL上。

龙源期刊网 http://www.qikan.com.cn

SPI接口的全称是“Serial Peripheral Interface”,是一种高速、全双工、同步的通信总线。SPI接口信号主要包括SDO(主设备数据输出,从设备数据输入)、SDI(主设备数据输入,从设备数据输出),SCLK(时钟信号,由主设备产生)、CS(从设备使能信号,由主设备控制)等信号。

SMI(MDC、MDIO)接口在以太网PHY芯片上比较常见,主要由MDC、MDIO两个信号组成。CUP或以太网MAC芯片通过该接口可以完成以太网PHY芯片初始化、以太网接口配置、以太网接口状态查询等操作。SMI(MDC、MDIO)接口还可以提供中断信号MDINT(由以太网PHY芯片产生的中断)。

SMBus是System Management Bus的缩写,由Intel于1995年提出,是一种二线制串行总线,信号主要包括SMBus_DATA(数据输入输出)、SMBus_CLK(时钟信号,由主设备产生)。

接口原理框图以及信号方向,如图1所示: 2 串行接口互联方案

CPU芯片可以直接支持I2C接口、SPI接口、SMI(MDC、MDIO)接口、SMBus接口其中一种接口或者两种接口,硬件电路实现比较简单。CPU芯片相应使能管脚和串行接口芯片相应管脚直接向连,然后根据相应电气特性匹配上下拉电阻;但也有一些CPU不支持这些接口,在这样情况下,有三种方案可以解决CPU芯片与串行接口芯片互联问题。 2.1 使用CPU的GPIO管脚互联

CPU一般都有一些GPIO管脚,可以使用CPU的GPIO管脚模拟串行接口信号以及接口时序,从而解决CPU芯片与串行接口芯片互联问题,以SPI接口为例说明其互联原理,其框图如图2所示:

CPU作为主端,发起SPI读写操作,外围芯片作为从端,接收CPU读写指令。SPI接口CS(从设备使能信号,由主设备控制)信号,可以由CPU空闲CS管脚或GPIO管脚来模拟实现,当CPU发起SPI读写操作时:

(1)首先CS信号有效,才开始后续读写操作,作为CS信号CPU的GPIO管脚在整个SPI读写操作过程中保持?0?电平。

(2)SCLK(时钟信号,由主设备产生),由CPU的GPIO管脚经过一定时间后反转其管脚电平模拟实现SPI接口时钟,输出到SPI从设备。

(3)SDO(主设备数据输出,从设备数据输入)信号由CPU的GPIO管脚作为输出管脚,在同步于SCLK的情况下,输出相应?0?、?1?电平实现相应读写命令以及数据输出。

龙源期刊网 http://www.qikan.com.cn

(4)当进行读操作时SDI有效,SDI(主设备数据输入,从设备数据输出)由CPU的GPIO管脚作为输入管脚,同步于SCLK的情况下把其管脚输入按位存储到CPU内存空间实现相应数据的输入。

I2C接口,SMI(MDC、MDIO)接口,SMBus接口等串行接口也可以采用类似的方法来实现。

从上述可以看出,此方案CPU需要全程参与串行接口的读写操作,读写操作过程不能被打断,而且需要复杂的程序模拟串行接口时序,特别是对I2C,SMBus等接口在读写过程中需要ACK或NCK回应的时序,程序设计显得捉襟见肘。此方案缺点:CPU访问串行接口芯片时,CPU会被完全占用,CPU无法处理其他工作,程序设计较复杂;优点:CPU与串行接口芯片之间互联,不占用系统其它资源。 2.2 FPGA间接访问串行接口

一般情况下,CPU芯片都有并行CPU接口,CPU芯片通过CPU接口与FPGA相连,由FPGA芯片来模拟串行接口时序;FPGA与相应的串行接口芯片相连,代替CPU芯片完成串行接口芯片的读写访问。原理框图如图3所示:

CPU芯片通过并行的CPU接口对FPGA的内存空间进行读写操作;FPGA根据其内存中内容模拟串行接口读写时序,完成由CPU芯片并行接口到串行接口的转换。

以SMI(MDC、MDIO)接口为例来说明此方案具体实现方法。CPU芯片或以太网MAC芯片通过此SMI(MDC、MDIO)接口完成以太网PHY芯片初始化、以太网接口配置以及以太网接口状态查询等工作。其原理框图如图4所示: SMI(MDC、MDIO)接口写操作:

(1)CPU芯片通过并行CPU接口把以太网PHY芯片地址,以太网PHY芯片寄存器地址,以及要写入到以太网PHY芯片的数据,写命令等写入到FPGA内存空间;

(2)然后再由FPGA把内存中的数据按照SMI(MDC、MDIO)接口的写时序写入到以太网PHY芯片,在此过程中由FPGA程序状态机来负责写开始、写结束、是否空闲等状态控制,接口时序完成由FPGA负责完成。

以太网PHY芯片的单次写过操作完全可以交由FPGA完成;以太网PHY芯片多次写操作,采用在FPGA里加入FIFO缓存CPU多次写操作数据,然后再由FPGA依次发起写过程;在多次写过程,FPGA也完全可以代替CPU芯片或以太网MAC芯片完成SMI(MDC/MDIO)接口写操作。