串行扩展应用平台设计
摘要:摘要一种用于系统内芯片级串行扩展的应用研发平台。该平台包括PC机构成的上位机和单片机构成的下位机。上位机提供了良好的人机交互界面;下位机采用虚拟器件、虚拟接口,通过单片机软件和I/O口线模拟出多种串行接口的访问时序逻辑。借助这一平台,可方便地实现对具有I2C、SPI、Microware、One-wire等接口的从器件芯片的操作,简化了系统设计前的测试工作。
关键词:串行扩展 平台 时序
应用串行接口芯片扩展系统时,在初步选择了串行接口的芯片后,为了对芯片的资源更好地了解,开发者一般在系统设计前搭建一个简单的硬件电路并编制相应的软件对其测试,待性能验证后再确定最终的设计方试的实验平台。该平台以PC机为人机接口、采用单片机产生芯片串行通信时序。应用这一平台可以大大简化芯片使用前的测试过程。这一平台也为单片机串行扩展的初学者提供了快捷的学习工具。本平台目前集成了SPI、One-wire、Microware、I2C四种串行接口,在今后的使用中,可根据需要增加串行接口的种类。
javascript:window.open(this.src);" style="cursor:pointer;"/>
1 串行扩展平台的结构
SPI、One-wire、Microware、I2C是目前单片机应用系统中最常用的几个串行扩展接口。具有I2C和One-wire接口的外围器件都有自己的地址编号,单片机通过软件选通器件;而SPI和Microware扩展接口芯片首先要通过单片机I/O口线选通其片选脚,然后才能对其进行操作。这四种串行扩展接口都有不同的时序要求,但每一种总线的基本时序要求都是一致的,对芯片的操作无非是读出或写入,所不同的是具体的数据字节内容,只要按照各自的时序和命令操作,即可实现芯片功能。本文的串行扩展平台就是基于这一方法搭建的。
串行扩展平台由两部分组成:上位机部分由PC机构成,具有人机接口界面,操作起来方便直接;下位机部分由单片机及扩展接口电路构成,并通过RS-232接口与上侠机通信。
javascript:window.open(this.src);" style="cursor:pointer;"/>
下位机的核心是AT89C51单片机。单片机本身并没有SPI、One-wire、Microware、I2C接口,使用虚拟器件技术,在单片机内采用模块化设计思想固化四种接口的串行访问子程序,通过软件调用完成这几种串行扩展的时序,用单片机的普通I/O口线模拟出四种串行接口,在下位机电路板上留有较大的通用板空间或用标准的连接器将串行接口引出,便于与待测芯片连接。AT89C51单片机没有RS-232接口,但它的UART口可以采用MAX232等芯片扩展出简单的RS-232接口,与上位机的RS-232接口相接。下位机的结构如图1所示。
测试时,将待测芯片与对应的串行接口相连,操作者在上位机将访问命令和数据通过RS-232接口下传给下位机;下机单片机对其分析后调用相应的时序模拟程序访问待测芯片,并将结果通过RS-232接口上传给上位机,在上位机显示。从整个测试过程来看,只要关心命令和数据的输入和输出。不必关心具体时序,近似一种透明的操作。测试后,只需对单片机中的子程序稍加裁减,即可移植到实际应用软件中,为开发提高了方便。下面将分别分别这四种串行通信接口的实现。
javascript:window.open(this.src);" style="cursor:pointer;"/>
2 四种串行通信接口的实现
在串行扩展中,可以根据接口主器件的数量分为单主器件系统和多主器件系统。其中单主器件系统应用最普遍。在单主器件系统中,具有一个主控制器件和多个从器件,数据的传送由主器件控制。主器件启动和停止数据的发送,提供同步时钟信号。在应用中使用种类最多的是功能繁多的从器件。本文的串行扩展平台主要针对这些从器件应用设计。所以该平台采用单主器件系统结构,只考虑用单片机的通用I/O口线模拟主器件访问从器件的时序逻辑。
2.1 I2C总线接口时序
I2C串行总线是Philips公司推出的一种板内芯片间串行总线。它用两根连线即可方便地实现外围器件扩展。图2给出了主器件对从器件访问的基本读写时序,SDA为数据线,SCL为时钟线。
javascript:window.open(this.src);" style="cursor:pointer;"/>
I2C总线上数据传送的基本单位为字节,采用低位在前的格式。主从器件之间一次传输的数据称为一帧,由启动信号、若干个数据字节和应答位以及停止信号组成。可以看出,I2C的主要命令只有读、写两种情况,虽然读写的字节根据具体器件的不同而不同,但其时序关系不会发生改变。根据这一点,下位机只要具备I2C的基本时序即可。 这些基本时序包括:启动、写字节、读字节、应答位、停止信号,并可以组合成两个字程序:读N字节子程序、写N字节子程序。
2.2 串行外围接口SPI
SPI(同步串行外设接口)由Motorola公司推出,它是一种三线同步接口,分别为同步信号、输入信号和输出信号。另外每个扩展芯片还需要一根片选线,主器件通过片选线通与其通信的从器件。图3给出了SPI的时序图。其中,SCK为同步时钟脉冲,SS为片选线,MOSI为主器件的数据输出和从器件的数据输入线,MISO为主器件的数据输入线和从器件的数据输出线。
图5 One-wire总线复位和应答时序
SPI是全双工的,即数据的发送和接收可同时进行。如果仅对从器件写数据,主器件可以丢弃同时读入的数据;反之,如果仅读数据,可以在命令字节后,写入任意数据。数据传送以字节为单位,并采用高位在前的格式。SPI接口的通信程序可简化的:写读N字节子程序。
2.3 Microware串行通信接口
NS公司的Microware是串行同步双工通讯接口,由一根数据输出线、一根数据输入线和一根时钟线组成。所有从器件的时钟线连接到同一根SK线上,主器件向SK线发送时钟脉冲信号,从器件在时钟信号的同步沿输出/输入数据。主器件的数据输出线DI和所有从器件的数据输入线相接,从器件的数据输出线都接到主器件的数据输入线DO上。与SPI接口类似,每个从器件也都需要另外提供一条片选通线CS(注意:它采用高选通方式)。
图4给出了主器件对从器件操作的基本时序,包括写起始位、写操作码和读字节,数据交换采用高位在前的格式。图4中给出了读两个字节时的情况,在主器件写完起始位和操作码后,从器件会应答一个“0”。该应答位在主器件写完操作码的最后一位时给出。在本文中,主器件速度较慢,可以不考虑等待该闰。Microware接口的通用子程序有:启动子程序,读N字节子程序、写N字节子程序。不同的Microware器件支持的起始位、操作码有所不同,但可人为组成合适的字节。
2.4 One-wrie总线
One-wire总线是DALLAS公司研制开发的一种协议。它由一个总线主节点、一个或多个从节点组成系统,通过一根信号线对从芯片进行数据的读取。每一个符合One-wire协议的从芯片都有一个唯一的地址,包括48位的序列号、8位的家庭代码和8位的CRC代码。主芯片对各个从芯片的寻找依据这64位的不同来进行。
图6 one-wire总线位写和位读时序 图7 one-wire总线写一个字节时序图