SPI设备驱动(通用7篇)
SPI设备驱动 篇1
SD卡(Secure Digital Memory Card)是基于FLASH存储介质的新一代记忆设备,由日本松下、东芝及美国SanDisk公司于1999年8月在MMC卡(Multi Media Card)基础上共同开发研制。具有体积小,容量大,数据传输快,移动灵活,安全性能好以及兼容MMC卡[1,2]等特点,广泛地应用于数码相机、PDA和多媒体播放器等便携式装置上。SD卡有SD和SPI两种工作模式,相对于SD模式,SPI模式可以简化主机设计,降低成本。S1C33L05是EPSON设计的多功能32位RISC处理器,主要用于电子字典等数码领域。在此,研究基于S1C33L05处理器[3]的SPI接口,以实现SD卡的驱动。
1 接口电路设计
SD卡既可以采用SD总线访问,也可以采用SPI总线访问。大部分微处理器都有SPI接口而没有SD总线接口。基于以上考虑,采用S1C33L05微处理器的SPI接口,设计访问SD卡的硬件接口电路[1,3,4,5]。
SPI模式下SD卡各引脚功能定义如表1所示。
SD卡通过专用SD/MMC卡的卡座与S1C33L05微处理器连接[3],可移动性强。为实现SD卡热插拔及数据安全写保护功能,特增加插卡监控引脚CD及写保护引脚WP。另外,在连接线上增加10 kΩ上拉电阻,在电源两端增加0.1 μF滤波电容。接口原理如图1所示。
2 驱动程序实现
2.1 SPI模式总线协议
SPI模式[5,6,7,8]下SD卡总线采用的是一种主从问答式协议。首先主机端发送命令Command,SD卡应答主机发送Response。SPI模式命令集是SD模式命令集的子集,其命令Command格式是确定的,如表2所示。当SD卡进入SPI模式后,将忽略CRC校验位,可采用任意位填充。
SD卡的应答有多种,有R1,R1b,R2,R3等。在这些应答中R1居多,其格式如图2所示。R1长度为1字节,最高位(MSB)始终为“0”,如果产生错误则在其他相应位置“1”。
2.2 SD卡初始化及实现SD卡与MMC卡的兼容
对SD卡进行初始化操作[9,10],是SD卡进行正常数据读写的前提。SD卡插入后,默认进入SD模式,等待电压稳定需上电延时(Power up Time)250 ms及等待至少74个时钟周期(Supply Ramp up Time)。将时钟频率设置为100~400 kHz,置低片选信号CS,发送CMD0。如果收到应答信号01H,则表示SD卡进入SPI模式。
由于SD卡兼容MMC卡,都可以采用SPI总线驱动,因此为实现SD卡与MMC卡的兼容性,首先发送ACMD41,能够正确应答则识别为SD卡,否则再发送CMD1,能够正确应答则识别为MMC卡。
初始化过程如图3所示。初始化完成后,需将时钟频率重新设置。
2.3 SD卡块读写操作
SD卡的读写[3,4]以块为单位。初始化完成后,使用CMD16设置SD卡读写块长度(512 B),发送CMD18或CMD25进行SD卡的连续多块读或写操作。
读取连续多块数据向SD卡发送CMD18,收到有效应答信号0x00后,开始接收数据。每块数据由起始令牌(0xFE)、有效数据和16位CRC校验位组成,在接收到起始令牌后,开始接收有效数据。接收完所有块数据后,发送停止传输命令CMD12,完成读操作。
写入连续多块数据向SD卡发送CMD24,收到有效应答信号0x00后,开始发送数据。每块数据由起始令牌(0xFC)、有效数据和16位填充位组成。发送完所有块数据,发送0xFD停止传输,完成写操作。
2.4 热插拔的实现
为实现SD卡的热插拔功能,如图1所示,将SD卡的卡座上CD引脚与S1C33L05处理器的P06相连,并初始化设置P06低电平时产生中断。当SD卡插入时,P06为低电平,触发中断,在中断处理函数中设置P06高电平产生中断,并加载SD卡驱动;当SD卡拔出时,P06为高电平,再次触发中断,在中断处理函数中重新设置P06低电平产生中断并卸载SD卡驱动。由此实现SD卡驱动的自动加载与卸载。
3 结 语
该研究所设计的SD卡驱动已经在基于S1C33L05微处理器的嵌入式操作系统中投入使用,它完全支持热插拔及数据写保护功能,能正确读写SanDisk,Toshiba,Kingston、三星等商家多种容量的SD/MMC卡,最高读写速度可达1.2 MB/s。
摘要:SD卡以其优越的性能在嵌入式设备上得到广泛的应用。介绍在S1C33L05处理器上利用SPI总线进行SD卡的功能扩展。首先介绍具体硬件接口电路的设计,然后介绍利用SD卡的R1应答模式和处理器进行SPI总线通信的通信协议,并在此基础上实现SD卡驱动程序,最后介绍利用S1C33L05处理器的硬件中断实现热插拔的方法。实验表明,该方案在实际的应用系统中运行可靠,实用性强,在其他需要进行SD卡硬件扩展的嵌入式系统中也有很好的参考价值。
关键词:SD卡,SPI,驱动,S1C33L05
参考文献
[1]SD Group(MEI,SanDisk,Toshiba).SD Memory Card Spe-cifications Part 1:Physical Layer Specification[Z].Version1.01,2002.
[2]周立功.SD卡读写模块设计[M].北京:北京航空航天大学出版社,2004.
[3]SEIKO EPSON Corporation.S1C33L05 Technical Manual[Z].Version 1.0,2004.
[4]SanDisk Corporation.SanDisk Multi-Media Card and Re-duced-Size Multi Media Card Product Manual[Z].Version1.0,2004.
[5]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2009.
[6]杨宗德.嵌入式ARM系统原理与实例开发[M].北京:北京大学出版社,2007.
[7]ARM Limited.ARM Architecture Reference Manual[Z].2000.
[8]ARM Limited.ARM926EJ-S Technical Reference Manual[Z].2004.
[9]杜春雷.ARM体系结构与编程[M].北京:清华大学出版社,2003.
[10]张浩.通用串行总线的SD卡读写器的设计[J].韶关学院学报,2008(3):29-33.
SPI设备驱动 篇2
1 设计背景
1.1 SEP0718平台简介
本次设计中使用的SOC芯片SEP0718是东南大学自主研发的一款基于ARM1136JF-S内核32位的高性能、低功耗RISC微处理器,设计主频为500MHz,具有丰富的片内模块,主要面向个人导航设备和多媒体移动终端市场。其组成模块示意图如图1所示。
从图1中可以看出,SEP0718内部集成了多个功能模块,这为SEP0718提供了强大的功能。其中的SPI模块是符合AMBA规范的APB接口,可以执行半双工或全双工的同步串行数据传输,通过配置操作模式完成处
理器与外设之间的数据传输。当SPI模块工作在主模式时,微处理器可以通过APB接口来存取数据、控制信息和读取状态信息。同时,SPI模块还支持DMA操作,使用DMA需要对DMA控制器按照需求进行配置,然后就由DMA控制器接管总线,完成数据传输。
1.2 SPI工作原理
SPI互连较为简单,采用主从模式(Master/Slave)架构,也可支持多slave模式应用,在本次设计中,SEP0718仅支持Master模式,即只能作为主设备使用。SEP0718与SPI设备连接方式如图2所示。
如图2所示,SPI接口共有4根信号线,分别是:串行时钟线、从设备选择线、主出从入信号线和主入从出信号线。
串行时钟信号线(Serial Clock,SCLK)由主设备驱动向从设备输出,使得从设备按照同步时钟的步调来接收或发送数据。通过选择时钟的极性和相位,还可以实现四种传输模式。主设备和从设备必须使用相同的时序,而SCLK的时钟频率决定了SPI总线的传输速度。在本设计中,通过对SPI相关寄存器编程,选择不同的时钟频率。
从设备选择信号线(Slave Select,SS)也是由主设备发出,用来选择激活某个从设备,低电平有效。即只有当此信号线为低电平时,对应的从设备才处于选中状态,此时,主从设备之间才可能进行数据传输。且在整个传输过程中,该信号都要维持稳定的低电平。
主出从入信号线(Master Output Slave Input,MOSI)表示该信号在主设备中作为输出,在从设备中作为输入。
主入从出信号线(Master Input Slave Output,MISO)表示该信号在主设备中作为输入,在从设备中作为输出。
SPI接口的工作原理可以用图3所示。
由图3可见,SPI的基本结构相当于两个8位的移位寄存器首位相接,构成16位的环形移位寄存器。从设备选择信号线用于选择设备工作于主方式还是从方式,主设备启动并发送产生SPI串行时钟,从设备被动地接收时钟。在时钟的作用下,两个移位寄存器同步移位,在数据从主设备移向从设备的同时,数据也由从设备移向主设备。这意味着在一个移位周期内主设备和从设备之间实现数据交换[1]。
2 SPI驱动程序的设计
2.1 Windows Embedded CE 6.0驱动程序概述
微软公司开发的Windows Embedded CE 6.0(以下简称Win CE 6.0)操作系统是一种实时、组件化、多线程的操作系统,支持可重入的多任务并发,支持多种微处理器架构,包括ARM、MIPS、x86和SH4。其良好的实时性、高度的可定制性和有强大的开发工具的支持,使得它成为嵌入式系统开发领域中主流的操作系统之一。
在操作系统中,设备驱动程序是操作系统和硬件之间的接口,是对硬件设备或是虚拟设备的抽象。操作系统可以通过驱动程序来对设备进行操作和管理。在Win CE 6.0中,大多数驱动程序暴露给操作系统一个流式接口,这些驱动程序也被称为流式驱动程序。它只定义抽象的统一的接口,并不与任何硬件的工作原理或结构相关。在流式驱动程序中,驱动程序负责把外设抽象成一个文件,而应用程序则使用操作系统提供的文件API对外设进行访问[2]。在具体实现时,流驱动程序使用一个固定的流驱动接口函数集,
共有12个接口函数,分别为XXX_Init、XXX_Deinit、XXX_Pre Deinit、XXX_Open、XXX_Close、XXX_Pre Close、XXX_Read、XXX_Write、XXX_Seek、XXX_IOControl、XXX_Power Up、XXX_Power Down。每个函数名前的XXX代表该设备在注册表中的名字。通过这些函数驱动程序将操作系统对设备的文件操作重定向成该设备的I/O操作,以实现对设备的控制和访问[3]。所以,设计实现一个流接口驱动程序的过程,就可以说是实现这些流接口函数的过程。
在Win CE 6.0中,设备驱动以动态链接库(Dynamic Link Library,DLL)的形式存在,既可以被加载到内核空间,成为内核模式驱动;也可以被加到至用户空间,运行在一个特殊的用户模式驱动主进程UDevice.exe中[4]。加载在内核模式下的驱动运行效率高,加载在用户模式下的驱动则更加安全。本设计中的SPI驱动程序便是工作在内核模式下流式驱动程序。
2.2 SPI驱动程序架构
在Win CE 6.0中,从实现架构的角度考察,驱动程序可以分为分层驱动程序、单体驱动程序和混合驱动程序。分层驱动程序包括上层的模型设备驱动(Model Device Driver,MDD)和下层的平台相关驱动(Platform Dependence Driver,PDD),MDD层部分包含与某一类型的驱动程序的通用代码,与具体的硬件无关;而PDD层包含特定于硬件或平台的代码,一般在开发时修改这部分的代码即可。单体驱动程序则把对硬件的操作,包括I/O操作、中断处理等放在一起实现,它暴露给操作系统的接口函数称为DDI(Device Driver Interface)函数。通常,实现较为简单的驱动程序可以写成单体形式,这样代码紧凑、运行效率也比较高。图4中表示了SPI驱动在整个系统中的层次和其内部各部分的关系。
由图4可见,SPI驱动被实现为一个单体驱动程序,位于操作系统和硬件设备之间,驱动对操作系统暴露形如SPI_Init、SPI_Open的函数,这样的接口函数即是DDI函数。操作系统即通过DDI函数操作、控制底层硬件。至于在SPI驱动内部,也分为两个
层次,上层是DDI函数,负责与操作系统进行交互;处于下层则处理具体的数据传输事务,中断处理和超时处理,包括了数据处理部分和DMA操作部分。其中由于DMA函数是系统中的公共资源,考虑到开发过程中的可扩展性,减少代码冗余,将DMA操作部分单独实现为一个独立的静态库文件,SPI驱动程序在编译时只要把这个库文件链接进来就可以了。
2.3 SPI驱动的加载
在Win CE 6.0中,当操作系统内核运行时,设备管理器(Device.dll)被自动加载,并由它负责加载驱动程序,设备管理器会加载和读取注册表HKEY_LOCAL_MACHINEDriversRoot Key键,默认情况时,Root Key的值等于DrivesBuilt In。然后设备管理器调用Activate Device Ex函数加载位于HKEY_LOCAL_MACHINEDriversBuilt In的总线枚举器(Bus Enum.dll),接着,总线枚举器会读取它所在键下的所有子键。对于每一个子键,总线枚举器都会调用Activate Device Ex函数来让设备管理器加载子键对应的驱动程序。等驱动程序被加载到内核空间后,设备管理器就可以调用驱动程序中提供的SPI_Init函数进行对驱动的初始化。至此,进入了驱动程序的初始化过程。
2.4 SPI驱动的初始化和打开过程
这个过程由SPI_Init函数完成,其作用是在驱动每次被设备管理器加载的时候初始化设备,如创建一些重要数据结构、分配寄存器空间和缓冲区空间,以及创建线程和初始化中断等一些必要的硬件初始化和运行环境的建立工作。它的返回值是指向设备上下文的指针,将作为参数传给其他的流接口驱动。图5表示了初始化的整个流程。
在这个流程中,如果任何一个步骤失败,都会使得SPI驱动加载失败。期间分配的空间的地址,各个线程的句柄都将被保存在设备上下文中,作为驱动运行时的具体环境保存起来。
应用程序要通过驱动操作硬件,除了经历初始化过程外,还要打开设备。当应用程序调用Create File函数打开SPI设备时,会自动引发设备管理器调用SPI_Open函数来完成打开设备的工作。这个过程主要是为创建一个被称为打开上下文的数据结构,保存有每一次设备打开时所在的上下文环境。
2.5 数据传输过程
数据的传输过程包括了发送和接收两个方面。图6表示了传输数据时的示意图,通过这张图可以看出传输时数据的走向。当发送数据时,应用程序(APP)调用SPI_Write函数,首先把要发出的数据保存在自己在内存里的缓冲区中,接着,数据由CPU或是DMA控制器控制着送至芯片内SPI模块中的发送FIFO(TX FIFO)中,接着硬件自动地按照SPI时序,把数据发送给SPI设备,由设备对数据做出处理。接收的过程则与发送类似。当然,开发人员不能直接对FIFO进行操作,读写FIFO的操作是对一个叫做DR寄存器的读写来实现的。读DR寄存器相当于是读取接收FIFO(RX FIFO)中的内容;写DR寄存器相当于是向发送FIFO中写数据。DR寄存器就相当于一个FIFO对外暴露的接口。驱动程序主要控制的是数据在应用程序和FIFO之间的搬运。根据是CPU还是DMA控制器负责搬运数据,可以把程序中数据传输方式分为中断方式和DMA方式,这在图5中已经有所表示了。下文就以数据接收为例,分析在这两种方式下,数据是如何从外设接收进来的。
中断方式下的数据传输分为两个阶段。第一阶段是前期准备工作,应用程序调用Read File函数读取数据,会自动引发内核调用SPI_Read函数,把接收数据用的缓冲地址传入驱动,并激活h Rx Event事件,通知下层的数据处理函数Thread For Rx,在这个函数中把SPI的状态由IDLE状态改为RX-INTR态,这相当于是接收数据的开关,只有处于RXINTR态才能接收数据。并配置好相关的各类SPI寄存器,做好接收数据的准备。第二阶段是正式的数据接收阶段。SPI设备在SPI时序的控制下把数据发送至RX FIFO中,引发接收中断,激活h Spi Event事件,触发Thread For Spi函数,读取DR寄存器中的内容,即把RX FIFO中的数据搬运到应用程序的缓冲中。搬运完毕后,会激活h Rx Intr Done Event事件,通知中断处理已经完成。返回至Thread For Rx函数,将此次传输的数据量存入打开上下文中。又激活h Rx Done Event事件,通知SPI_Read函数此次数据接收已经完成,然后释放掉接收数据分配的资源,通知内核接收数据成功。这时,应用程序可以通过开始时传入驱动的缓冲地址来获取数据,进行下一步的处理。图7概括了这个过程。
结合上述分析和图7可以看出,数据接收的过程是个层次分明的过程:上层是与操作系统的接口,底层负责真正传输数据,中间层则起着传输前的配置打开上下文和SPI寄存器工作。如果是DMA控制器负责搬运数据,设计思路仍然和中断方式下的一样,不同之处在于会增加部分配置DMA控制器的操作,定义好DMA源地址和目的地址,配置好接收长度等。这部分的操作都是通过一系列的DMA函数来完成的。它可以在存储器和外部设备之间直接开辟高速传输数据的通路,不需要CPU的干预,这时数据的传输过程完全由硬件控制[5]。由此可见DMA方式的优势在于大批量数据的快速传输,这对嵌入式系统的外围设备扩展也是很有意义的。
3 驱动程序的验证
3.1 验证平台介绍
驱动程序的验证环节是驱动开发流程中必不可少的一个步骤,这样就可以在后续更加严苛的正规软件测试流程之前,先检查出驱动中存在的各种缺陷和错误。本验证方案中SPI设备选择的是美国ATMEL公司出品的型号为AT25F512的具有SPI接口的大容量Flash存储器,其低引脚数、低电压的特性使之广泛用于各种嵌入式系统中。图8表示了CPU和Flash的硬件连接,这与图2是类似的。SEP0718中只画出了与SPI相关的引脚,AT25F512的8条引脚均已画出。其中用于写保护的WP和挂起传输的HOLD引脚在验证中不用,所以将其置空。
3.2 应用程序编写
在完成驱动程序的编码,修改相应的配置文件,如批处理文件和注册表文件,并在集成开发环境Visual Studio 2005中生成DLL文件之后,还要编写应用程序以完成对驱动程序的单元性功能验证,编写方法和开发Windows应用程序的方法类似。编写完应图6数据传输示意图
图7数据接收序列图用程序以后,连同驱动程序一起编入操作系统镜像。根据数据手册,对Flash的操作前都需要先发送相应的命令字,SPI设备驱动程序的验证流程如图9所示。并附部分应用程序代码。
1)打开设备
h Open File=Create File(TEXT(“SPI1:”),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NOR-MAL,0);//打开上下文的句柄保存在h Open File中
2)读取Flash的ID号
Devicce Io Control(h Open File,SPI_IOCTL_RID,&OP_READID,4,&id,sizeof(id),&dw Num Of Read,NULL);//OP_READID是读取Flash的ID命令字,返回的ID号保存在变量id中
3)擦除设备
Write File(h Open File,&Erase Data,sizeof(Erase Data),&dw Num Of Written,NULL);//Erase Data包括了擦除设备命令字和擦除地址
4)写入待测数据
Write File(h Open File,&Trans Array,sizeof(Trans Array),&dw Num Of Written,NULL);//Trans Array中包括写Flash的命令字、写入地址和准备好待测数据
5)读出待测数据
Read File(h Open File,&Rece Buffer,size(Array),&dw Num Of Read,NULL);//Rece Buffer是应用程序准备的缓冲,用于存放先前写入到Flash中的数据
3.3 验证结果
经过验证证明,读取Flash的ID号为0x1F,与芯片手册提供的正确ID号一致。写入Flash的待测数据和读取的数据也完全一致,中断和超时部分的处理也正确,SPI设备驱动数据传输功能已基本实现,本设计实现了通用SPI驱动应有的基本功能。
4 结论
本文基于自主研发的ARM11硬件平台,采用Win CE 6.0操作系统流接口驱动设计方法,设计了一种通用SPI驱动程序,并经过实验验证,微处理器和外设之间可以进行稳定可靠的数据传输。本设计提高了系统的可扩展性,为后续系统的外设扩展打下良好基础,对其他硬件平台下的SPI驱动设计也有一定的参考价值。
参考文献
[1]沙占友,孟志永,王彦明.单片机外围电路设计[M].2版.北京:电子工业出版社,2006.
[2]何宗键.Windows CE嵌入式操作系统[M].北京:北京航空航天大学出版社,2006.
[3]顾峥浩,王自强,聂文华.WinCE流驱动程序设计概述[J].微处理机,2007(3):81-83.
[4]Stanislav Pavlov,Pavel Belevsky.Windows Embedded CE6.0Fundamentals[M].Washington:Microsoft Press,2008.
SPI设备驱动 篇3
SOPC (System On a Programmable Chip) 称为可编程片上系统。SOPC集成了硬核或软核CPU、DSP、锁相环PLL、存储器、I/O接口及可编程逻辑, 可以灵活高效地解决SOC方案, 而且设计周期短, 设计成本低。SOPC的设计是以IP为基础, 以硬件描述语言为主要设计手段, 借助计算机为平台的EDA工具, 自动化、智能化地自顶向下进行的过程。其具体开发流程如图1所示。[1]
SPI是嵌入式系统常用的标准串行接口。带Avalon接口的SPI内核符合SPI协议并通过Avalon从机接口接到Avalon总线上。SPI是一个工业标准串行接口协议, 通常用于嵌入式系统中连接处理器和各种片外的传感器、合成器、存储器和控制设备。基于Avalon接口的SPI实现了SPI协议, 并在后端提供了一个Avalon接口。
SOPC Builder中提供了现成的SPI核, 可以轻松地集成到NIOS II系统中。SPI可以配置为主和从两种模式。当SPI被配置为主模式时, 它可以控制16个相互独立的从SPI。SPI传输数据的宽度是由用户配置的, 一般为1~16bit, 如果需要传输位数更宽的数据, 则需要软件程序支持。每当一次数据传输结束时, SPI核就请求一个中断。[2]
1. ADS8361芯片的工作原理和特点
ADS8361的工作原理框图如图2所示。[3]ADS8361是一种具有双通道16位的模数 (A/D转换) 转换器, 分两组——四个全差分输入通道, 可同时进行高速信号采集, 采样速率高达500KSPS。在高噪声环境频率为50k Hz的情况下还能很好地提供了80d B的共模抑制比。ADS8361提供了高速, 双SPI串行接口和控制的输入, 以尽量减少软件开销。图3为ADS8361串行时序图。
2. ADS8361核的设计
上述提到SPI内核传输的最大位宽为16位, 而ADS8361传输的位宽为20bit, 不能直接使用SPI内核。虽然, 软件编程和自定义IP核组件两种方法都能实现, 但是软件编程不仅占用CPU资源, 而且传输速度也受到相应的限制, 再加上RD (CONVST) 、BUSY信号来确保时钟同步。因此, 通过自定义IP核组件来实现更加快速、稳定、有效。
2.1 逻辑模块设计
根据ADS8361的转换原理和SPI核的结构, 就可以用Verilog HDL语言编写用户的逻辑模块。部分代码如下所示:
2.2 模块仿真
将设计好的功能模块在Quartus II下进行仿真, 验证其模块设计的正确性。当M0=0, M1=0时, 通道A输出的功能模块的仿真如图4所示。
2.3 ADS8361SPI核在SOPC Builder中的封装
将设计文件封装为SOPC Builder元件, 主要有以下几个步骤:
(1) 添加硬件描述文件, 并注意指定Top Level Module;
(2) 设置信号;
(3) 设置接口;
(4) 添加软件文件, 即设置文件路径。[4]
其中, 设置接口和信号是关键步骤之一, 定义为主还是从接口, 信号的类型及位宽等等这些, 必须参考相关资料。本文参考的是Altera官网上的技术资料里的SPI核和ADS8361的Datasheet。设置信号如图5所示。
2.4 NIOS II对自定义外设接口的定制
通过定义chipselset和address信号, SOPC Builer会自动分配给用户逻辑一个地址, 那么对于用户逻辑的访问和操作, 其实就是对分配给用户逻辑的地址进行访问和操作。从而实现NIOS II对自定义外设的定制。如图6所示。
最后, 将各部分综合成一个.bdf文件, 使得用户接口逻辑 (interface t o user logic) , 与NIOS内部AVALON总线相连, 编译生成完整硬件系统。
3. 数据测量及分析
A D S 8 3 6 1是1 6位的A/D转换芯片, 输入电压范围为-2.5 V~+2.5V, -2.5V表示方法为0x8000, +2.5V表示方法为0x7fff, 0V表示为0x0000, 即以补码形式输出, 最高位为符号位, 1表示负电压输入。下面只给出0 V~+2.5V正电压测量数据, 负电压测量数据不再给出。正电压测量数据如表1所示。
AD转换值计算公式为
其中, D为测量值的计算值, 正数不变, 负数取反加1, 代入公式 (1) 可得被测的模拟电压值。
通过上述波形仿真和硬件测试和数据分析, 可得知该数据采样板采集的模拟量数据准确、工作正常。
4. 结论
SOPC技术可以利用IP库快速生成系统, 同时也可以把用户自定义的逻辑加入到系统当中, 体现了用SOPC设计嵌入式系统的灵活性。使用SOPC可以快速地生成设计验证机, 有效缩短开发周期。
参考文献
[1]黄佳玮, 陈福深.基于NiosⅡ的SOPC嵌入式系统设计[J], 电子元器件应用, 2009.
[2]徐光辉等.基于FPGA的嵌入式开发与应用[M], 电子工业出版社, 2006:30-57.
[3]ADS8361:16-Bit500kSPS2ADCs, 4ch, serial out[BD], dataconverter.ti.com, 2007.
基于SPI软件的仪表数据表生成 篇4
关键词:数据表,SPI,Excel
随着油气田地面工程项目日趋大型化和复杂化,同时为了满足项目设计工期不断缩短的要求,仪表工程设计软件的专业化程度越来越高,既能共享核心数据和文档资料,又要提供标准化设计平台,是这类软件的设计思路。长期以来,仪表数据表大多是由Office或Excel软件实现的。随着SPI( Smart Plant Instrumentation ) 数据库的广泛使用,传统方法设计数据表的缺点也突显出来。Office或Excel与SPI作为两个相对独立的软件,在文档格式的文件中所做的修改无法实时更新到SPI数据库中,所以很难保证数据的一致性,且造成不必要的重复劳动。
目前,自控设计已逐渐形成了以SPI数据库为核心,辅助以传统软件的方法,这为数据表的生成提供了新的选择。对于大型项目来说,它可以覆盖到仪表设计中各类图纸文件的70% 以上。SPI软件各模块使用统一的数据库,设计人员可共享资料和信息,在任何模块修改输入的数据都存储在这个统一的数据库中。同时,任何模块也都从这个数据库中提取数据,保证了模块生成文件数据的一致性。因此,对于同一信息,在任何一个模块中输入或修改的数据在其他模块中都可以使用。设计和数据的一致性检查功能将极大地减少错误并提高设计质量,同时减轻了设计人员的重复工作量。
在实际使用SPI数据库的项目中,实现完全基于SPI中专门的数据表模块的模式,输入仪表位号后,索引表、数据表、接线图、回路图及安装图等模块均可以开始工作,无顺序之分。在此,笔者基于实际项目,介绍基于SPI的数据表生成方式。
1 SPI中的数据表模块
作为仪表采购订货的重要支持文件,要求数据表准确全面地反应各项规格要求。SPI中设置了独立的数据表模块[1],包含有压力表、温度计、压力变送器、温度变送器、控制阀、关断阀、温度开关、压力开关、安全阀及各类流量计等。在SPI的数据链接平台和仪表索引模块进行仪表位号输入的基础上,即可自动生成数据表。
1. 1 通过FORM区分不同类型仪表
Excel数据表针对特定参数( 如液位) 通常只有一种数据表模板,区分不同类型要靠增减选项或备注说明,很大程度上依赖设计人的主观思维,在不同项目间套用很容易出现错漏。如图1 所示,SPI在软件中定制了液位仪表的绝大部分TYPE( 类型或原理) ,并根据TYPE开发不同的数据表FORM。不同FORM除了工艺参数部分相同,更突出本类型仪表的特殊要求,有利于设计人员理清思路。只要前期仪表选型被确定,数据表的选择就顺理成章。图2 ~ 4 展示了磁性浮子液位计几个重要的要求,接液腔体为双法兰形式并带放空和排污,传感器为磁性浮子以及磁翻板的形式及颜色等。扩展了常规数据表的规格要求,有助于仪表的招标和订货。
1. 2 模板TEMPLATE批量导入
在同一类仪表的数据表中,除工艺参数外,许多规格要求都是相同的,因此可以运用SPI软件提供的form data template功能,为每一种仪表做一张template( 模板) ,填写上共同的规格项,保存为此类仪表的数据表模板。在做此类仪表数据表时,仅需应用SPI的copy from template功能就可以从模板上拷贝数据,提高了准确性和工作效率。需要注意,这种做法只对空白表格有效,如果表格已被编辑,TEMPLATE是无法覆盖已有内容的。
1. 3 生成多位号数据表
关联数据表之前,SPI会提示“需要生成多位号数据表吗”( 图5) 。如果某一类仪表只有位号及分布位置等不同,绝大多数工艺参数和技术要求都相同( 如火气探头) ,即可将多块仪表生成一张数据表,或将一块新表加入到已有的多位号数据表。如图6 所示,位号等内容体现于清单上,一目了然,需要列哪些项,由设计人员决定,修改一个要求只需要执行一次。不过多位号数据表适用于内容固定、变化较小的情况,而且避免关联30个以上的仪表,原因是关联仪表过多,每一次的操作都涉及到数据库中很多数据,保存和刷新时间就会成倍增长。
1. 4 批量修改特定内容
在SPI中,既可以“从点到面”,以一个仪表为出发点,顺次填写数据表中所有内容; 还可以“从面到点”,集中填写( 或修改) 一类数据表的某些特定项,其他无关项并不出现。如图7 所示,SP专门设置了Browser Manager模块,从浏览器的角度执行索引、数据表及安装图等功能,不过更加“片面”和“专业”一些,在准确性和效率上都有所提高[2]。如图8 所示,可以新建一个液位仪表的Browser,专门修改测量范围,涉及到仪表可以属于某单元,也可以是全站的所有液位仪表。这个范围由设计人员决定。
1. 5 计算功能和打包功能
区别于Excel数据表,SPI具备单独的计算模块,可以完成孔板及控制阀等设备的选型计算,结果自动显示在相应数据表上。根据产品生产不同厂家和其他因素,可以对软件内置的计算公式进行适当修正升级,为将来的实时更新留了余地[3]。
另外,完成的数据表可以按照业主或总包方的要求,分门别类地进行打包出版。文件的版次、状态及日期等信息可以针对特定仪表一次性添加。设计人员只需在要求时间节点前完成表格的内容填写,辅助工作交由专人单独完成。体现了SPI对工作模块化的理解,提高了工作效率。
2 应用
自2011 年起,笔者在中东及非洲等多个项目上均推行了SPI软件的应用。通过实践积累与改进,目前在详细设计阶段能自动生成70% 的成果文件。与传统方法相比,效率提高30% 、修改效率提高60% ,提前完成了20% 的工作量( 表1) 。同时,人员前期培训和数据库维护的工作量也相应加大。总的来说,SPI软件的数据库管理和自动辨识功能提高了设计的准确性和质量。用标准数据库模板生成的成果文件格式和数据项统一,有助于实现设计的标准化。
3 结束语
SPI设备驱动 篇5
UVM是Universal Verification Methodology的缩写, 全称即通用验证方法学。
这种方法学是由Cadence、Mentor和Synopsys公司联合推出的验证方法学, 起源于OVM (Open Verification Methodology) [1]。它采用了诸多当前主流验证方法学的优点, 可以为工程师提供随机化的激励产生方式及具有可重构性的验证部件, 以此来提升验证效率。
本论文结合在研发某芯片设计中的SPI总线控制器, 应用UVM搭建仿真验证平台, 完成SPI总线控制器的验证工作, 为以后芯片研制中的SPI控制器验证提供了可重用的验证环境。
1 SPI总线控制器简介
SPI是一种高速的、全双工的同步通信总线, 使用四根通信线路, 极大的节约了芯片的管脚数目, 同时节省了PCB版上布局空间[2]。出于简单易用的特点与特性, 更多的芯片开始集成SPI总线接口。SPI通信双方为主、从关系, 在这种工作模式下, 通常有一个主设备和一个或多个从设备, 设备之间可以用4 线模式 (双向传输时) 或3 线模式 (单向传输时或单主单从工作模式) 连接。
SPI是为环形总线的结构, 主控制设备通过产生移位时钟来发起通讯。通讯时, 主设备通过发送时钟信号来控制数据的输入输出, 数据在总线上由MOSI输出, MISO输入, 数据与时钟信号的关系为用户自主克配置, 这样经过若干次时钟的改变, 完成相应位数的数据传输。
在SPI传输中, 数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器的时钟脉冲而产生的总线控制器输出时钟, 摩托罗拉没有定义任何通用SPI的时钟规范。然而, 最常用的时钟设置基于时钟极性 (CPOL) 和时钟相位 (CPHA) 两个参数, CPOL定义SPI串行时钟的活动状态, 而CPHA定义相对于数据位的时钟相位。CPOL和CPHA的设置决定了数据取样的时钟沿。
2 UVM验证平台搭建
2.1 层次化验证平台
验证平台 (testbench) 通过硬件验证语言[3]搭建而成, 验证工程师在功能验证中, 在被测设计外部完成验证平台的搭建。验证通常采用向被测设计中施加不同的激励, 然后观察DUT的输出结果, 并且将这个结构和要求的期望值做比较, 从而验证DUT是否正确。所以生成各种不同的激励是一个验证平台最重要的功能。
验证工程师通过将各种验证方法集成在验证平台中来提高验证的效率。为了能够集成更多高级的验证方法, 引入了分层的验证平台的方法。这个过程中, 抽象程度随着层次的增高而增大。
1) 信号层是最底层的。DUT属于信号层, 连接DUT和验证平台的信号也属于信号层。
2) 命令层主要包含用于驱动DUT的激励同时监测从DUT中采集的输出信号。
3) 功能层负责将上层的事务接收后分解为数据包发送给命令层, 功能层的另一个作用就是预测结果, 将预测的结果和DUT的输出进行对比。
4) 场景层的作用主要就是产生激励。
验证环境是由以上几个层次相组合构成的。对于不同的DUT这个层次的划分会有所不同。虽然表面上看划分层次好像是提高了验证平台的复杂度, 但是事实上这样做划分了各个模块的功能, 提高了代码功能的清晰度, 有利于验证平台的搭建。
2.2 通用UVM验证平台逻辑结构
一个典型的UVM验证平台[4], 包括driver (驱动器) 、monito (监视器) 、sequencer (序列器) 、agent (代理器) 、scoreboard (计分板) 、reference model (参考模型) 和env (环境) 等通用验证组件 (Universal Verification Component, 简称UVC) 。
UVM预先定义好了一个类uvm_component。UVM平台中的主要部件, driver、monitor、model、scoreboard等都要从这个类来派生而来。通过类派生的形式, 把各个部件等都以树型结构组合起来, 使验证平台的层次清楚, 易于执行操作与更改。
整个UVM验证平台的各个部分就如同一棵倒置的树, 如下面图1 所示。
2.2.1 Driver
UVM验证平台中的driver派生自uvm_driver。driver是UVM验证平台的最基本的验证组件, 也是除reference_model之外最复杂的验证组件。driver会将由sequence受约束随机产生的事务级数据转变成DUT端口级别的数据, 再驱动到与DUT的相连的接口上。
2.2.2 Sequencer
UVM验证平台中的sequencer派生自uvm_sequencer, 并且在定义时会指定要产生的事务级数据类型。sequencer的作用非常简单, 就是将sequence中产生的受约束的随机事务级数据发送给driver。
2.2.3 Monitor
对于一个很大项目来说, 仅仅依靠波形来判断DUT的功能是否正确是不可靠也是不现实的。正确做法应该在验证平台中引入自对比机制, 通过log文件中有无error来确定DUT的功能是否正确, 这就要在验证平台中引入reference model、scoreboard和monitor。monitor是实现监测DUT行为的验证组件, 其派生自uvm_monitor。
2.2.4 Agent
为了提高验证组件的可移植性, UVM中通常将driver、monitor和sequencer封装在一起, 成为一个agent。因此不同的agent就代表了不同的协议。agent派生自uvm_agent。
2.2.5 Reference model
由于UVM验证平台需要自对比机制, 即需要将DUT的输入数据与DUT的输出数据进行对比, 所以需要在验证平台中引入reference model验证组件, reference model直接从uvm_component中派生出来。reference model分两种, 一种是与DUT的功能一样, 相当于用不可综合的风格写出的与DUT功能相同的算法;另一种reference model相当于DUT的逆运算。
2.2.6 Scoreboard
scoreboard派生自uvm_scoreboard, 是一个uvm_component, DUT的输入或输出数据与reference model输出的数据在scoreboard中进行自对比, 对比成功会打印一个标志, 比对失败也会打印一个标志, 这样使验证工程师不用根据波形来判断DUT功能是否正确, 减小了验证工作出错的机率。
3 基于UVM的SPI总线控制器验证平台搭建
结合UVM验证平台的逻辑结构与SPI控制器的工作模式, 搭建完整的验证平台。基于上节UVM通用验证验证平台的搭建, SPI总线控制器UVM验证平台的框图如图2 所示。平台主要包括两个SPI agent和reference model。其中, SPI sequencer用来获取SPI sequence, SPI driver将从SPI sequencer获取的事物级数据, 即总线上预想发送数据的时序要求与数据内容发送给SPI总线控制器即DUT。这些事物级数据包括了对SPI总线控制器的控制寄存器配置以及传输数据的取值。
SPI agent同时将相同的数据给SPI reference Model, 其中的数据为发送到总线上的数据。Out-agent只有Out monitor一个部件, 该部件用来监控SPI总线控制器的数据输出。Scoreboard接收SPI reference Model和Out agent传来的数据, 并进行比较, 输出结果信息。
在验证平台的搭建中, 将sequence分为两个部分。一方面为配置寄存器的cfg_sequence, 一方面为发送数据的配置。通过sequence的细化, 达到将数据与配置分离, 减小实际验证工作中的工作量的目的。
当验证平台向DUT输入信号后, DUT会对输入信号有一定的响应。这个响应需要在记分板中进行判断, 这时就需要有一个对比值, 而这个对比值就是reference model产生的。reference model向Scoreboard的输出为SPI总线控制器要发送的数据。在reference model中不需要考虑SPI总线控制器工作模式的问题, 只关注与需要发送的数据。在rx_monitor中, 通过接收DUT输出的串行数据信号与时钟信号, 判断发送数据的工作模式。在tx_monitor中, 通过接收DUT的输入配置来确定应有的发送模式, 通过对比确定DUT发送功能的正确。
4 总结
通过UVM验证平台验证SPI总线控制器, 经仿真验证, 功能覆盖率及代码覆盖率都达到了要求, 并且该验证环境可以灵活的集成到系统验证环境中, 使SPI模块可以在顶层验证中应用, 做到了可重用验证。
摘要:本文通过应用UVM高级验证方法学, 搭建适用于SPI总线控制器的验证平台和验证环境, 并实现对其不同模式下数据传输的功能验证, 提供了一种可重用的高效验证方法, 有利于提高验证效率, 缩短设计周期。
关键词:UVM,SPI总线控制器,仿真验证
参考文献
[1]柏才明.基于OVM的SoC功能验证系统的设计与实现[D].华中科技大学, 2011.
[2]杨美刚, 李小文.SPI接口及其在数据交换中的应用[J].通信技术, 2007, 40 (11) :385-387.
[3]钟文枫.SystemV erilog与功能验证[M].机械工业出版社, 2010.
SPI设备驱动 篇6
关键词:LPC2119,SPI总线,串行通信,数据采集
1 测试系统框架
智能采集模块主要应用于船舶力学研究,其主要测试途径为应变天平的应力测量,应变天平的主要测试原理是惠斯顿电桥法。在这里由于应变输出为微小的毫伏级电压信号,需直流功率放大,其传统的测试框架如图1所示。
该结构的主要缺点是,系统较复杂,抗干扰能力差。且由于直流功率放大器的引入,会在系统故障时,放大不希望的干扰信号,严重时,将有损坏器件的危险。
所要论及的是基于嵌入式处理器SPI总线接口的串行模数转换模块设计,其测试框架如图2所示。
2 SPI总线技术
SPI是一个全双工的串行接口,三线分别是:时钟线、主机输入/从机输出线、主机输出/从机输入线。设计成可以在一个已知总线上处理多个互联的主机和从机。在一定数据传输过程中,接口上只能有一个主机和从机能够串行通信,串行数据同时输入和输出;同步工作;提供频率可编程时钟;数据传送结束标志。
2.1 SPI串行通信原理
与普通的串行通信不一样,普通的串行通信一次连续传送至少8位数据。而SPI允许数据一位一位的传送,甚至还可以暂停。这是因为SCK时钟线由主控设备控制,当没有时钟跳变时,从设备不采集或传送数据。图3所示为SPI的4种不同数据传输格式的时序。该时序图描述的是8位数据的传输。
LPC2119同AD7714的通信中,LPC2119始终作为主机,AD7714为从机。图4是AD7714的工作时序图,上半部分是读时序,下半部分是写时序。从器件只有在主机发命令时才能接收或发送数据,其数据的传输格式是高位(MSB)在前,低位(LSB)在后。在采样数据方面,通过图4中DIN、DOUT的时序可以看出,其数据是在第一个SCK下降沿起始准备,在SCK的上升沿准备好,所以在主机CPHA的设定上,选择CPHA=1。
3 总线接口设计
智能采集模块由硬件和软件两部分组成,而SPI总线接口在控制器(ARM)与AD芯片之间,接口设计的硬件部分主要包括嵌入式处理器和A/D转换芯片。软件设计部分是在主机即嵌入式处理器里面完成。
3.1 硬件设计部分
AD7714是一个具有低功耗、单电源、三线接口、可编程增益、内置滤波器等功能的高性能模拟前端,主要应用于低频模拟信号采样。3线串行接口与SPI兼容。通过软件可对增益作出设定、信号极性和通道选择作出配置。采集系统处理的是24位,分辨率得到提高。
3.1.1 总线接口配置
图5为外围接口电路,需要强调以下几个方面:
(1)在时钟极性的配置上要弄清楚从设备是在时钟的上升沿还是下降沿接收数据,是在时钟的上升沿还是下降沿输出数据。
(2)RESET逻辑输入端。低电平时有效输入,把器件的控制逻辑、接口逻辑、数字滤波器以及模拟调制器复位到上电状态。系统是通过在DIN输入端写入一系列的1来进行软件复位,使AD7714返回到等待对通信寄存器进行写操作的状态。
(3)CS是片选逻辑输入端,低电平有效,在电路设计中,直接将它接地。
(4)AD780中的SELECT脚,是基准电压的档位选择,3V为高电平输出标准,2.5V为低电平输出标准。
3.2 软件设计部分
3.2.1 软件设计要点
(1)AD7714具有8个片内寄存器,通过对片内寄存器的编程,可以实现通道选择、增益选择、滤波频率选择、转换周期选择、自动校准和A/D转换等功能。对AD7714的任何一种操作,必须首先对通信寄存器写入相应代码,命令格式见表1。
RS2-RS0为寄存器选择位,对寄存器写操作时,由这3位决定对8个片内寄存器中哪一个发生下一次的读或写操作。RS2为最高位,RS0为最低位,RS2、RS1和RS0从000至111分别对应通信寄存器,模式寄存器,滤波器高寄存器,滤波器低寄存器,测试寄存器,数据寄存器,零刻度校准寄存器,满刻度校准寄存器。
(2)读采集数据时,首先输出数据的最高位,最后是数据最低位;在对AD7714内部寄存器进行写操作时,也应首先写入最高位,最后写入最低位。
(3)数据寄存器是16位或24位寄存器。对于8位微处理器来说,则需要分2个字节或3个字节进行读写操作。
3.2.2 关于AD7714的子程序
SPI的读操作:
在编写SPI同AD7714通信的数据读出程序中,需要注意的是,AD7714的寄存器读写模式,即先写通信寄存器,然后再确认下一个寄存器的地址,以及读写操作。在上面的读程序中,reglength是由数据寄存器的运行模式决定的,这里是24位模式。
4 上位机实现
上位机的测试系统控制界面由LabView实现,主要是通过RS485总线与LPC2119间进行数据帧通信,当下位机控制器收到上位机发来的命令后,通过SPI通信进行数据采集,然后将采集到的数据返回上位机,根据数据帧调用数据库里传感器参数,对采集数据进行处理,系统在串口通信、SPI总线通信(数据采集)、校验等过程中,工作稳定。数据处理包括调用传感器参数、FIR滤波。
5 结束语
基于嵌入式处理器LPC2119的智能采集模块,通过SPI接口同串行模数转换芯片之间的通信,和传统的单片机相比,稳定性得到很大提高,扩展很方便,在应变力测试中,采集系统运行情况良好。
参考文献
[1]周立功.ARM嵌入式系统基础教程[M].北京:北京航空航天大学出版社,2005.
[2]周明光,马海潮.计算机测试系统原理与应用[M].北京:电子工业出版社,2005.
[3]程凤霞.基于SPI总线技术的煤矿水害监测系统数据采集系统的设计[J].常州:工矿自动化,2008.
[4]张冰,贺禹.数据采集和智能数据处理系统的分析和设计[J].北京:计算机工程与设计,2004,25(6).
[5]潘新民,王燕芳.微型计算机控制技术[M].北京:电子工业出版社,2006.
SPI设备驱动 篇7
关键词:SPI,高速,NOR FLASH,存储器
在目前所有的非易失性存储器 (PROM、EPROM、EEPROM和Flash) 中, 唯有Flash存储器具有掉电数据不丢失、高速的数据存取速度、容量大、在线可编程、价格低廉以及足够多的擦写次数 (一百万次) 和高可靠性 (十年) 的等优点, 因而已成为当今嵌入式系统应用的首选存储器。其广泛应用于手机、数码相机、闪存盘、便携式音乐播放器和超级本等, 这种存储器芯片一般采用WSOP8和SOP8封装形式, 非常适合小型化市场应用。
1 高速串口存储器芯片的标准接口模式
SPI (Serial peripheral interface) 是一种高速高效率的串行接口技术0。SPI的接口线共4条, 包括时钟线CLK、主机输入/从机输出线SI、主机输出/从机输入线SO及低电平有效的使能信号线CS。串口NOR Flash存储器为了实现不同嵌入式系统的应用, 标准的SPI接口进行了扩展, 一般采用单口、双口和四口三种高速接口模式 (图1) 。
2 高速串口存储器芯片的标准接口电路设计
2.1 高速串口存储器芯片的输入/输出电路设计
SPI模块在芯片中要与CPU以及内部的存储器相连, 因此SPI接口模块需要完成对内部寄存器和存储器的随机访问, 产生数据传输时钟, 串行移位数据输入等操作, 按照图1所示, 扩展的SPI由4条传输线分别为:CS、CLK、IO0、IO1、IO2、IO3。除了时钟信号和使能信号线CS外, 其他的端口都要求既可以输入也可以输出数据。设计中使用带使能信号的双向传输门来实现0, 结构如图2所示。
2.2 高速串口存储器芯片的输入输出控制电路设计
按照系统对SPI的使用要求, SPI内部模块需要完成产生串并转换、传输时钟产生、输入/输出数据锁存、输入/输出计数、输出控制和输入缓存。图3是设计的结构模块图。
为了高速接收数据, 本设计采用二级锁存结构对输入数据进行锁存, 而不采用传统D触发器对数据进行锁存, 由于传统D触发器对时钟边沿要求比较高0, 随着晶体管集成度的提高和工艺的发展, 到达触发器的时钟信号边沿很难保证有足够的陡峭度, 因此会导致工作不可靠, 而且信号传递需要一个完整的时钟周期, 这样必然会影响最后一位的数据传递, 锁存器对时钟上升时间的要求很低, 即它对时钟上升时间不敏感。
如图4, CMDST<7:0>信号就是经过2级锁存后的命令信号, 此信号供命令译码电路使用, 从图1可以看出, 输入信号的数据和地址都是按8位为单位进行数据传输, 因此本文设计八位检查电路, 产生BYTEOK信号对输入数据进行分组, 从而产生输入信号状态机ST<4:0>, ST<0>表示指令输入、ST<3:1>表示地址输入和ST<4>表示其他部分, 从而控制其他部分的协调工作。
在高速SPI存储器应用中, 输出方式一般有单口、双口和四口, 其中双口和四口输出方式最快, 一般可以达到100M以上速度, 为了让数据高速传输, 同时可以选择不用的端口进行输出, 本文首先设计一个数据分组电路SDOMUX对来自存储器的数据DQ进行端口选择, 不用模式选择不用端口, 同时输出控制模块SDOCTRL产生控制信号, 产生输出使能信号OE<3:0>和模式选择信号等等, 如图5所示, 输出计数模块SDOCNT产生输出八位分组信号SDOCNT<7:0>。
2.3 高速二级锁存器设计
本文采用的如图6的高速二级CMOS触发器结构, 使用了二级锁存器, 第一级锁存器锁存SCK为低电平时的DATA, 产生DATA1信号, 然后使用LATCLK信号对DATA1信号进行2级锁存, 使锁存器做短暂的导通;有效时钟沿过后, 锁存器保持锁定状态, 从而实现D触发器的逻辑功能。如图7所示, OUT信号在SCLK上升沿后很多就有数据输入, 而传统D触发器需要等到SCK下降沿后数据才有输出0, 从而实现了数据的高速传输。
3 结论
本文设计的SPI存储器接口电路, 采用了二级锁存器技术, 与传统的D触发器相比, 进一步提高了传输速度, 并减少对时钟上升时间的敏感性, 仿真结果表明了该SPI接口电路符合系统的要求, 具有一定的实际应用价值。
参考文献
[1]左东广, 魏瑞轩.SPI接口技术及应用[J].工业控制计算机, 2001, 14 (2) :9-10.
[2]张锐.SPI接口协议实现的DSP与其它设备的通信技术[J].电工技术, 2003 (11) :26-37.
[3]D.A.Hodges and H.G.Jack son, “Analysis and Design ofDigital Integrated Circuits”, McGraw 2H ill, 1988.