专利名称:用于改进数据吞吐量的写入缓冲器的串行外围接口(spi)装置的制作方法
技术领域:
本发明一般涉及串行外围接口。更具体地,本发明涉及为改进串行外围接口数据吞吐量而避免写入冲突出现。
背景技术:
串行外围接口(SPI)是摩托罗拉MC68HC11A8微控制器中所包含的两种独立的串行通信子系统之一。如同其名称所示一样,SPI主要是用作允许微控制器单元(MCU)与外部设备进行通信。在摩托罗拉串行外围接口系统中的中央元件是包含有移位寄存器和读取数据缓冲器的模块。该系统在传送方向是单向缓冲,而在接收方向是双向缓冲的。该事实就意味着在当前的数据字节传输完成之前,要传输的后续数据字节是不能写入至移位器中的;但是,接收到的数据可传输至并行读取数据缓冲器中,从而移位器可以随意接收第二串行字符。只要在下一串行字符要传送之前从读取数据缓冲器中读取第一字符,则不会产生写入冲突的状态。
如果在传送处于进程中的同时对数据寄存器进行写入,则会出现写入冲突。由于数据寄存器在传送方向并非是双向缓冲的,则对数据寄存器的写入将使得数据直接写入到SPI移位寄存器中。由于这样的写入将会破坏任何处于进程中的传送,从而产生写入冲突出错。传送仍然继续,同时导致出错的写入数据并没有写入到移位器中。在摩托罗拉SPI中避免写入冲突会导致数据吞吐量降低。当请求传送新的数据字节时,软件驱动器必须指示精确的时刻。软件驱动器定位于CPU电平,并且整体考虑MCU到MCU通信中所有主-从寄存器的写入冲突问题。软件驱动器并非位于每一局部SPI上,因此,它会占用系统的时间损失和数据吞吐量。
图1示出代表现有SPI电路图的示意图。SPI子系统100包括串行主移位寄存器102、串行从移位寄存器110以及并行从移位寄存器130。该电路所固有的问题要求软件驱动器要等待当前的数据字节传输完成以及另一个必需的控制命令,以避免写入冲突。
从CPU(未示出)中将并行数据载入到数据输入总线101DataInBus以及串行从移位寄存器110中。当主时钟为高时,串行数据首先移位至主移位寄存器102。当串行数据从串行主寄存器102中串行移位至串行从寄存器110中时,来自于CPU以及数据输入总线101DataInBus中的先前并行数据左移一比特并进入到串行主寄存器102中。在所有的数据从串行输入103偏移至串行主寄存器102之后,并且在先前数据从串行从寄存器110中移回到串行主寄存器102之后,来自于CPU的后续数据以并行的模式载入到串行从寄存器110中。CPU处的软件驱动器(未示出)密切监视这些数据传输,以避免数据出错。
SPI100也还具有软件驱动器(未示出),跟踪SPI传输状态的比特计数器,以及对SPI提供载入控制信号的有限状态机(FSM)控制器,将“接收准备”信号传送给CPU并报告任何写入冲突错误。
当SPI100没有完成将当前数据字节从串行主寄存器102传送到串行从寄存器110中时,写入冲突就发生了,同时后续的数据字节已经传送到串行从寄存器110中。为了避免写入冲突,软件驱动器必需清楚当前数据传送在何时完成,并且等待诸如写入冲突信号、接收存储信号、接收准备好信号等其它控制命令,以允许传送后续的数据字节。因此,时钟信号延长,同时SPI100的数据吞吐量受损。
人们试图解决串行外围接口装置的这些主要缺点。在U.S.专利申请号.4,816,996中由Susan C.Hill等提出名为“Queued Serial Peripheral Interface forUse in Data Processing System”的专利中揭示了这种尝试(以下称为’996专利)。在’996专利中,经过改进的串行外围接口通过使用具有队列指针的存储器装置以及耦合到主从输入/输出缓冲器的数据串行器来减少控制数据处理设备部分所需的干预量。存储装置存储接收到的数据和要传输的数据,以及每一串行传送的命令。依照每一传送所特有的命令来执行该串行传送。该命令将队列指针改为符合该特定的数据字节,并改进传送的效率,从而减少控制器对每一数据传送的干预。换言之,’996专利的串行外围接口包括为改进串行传送而设置的存储器装置、串行器、命令/控制、队列指针以及输入/输出缓冲器。最终的结果就是串行传送有效率,为实现给定的数据传送而减少控制器的干预。
串行外围接口装置的吞吐量需要一种简单经济的改进。
发明内容
相应地,通过串行外围接口装置而实现的本发明目的是在当前数据字节从第一写入缓冲器中经由该装置串行地传送同时,用第二并行写入缓冲器来使能控制处理单元(CPU)以载入后续的数据字节。具有两个并行写入缓冲器的串行外围接口无需等待先前数据字节以完成串行传送,并无需避免数据冲突和后续数据字节传送的其它控制命令。由于软件驱动器无需为在载入要传输的后续字节之前无数据冲突地完成当前数据字节传送而监视主从寄存器,因此第二并行写入缓冲器减轻了软件驱动器的负担。这样,状态机和第二写入缓冲器处于门电平,并且通过将早期的“载入启动”信号提供给软件驱动器来有效地简化软件驱动器的监视功能。
仅仅是在有限状态机控制器检查了两个信号主写入缓冲器的状态以及第二并行写入缓冲器的状态之后,后续的数据字节才会传送到该第二并行写入缓冲寄存器。随后,当载入使能具备且写入缓冲器可用时,状态机控制器命令后续的数据字节从第二并行写入缓冲器传送至主写入缓冲器。当比特计数器计数到先前数据比特(占用主写入缓冲器)串行传送的前一半、而并非等待串行传送完成以及其它的控制命令时,对于第二写入缓冲器来说,载入使能已经具备。因此,第二并行写入缓冲器可避免主时钟延长并且自然地改进了数据吞吐量,而无需使用复杂而昂贵的外部设备。
图1示出了现有技术串行外围接口的详细框图。
图2A和2B示出了依照本发明具有双重写入缓冲器的强化串行外围接口(图2A)的框图,及其相关的有限状态机控制器(图2B)。
图3(在图3A和3B两部分中示出)示出了依照本发明、具有双重写入缓冲器以改进吞吐量的强化串行外围接口的时序图。
图4示出现有技术串行外围接口和依照本发明具有写入缓冲器的串行外围接口的吞吐量性能之间的比较。
图5A到5C示出了依照本发明使用写入缓冲器来改进数据吞吐量的CPU软件驱动器的流程图。
图6A到6C示出了本发明控制有限状态机(FSM)的流程图,该状态机将命令控制信号提供给本发明的串行外围接口,并且与应用本发明的整体系统环境进行通信。
具体实施例方式
参照图2A,新强化模式SPI200框图的示例性实施例包括用作为第二并行写入缓冲器250的新寄存器锁存。它的目的是在先前数据字节仍在传输的同时,在并行输入数据总线DataInBus252上接收输入数据内容并且将其存储。强化SPI200包括串行主寄存器202、串行从寄存器210、并行从寄存器230以及第二并行写入缓冲器250。
串行寄存器202和210耦合在一起,用于通过串行输出SerialOut 216串行地传送数据。(数据也可通过串行输入SerialIn 203串行地接收,并由串行寄存器转换成总线DataOutBus 232的并行输出。)主寄存器202的输出耦合到从寄存器210的输入,而从寄存器210的输出耦合到串行输出SerialOut 216以及通向主寄存器202输入的反馈总线218。串行寄存器202和210最好都包括耦合到时钟触发器207或215(或其它锁存电路)的多路复用器205和213。并行从寄存器230和用作写入缓冲器的并行主寄存器250最好包括时钟触发器或其它锁存电路。所有的寄存器元件,包括它们的连接线,通常都是字节宽度,除了反馈总线218,它只有7比特宽度,且使得从寄存器输出<6:0>偏移至主寄存器输入<7:1>,藉此形成一串行移位寄存器。施加载入控制信号LoadParMst、LoadSerMst、LoadSerSlv以及LoadParSlv,以控制串行寄存器的多路复用器205和213(它们随后从写入缓冲器250的输出中选定输入D1)的输入,并且寄存并行寄存器230和250的时钟输入,如图2A所示。触发器207和215由各自的主和从时钟信号MCK和SCK进行锁存。
除了SPI移位寄存器电路200之外(图2A),还有不同于现有技术中的有限状态机控制器的有限状态机(FSM)控制器260(图2B)。在SPI 200中,有限状态机(FSM)控制器260代替现有技术中的软件驱动器来监视数据传输。有限状态机控制器260使用“传送缓冲器满”(TxBufFull)以及“载入使能”(LDEN)将载入后续数据字节的信号送到第二并行写入缓冲器250中。FSM控制器260同时也对SPI200提供载入控制信号。
串行外围接口装置200在当前数据字节通过其正在传送的同时,用第二并行写入缓冲器250来存储后续的数据字节。因此,具有第二并行写入缓冲器250的串行外围接口装置200无需等待当前数据字节完成串行传送,以及避免写入冲突的其它控制命令。仅仅是在由软件驱动器所驱动的CPU检查了两个新信号FSM260所产生的载入使能(LDEN)的状态以及写入缓冲器(TxBufFull)的状态之后,随后的数据字节才会传送到第二并行写入缓冲器250中。随后,当载入使能(LDEN)具备(高)且并行写入缓冲器250可用(TxBufFull为低)时,软件驱动CPU命令后续的数据字节传送到第二并行写入缓冲器250中。在比特计数器270计数到先前数据字节串行传送的前一半,而并非等待串行传送完成以及其它避免写入冲突的控制命令时,载入使能具备。因此,写入缓冲器250避免了主时钟MCK延长同时自然地改进了SPI装置200的数据吞吐量。
图3(图3A和3B两部分)示出了时序图300,图示了第二并行写入缓冲器250避免主时钟MCK302延长的方式,以及由此而改进了数据吞吐量。如上所述,在表示摩托罗拉芯片的SPI100中出现的主时钟(MCK)延长是由于软件驱动器等待当前数据字节传送完成以及其它避免写入冲突的命令而导致的。
事件a、b、c和d的序列表示当前数据字节的串行传送。由于有第二并行写入缓冲器250,主时钟302没有延长。信号ParMstBus表示并行写入缓冲器250的输出,信号SerMstBus表示串行主寄存器202的输出,同时信号SerSlvBus表示串行从寄存器210的输出,其最高有效位形成了串行输出信号SerialOut,同时其它七比特形成了到串行主寄存器的反馈。
在比特0的时隙期间发生事件j(载入写入缓冲器250)。第二并行写入缓冲器250的载入促使有限状态控制器260将第二写入缓冲器250的状态设为信号316TxBufFull。该信号316 TxBufFull代替了现有技术中其它的避免写入冲突信号。软件驱动器在尝试传输新的字节之前总是应该核对信号316 TxBufFull,以在其没有清除传送循环之前避免出现写入冲突(参见流程图500)。该信号316 TxBufFull在对软件驱动CPU提供必需的反馈的过程中满足单个的字节传送。为了创建通过SPI200接收和传送的数据的连续流,则需要由FSM 260产生另一信号LDEN。
由事件e和f的时序示出并行写入缓冲器250到串行从寄存器210中的载入。由于从时钟信号303 SCK在事件e的时间中持续为高,则由CPU完成的直接到串行从寄存器210中的载入将会导致写入冲突。最好是CPU将后续的数据字节载入到第二并行写入缓冲器250。在串行主载入信号309 LoadSerMst的正脉冲之外的主时钟302 MCK为低。由于串行主寄存器202的多路复用器从写入缓冲器250中接收数据,并且由于载入串行主信号309LoadSerMst为高,则在事件e的时间内串行从寄存器210和串行主寄存器202之间的链接关闭。由于从时钟303 SCK为高,则由时间f所指定,新的数据字节立即传送至串行从寄存器210。可以知道,只有经过事件d,才可以将新的字节载入到串行主寄存器202或者串行从寄存器210(事件e或f)。否则,所接收的字节将会丢失。为了该目的,当请求新的字节传送很安全时,从有限状态机控制器260中发出一信号。该信号为载入使能315 LDEN,同时在传送串行数据比特0、1、2和3期间声明(assert)。在比特槽4、5、6和7期间载入使能315为低。即便软件驱动CPU在载入使能315 LDEN变低之前获取高的载入使能LDEN,三个比特槽(4、5和6)也会对软件驱动CPU给予充分的时间,以通过产生一传送请求信号317 TxREQ脉冲来更新输入数据318 DataInBus和载入并行写入缓冲器250,而不会溢出比特槽7。串行时钟频率必须比主CPU系统时钟314 Phi足够慢。
结论就是,软件驱动CPU在尝试由信号传送请求317 TxBEQ做出的新字节传送请求之前,测试出写入缓冲的状态TxBufFull为低,以及载入使能的状态315LDEN为高。这两个新的信号包含在SPI状态寄存器(未示出)中。由于软件驱动器在当前字节传送期间具有充足的时间来载入要传送的新字节,则主时钟302MCK或从时钟303 SCK不会出现延长,因此就可以实现高的吞吐量。
图4A和4B示出了将代表现有技术的典型SPI 100(图1)和依照本发明的SPI 200(图2)的数据传送相比较的时序图400和401。为了比较,提供了从时钟信号SCK、来自串行主寄存器MOSI的数据输出以及来自串行从寄存器MISO的数据输出。图4A所示的现有技术数据传送揭示了先前数据组和后续数据组之间的多个间隙(gap)410。这些间隙410是由外部的CPU控制命令以及对当前数据字节完成串行传送的相关等待而导致的。间隔410可以更大,这要取决于CPU及其波特率。字节速率越慢,间隙410也会越大,出现写入冲突的机会也就越小。字节速率越快,间隙410越窄,而出现写入冲突的机会也就越高。相比之下,本发明中的从时钟SCK的时序404(以及类似的数据输出)示出没有间隙出现,这是因为写入缓冲器250允许有限状态机控制器260仅仅是等待载入使能信号316(LDEN)以及写入缓冲器315的状态TxbuffFull。
在本发明的另一方面,在图5和图6中示出了在串行外围接口装置200(图4)中串行移动数据的方法。图5A到5C表示软件驱动器的流程图。
在进入SPI子程序之后,传输请求信号TxBEQ的脉冲(步骤502)使得要被传送的数据第一字节从数据输入总线252载入到并行主寄存器(写入缓冲器)250中。并行主寄存器250立即刷新串行寄存器202或210之一。字节以SPI模式0或2载入到串行主寄存器202中。字节以SPI模式1或3载入到串行从寄存器210中。
从SPI状态寄存器中读取载入使能信号LDEN并核对其是否为高(步骤504)。如果不是,则继续核对,直到LDEN为高时为止。当LDEN为高时,信号TxREQ的另一脉冲(步骤506)从数据输入总线252中将下一个数据字节载入到并行主寄存器250中。在LDEN再次变高之前,TxBufFull在先前比特7时隙结束时被清除。因此如果在先前比特7的时隙期间在并行主寄存器250中已经出现新的字节,由CPU测试高的LDEN已经足够,则同时测试TXBufFull为低是多余的。而且,由于SPI串行时钟SCK将停止,在最后的字节之后(当并行主寄存器250中没有新字节时)LDEN将不会再次变高。因此,为了检测出最后字节传输完成,CPU必需测试低的TxBufFull(参见步骤522)。
在将下一字节载入到并行主寄存器之后(步骤506),TxBufFUll在此时仍然为高。该软件从SPI状态寄存器中读取LDEN并核对LDEN是否为低(步骤508),以确知传输正在进行,而避免TxREQ的假触发出现。
其次,CPU从SPI状态寄存器中读取准备信号RxRDY,并且核对RxRDY是否为高(步骤510)。如果不是,则核对继续,直到RxRDY变高为止。当RxRDY为高时,来自并行从寄存器230中的字节通过数据输出总线232传送到RAM上由地址指针所指定的位置(步骤512)。然后地址指针重新指向下一RAM位置(要传送的下一字节和/或下一进入字节的下一位置)(步骤514)。
如果没有要传送的最后字节(步骤516),则流程回复至核对LDEN(步骤504)。否则,从SPI状态寄存器中读取并核对RxRDY,以确知它是否为高(步骤518)。如果不是,则CPU继续核对,直至RxRDY变高为止。当RxRDY为高时,最后接收的字节连同先前字节一同传送至RAM中由地址指针所指定的当前地址。然后TxBufFull被读取并被核对(步骤522),直到它复位为止。然后执行SPI驱动器子程序。
图6A到6C表示控制FSM流程图。当SPI被重新设置时,有限状态机控制器(图2B中的260)开始操作。随后它等待传送请求信号TxREQ,重复核对(步骤604),直至它变高为止。随后,FSM控制器260根据SPI模式来签发LoadSerMst脉冲或LoadSerSlv脉冲(步骤606)。以SPI模式0或2载入串行主寄存器202(当期望实现通过DataOutBus 232的并行输出时使用),并以SPI模式1或3载入串行从寄存器210(当期望实现通过SeiralOut线216的串行输出时使用)。
然后FSM控制器260等待,直至比特0时隙出现为止(步骤608)。图2B中的比特计数器270用作为FSM控制器260的从装置。一旦比特0时隙出现,则载入使能信号LDEN变高(步骤610)。随后FSM控制器260等待TxREQ变高,比特4时隙出现(步骤612和616)。当TxREQ为高时,则控制器260将TxBufFull设置为高(步骤614)。当比特4时隙出现时,控制器260复位LDEN为低(步骤618)。然后控制器260再次等待TxREQ为高和比特时隙(步骤620和624)。但TxREQ为高时,控制器260再次设置TxBufFull为高(步骤622)。当比特7时隙出现时,流程进入至LoadParSlv脉冲(步骤626)。注意,对于比特7时隙来说,传送请求(TxREQ)是不可接受的。即便CPU在比特3时隙将要结束时(仅仅是LDEN要在比特槽4中重设成低之前)采样到了高的LDEN,CPU也必需要有足够的时间(3比特时隙)来签发其TxREQ。
LoadParSlv脉冲(步骤626)将接收到的字节存储在并行输出缓冲器230中。随后接收准备信号RxRDY设为高(步骤628)并且(因为主时钟MCK仍然为低,则以所有的SPI模式)签发出LoadSerMst(步骤630)。控制器260然后等待来自CPU的RxSVD信号(步骤632)。在RxSVD变高之后,控制器260等待比特0时隙再次出现(步骤634)。在比特0时隙期间,信号TxBufFull被重新设置为低,LDEN被设为高(步骤636和638)。
仅仅是由传送结束时出现的SPI复位来终止状态机260。直到这时,控制器的流程回复(步骤640)以等待高的TxREQ以及比特4时隙,重复该流程中的后续步骤,直至所有的字节被传送为止。
虽然对示例性实施例做出了特定的说明,但是本领域一般技术人员可以认识到在本发明的范围内可以做出一定的变化和修改。例如,所示的第二并行写入缓冲器250实现了D型锁存。一个技术人员可以使用其它类型的锁存来实现。
还有,在另一实施例中,在本发明较佳实施例中采用的有限状态机控制器260可以由可编程逻辑阵列(PLA)或微处理器来代替,而不会改变本发明的实质。
权利要求
1.一种串行外围接口装置,包括耦合在一起的多个移位寄存器,用于串行地传送数据;耦合到所述多个移位寄存器的写入缓冲器;耦合到所述多个移位寄存器的比特计数器,用于跟踪通过所述装置传送的数据字节的比特字段;以及耦合到所述装置的有限状态机控制器,用于控制通过其中的数据传输,并通过检查所述比特计数器的状态和所述写入缓冲器的状态来使后续数据字节能载入所述写入缓冲器。
2.如权利要求1所述的串行外围接口装置,其特征在于,所述多个移位寄存器包括串行主移位寄存器、以及耦合到所述串行主移位寄存器的输出的串行从移位寄存器,用于串行地传送数据。
3.如权利要求2所述的串行外围接口装置,其特征在于,每一个所述主和从串行移位寄存器都包括耦合到时钟控制触发器的多路复用器。
4.如权利要求2所述的串行外围接口装置,其特征在于,所述多个移位寄存器还包括耦合到所述串行主移位寄存器的输出的并行从移位寄存器。
5.如权利要求4所述的串行外围接口装置,其特征在于,所述并行从移位寄存器包括时钟控制触发器。
6.如权利要求2所述的串行外围接口装置,其特征在于,所述写入缓冲器耦合到所述串行从移位寄存器的输出。
7.如权利要求1所述的串行外围接口装置,其特征在于,所述有限状态机控制器还控制所述数据字节向所述多个移位寄存器的载入。
8.如权利要求7所述的串行外围接口装置,其特征在于,所述有限状态机控制器对所述比特计数器的状态作出响应,从而仅仅在其中传送当前数据字节的第四比特的时隙时才允许后续数据字节载入到写入缓冲器中。
9.如权利要求1所述的串行外围接口装置通过总线接口耦合到控制处理单元和存储器模块,用于在所述写入缓冲器的输入处从其接收数据字节。
全文摘要
一种串行外围接口装置(200)具有第二并行写入缓冲器(250),以在当前数据字节(DO<7:0>)通过一对串行移位寄存器传送的同时载入后续的数据字节(DataInBus<7:0>),同时避免出现写入冲突。当比特计数器计数到了先前数据组串行传送的前一半时,则具备了控制从第二并行缓冲器到移位寄存器的传送的载入使能(LoadSerSlv)。因此,第二并行写入缓冲器避免了主时钟延长,同时增加了系统的数据吞吐量。
文档编号G06F13/40GK1882902SQ200480034506
公开日2006年12月20日 申请日期2004年11月12日 优先权日2003年11月25日
发明者E·兰布朗克, B·F·弗洛明 申请人:爱特梅尔股份有限公司