一种SPI接口存储器执行程序方法和装置
技术领域
本发明涉及SOC集成电路设计领域,尤其是一种SPI接口存储器执行程序方法和装置。
背景技术
一个典型的嵌入式应用架构,通常由一个主控芯片和一个以上的存储器组成。并行存储器的地址总线和数据总线是分开设计的,总的管脚达到几十根,这种设计虽然具有较高的数据传输速度,但是由于其引脚多,互联成本较高等因素,应用的方便性和适用性都受到限制,制约了并行存储器在SOC单芯片系统等嵌入式领域广泛应用。
随着采用串行SPI接口的存储器的技术逐渐发展,主流的串行存储器的传输速度已经达到80Mbps的水平。这个传输速度在低级别的数据传输应用是足够的,但是如果需要在串行存储器上直接运行程序或者高速传输数据,这个速度还是不够的。市面上出现了一些多通道的SPI接口的存储器,例如华邦公司的4通道的SPI FLASH存储器,该存储器兼容原来的单通道SPI接口,管脚与原设计采用相同的6条信号,但其支持的传输速度却是原来的4倍,达到320Mbps。多通道的串行存储器具有更高的传输速度,可以满足直接在存储器上运行程序及算法的需求。串行SPI接口存储器的信号管脚数目为6根,低管脚开销使得串行存储器在嵌入式系统中的应用极其方便,降低了板级设计成本,为串行存储器在嵌入式系统和SOC单芯片系统领域中的推广应用,创造了有利的条件。
但是,现有的SPI接口存储器不能支持在其上直接执行程序。当一个嵌入式系统或者SOC单芯片系统需要运行存放在串行存储器上的程序时,必须首先将存储器中的这些程序拷贝到SDRAM或SRAM等可直接运行程序的存储器空间,才可以执行。这种方式不仅挤占了嵌入式系统或芯片内宝贵的存储器资源,而且把串行存储器功能限制在保存数据上。无法直接用于运行程序,是当前串行存储器接口技术的重大缺憾。
发明内容
针对现有多通道SPI接口存储器技术不能用作程序执行载体的不足,本发明的目的是,提供一种多通道SPI接口存储器执行程序方法和装置,并在主处理器CPU与多通道SPI接口存储器之间,构建一套完整的指令、数据交互机制,以及执行这种交互的总线通道和控制逻辑,使CPU不仅能快速对多通道SPI接口存储器进行数据存取操作,还能在多通道SPI接口存储器上执行程序,和对多通道SPI接口存储器进行其他必要的操作和控制。此外,根据实际使用中对处理效率的要求、和对单通道器件的兼容性,本发明在采用多通道SPI接口存储器解决方案的基础上,还应当提供与单通道SPI接口存储器兼容的技术措施,以及提高实际使用效率的解决办法。
为了达到上述目的,本发明所采用的第一方面的技术手段是,提供一种多通道SPI接口存储器执行程序的控制方法,包括如下步骤:
1)根据处理器CPU对多通道SPI接口存储器进行操作的特点,将这些操作概括为“空闲”、“指令”、“地址”、“空操作”、“等待”、“数据”6个工作状态。并结合多通道SPI接口存储器控制机制,规划出这些工作状态之间相互转换的各种操作,作为设计状态机(控制逻辑)的依据;
2)对步骤1所述6个工作状态所处的工作条件进行量化,这些工作条件包括:
1_采用的通道模式;
2_各种工作状态所需的工作节拍。
3)分别设立控制通路和数据通路,当CPU与多通道SPI接口存储器信息交互时,令数据存储空间操作与寄存器空间操作彼此分离;
4)配置一个读/写操作寄存器,用以控制从多通道SPI接口存储器读出或者写入数据。读/写操作寄存器内应当含有步骤2所规定的工作条件;
5)逐一配置指令操控寄存器、写入参数寄存器、读出参数寄存器,以便对多通道SPI接口存储器内部寄存器进行操作,包括向存储器内部寄存器写入或者读出内部参数。写入参数寄存器、读出参数寄存器的开启和关闭,由指令操作寄存器管理;
6)配置一个时钟配置寄存器,用来存放使CPU与多通道SPI接口存储器时钟匹配的参数;
7)按照步骤1给出的工作状态转换流程图、以及步骤3确定的在不同通路交互不同信息的规则,确定状态机(控制逻辑)。使得推动CPU与多通道SPI接口存储器信息交互的各项操作,在规定的通路、按规定的工作节拍进行;
8)配置一个指令寄存器,对CPU指令进行解析:
1_如果CPU指令访问多通道SPI接口存储器内部存储空间,
1/开通数据通路,进行数据读/写操作;
2_如果CPU指令访问多通道SPI接口存储控制器的寄存器空间
1/打开控制通路,进行内部参数的读/写操作。
为了提高大数据量多通道SPI接口存储器读写操作的效率,可以对本发明所提供的方法中步骤1进一步改进。具体做法是:在所述6个工作状态中,再增加1个辅助“数据”工作状态,形成总共7个工作状态。在大数据量读写操作时,新增的辅助“数据”状态(记作“数据_1”)与步骤1所述的“数据”工作状态(记作“数据_0)形成切换操作,并规划出改进后的工作状态转换的21种操作流程。使来自数据通路的大量读/写数据在该21种操作状态转换控制下,同时与CPU和存储器进行数据交互,以提高大数据量处理的传输效率。
可以对步骤4~6中所述的各种寄存器具体加以规定:读/写操作寄存器与指令寄存器具有相同的数据位结构,这些数据位存放的信息包括:1)工作状态的通道模式、2)各种工作状态所需要的工作节拍、3)多通道SPI接口存储器指令等数据位信息;指令操作寄存器的数据位具有:1)控制写入参数寄存器启闭的数据位、2)控制读出参数寄存器启闭的数据位、2)启动加/解密模块的数据位等其他与指令操作有关的控制标志位;写入参数寄存器的数据位具有:1)对存储器内部寄存器进行参数写入的数据位、2)擦除存储器内部数据的地址数据位;读出参数寄存器应有存放存储器内部参数读出信息的数据位;时钟配置寄存器含有存放分频数、旁路等信息的数据位。
为了使上述多通道SPI接口存储器执行程序的控制方法得到实施,本发明所采用的第二方面的技术手段是,在主处理器CPU与多通道SPI接口存储器之间,构建基于硬件的、能够实现上述方法所述行为机制的多通道SPI接口存储控制器。所述多通道SPI接口存储控制器包括:
9)数据通路接口、控制通路接口、主控制器、以及寄存器组、波特率控制逻辑。寄存器组内含本发明所述方法步骤4~6中所规定的各种寄存器;
10)CPU总线分别与数据通路接口21、控制通路接口22相连;数据通路接口通过数据通路及数据控制线与主控制器相连;控制通路接口一路通过控制通路与寄存器组相连,另一路通过指令控制线2与主控制器相连;寄存器组一路通过寄存器总线与主控制器连接,另一路通过数据总线与波特率控制逻辑连接;主控制器与时钟线相连,另外引出多通道SPI接口存储器总线,与多通道SPI接口存储器相连。
较佳地,CPU总线采用32位BVCI总线;数据通路包含24位地址线和64位数据线;控制通路 包含3位地址线和32位数据线;数据控制线与指令控制线均为2位的同步信号控制线;寄存器总线包含5组32位的总线。其中3组为单向传输的控制总线,2组为双向传输的数据总线;数据总线由8位数据线构成;多通道SPI接口存储器总线是6位的SPI接口协议总线。
为了保证多通道SPI接口存储器内所存内容的信息安全,可以在数据通路上接入加/解密模块,用于将数据通路上准备写入多通道SPI接口存储器的数据先经加/解密模块加密,从多通道SPI接口存储器读出的加密数据在送往数据通路接口之前进行解密;寄存器组通过加/解密控制线与加/解密模块相连接,用于控制加/解密模块的开启或关闭。
主控制器内部包括:同步逻辑、译码逻辑、指令启动控制模块、主状态机、数据接受模块、指令/数据发送模块、数据/地址缓冲区。它与外部的连接是:同步逻辑与数据控制线、指令控制线相连;译码逻辑与寄存器总线中的控制总线相连;数据/地址缓冲区与数据通路、以及寄存器总线中的数据总线相连。内部工作方式及连接关系是:
1_来自寄存器总线的指令信息,被译码逻辑译码后,经由控制总线进入由控制逻辑组成的主状态机;同步逻辑使来自数据通路接口、或控制通路接口的控制信号同步,经过同步控制总线送入指令启动控制模块,致使指令启动控制模块在适当的时刻,通过启动信号线向主状态机发送指令启动信号;
2_数据接收模块分别与主状态机和数据/地址缓冲区相连,经由数据接收控制总线与主状态机进行控制反馈。数据接收模块通过多通道SPI接口存储器总线读出SPI存储器中的数据或者存储器操作参数,经由数据接收总线将读出的数据或者存储器操作参数放入数据/地址缓冲区后,经由数据通路、或者寄存器总线中的数据总线、控制通路,发送给CPU总线;
3_指令/数据发送模块分别与主状态机和数据/地址缓冲区相连,经由指令/数据发送控制总线与主状态机进行控制反馈。来自数据通路的写入数据、或者来自寄存器总线的存储器操作参数,经过数据/地址缓冲区在指令/数据发送模块的操作下,通过多通道SPI接口存储器总线向存储器写入数据或者存储器操作参数;
为了提高多通道SPI接口存储器大数据量读出和写入效率,可以对主控制器24进一步改善。具体做法是:增加地址预判逻辑,监控数据通路上地址信息的变化情况,并做出预判断。当下一次访问地址为本次地址的4Byte累加时,判断为连续地址。此时,地址预判断逻辑通过预判控制线将预判断信息发送给主状态机,使主状态机中止指令和地址发送,控制数据接收模块或指令/数据发送模块直接从多通道SPI接口存储器读出、或者写入数据。
本发明有益的效果:
1、具有与并口存储器相同的直接执行程序的功能,却大幅度减少外部引脚资源。使多通道SPI接口存储器集成到整个嵌入式架构时,在缩小硅片面积、提高系统可靠性等方面具有明显优势。
2、兼容各类单、双、四通道多通道SPI接口存储器的所有指令,使多通道SPI接口存储器从数据存储载体拓展到程序运行载体。嵌入式系统无需借助其他存储介质进行引导,可直接在存储器执行应用程序。
3、降低了嵌入式系统对SDRAM和片内RAM的依赖,提高了SOC系统的灵活度,有助于嵌入式芯片的二次开发应用。
4、对存储器中的程序或数据加密,起到数据保护的作用,提高了嵌入式产品的安全性。
附图说明
图1是多通道SPI接口存储器操作过程中工作状态相互转换的流程示意图。
图2表示在一个较佳实施例中,新增辅助数据状态后工作状态相互转换的流程示意图。
图3是多通道SPI接口存储控制器内部模块构成和连接关系示意图。
图4是本发明在一个较佳实施例中,在多通道SPI接口存储控制器的数据通路接口与主控制器之间,接入了加/解密模块后的连接关系示意图。
图5是主控制器的内部结构和连接关系示意图。
图6是将本发明所提供的技术方案集成到一款SOC芯片内的示意图。
具体实施方式
下面结合附图和实施例再对本发明的具体实施加以说明。
1、图1是本发明对于多通道SPI接口存储器操作过程中工作状态的解析,以及这些工作状态相互转换的流程。经实际操作分析,只要应用图中所示的6种工作状态、17种转换方式(单向箭头为1种,双向箭头为2种),就能覆盖所有操作。
2、附图2是为了提高多通道SPI接口存储器大数据量读写操作的效率,在一个较佳实施例中对本发明提供的方法进一步改进。增加一个辅助“数据”工作状态,在图中表示为“数据_0”、“数据_1”。同时规划出这些工作状态之间相互转换的21种操作。来自数据通路的大量读/写数据在图中所规划的主状态机的控制下,可以同时与CPU和SPI接口存储器进行数据交互,以此提高处理效率。
3、附图3是为了使多通道SPI接口存储器控制方法得到实施,而提供的多通道SPI接口存储控制器20。采用硬件逻辑完成CPU同多通道SPI接口存储器的命令交互,具有较强兼容性,支持现有各种主流存储器。该控制器连接在主处理器CPU与多通道SPI接口存储器之间,其中包括:数据通路接口21、控制通路接口22、主控制器24、以及寄存器组26、波特率控制逻辑28,CPU总线201分别与数据通路接口21、控制通路接口22相连,数据通路接口21通过数据通路202及数据控制线204D与主控制器24相连;控制通路接口22一路通过控制通路203与寄存器组26相连,另一路通过指令控制线204C与主控制器24相连;寄存器组26一路通过寄存器总线205与主控制器24连接,另一路通过数据总线206与波特率控制逻辑28连接;主控制器24与时钟线207相连,主控制器24引出多通道SPI接口存储器总线208,多通道SPI接口存储器总线208用于与多通道SPI接口存储器相连。下面分别从控制通路、数据通路、连接总线、加解密控制、寄存器设置等几个方面,详细加以说明:
1)控制通路203的作用是,设置多通道SPI接口存储控制器中的寄存器组26,以及其它对多通道SPI接口存储器控制操作的实现通路。程序可以配置多通道SPI接口存储控制器的寄存器来发送各种SPI命令,比如擦除、读写存储器内部寄存器、读ID等。除了对存储器存储空间的正常读写访问之外的任何指令都通过控制通路发送。
2)数据通路202的作用是,使多通道SPI接口存储器达到访问并口设备的效果,总线上给出访问地址,可以对该地址进行读写操作。除了速度没有并口设备快,别的没有什么区别,因为并口设备地址总线和数据总线分开并且并行传输,而多通道SPI接口存储控制器和多通道SPI接口存储器之间最多4个管脚来传输地址和数据。
3)在本发明采用的一个较佳实施例中,CPU总线201采用32位BVCI总线;数据通路202包含24位地址线和64位数据线;控制通路203包含3位地址线和32位数据线;数据控制线204D与指令控制线204C均为2位的同步信号控制线;寄存器总线205包含5组32位的总线。其中3组为单向传输的控制总线,2组为双向传输的数据总线;数据总线206由8位数据线构成;多通道SPI接口存储器总线208是6位的SPI接口协议总线。
4)加密算法由硬件加/解密模块23实现,可以对存储器中的数据或程序进行加解密。下载 数据到存储器里面可以控制对其加密保护,可以全部加密,也可以只加密其中部分数据,可以有效保护用户的数据。如果需要读取经过加密的数据,需要使用我们的芯片并且知道加密的具体位置才能够正确解密。用加密控制寄存器来控制开启加密算法对存储器数据进行加密,在对存储器写入数据的同时进行加密,在从存储器读出数据的同时进行解密。
5)在默认状态下,不对寄存器组26进行任何配置,可以直接将SPI接口存储器当作RAM读取数据,因为大多数SPI接口存储器的基本读操作命令都是“03”,本实施例的初始化命令就是“03”。CPU可以直接通过32位总线读取SPI接口存储器的数据意味着可以直接运行存储器上的程序。以下是串行寄存器组的寄存器定义:
名称 |
地址偏移 |
访问方式 |
复位值 |
描述 |
SPI_INST |
0X00 |
W/R |
0X00000000 |
SPI指令寄存器 |
SPI_INST_SET |
0X04 |
W/R |
0X00000000 |
SPI指令操作控制寄存器 |
SPI_SPEC |
0X08 |
W/R |
0X00000000 |
SPI写入参数寄存器 |
SPI_CLKGEN |
0X0C |
W/R |
0X00000000 |
SPI时钟配置寄存器 |
SPI_DATA_ADDR |
0X10 |
W/R |
0X00000000 |
SPI读出参数据寄存器 |
SPI_INST_READ |
0X14 |
W/R |
0X03003000 |
SPI读/写操作寄存器 |
以下是每个寄存器的具体内容:
●SPI指令寄存器(SPI_INST),SPI读/写操作寄存器(SPI_INST_READ)
名称 |
访问 |
复位值 |
内容分类 |
描述 |
SPI_INST[1:0] |
R/W |
0x0 |
Inst传输模式 |
00:single 01:dual 10:quad |
SPI_INST[3:2] |
R/W |
0x0 |
Address传输模式 |
00:single 01:dual 10:quad |
SPI_INST[5:0] |
R/W |
0x0 |
Dummy传输模式 |
00:single 01:dual 10:quad |
SPI_INST[7:6] |
R/W |
0x0 |
Wait传输模式 |
00:single 01:dual 10:quad |
SPI_INST[9:8] |
R/W |
0x0 |
Data传输模式 |
00:single 01:dual 10:quad |
SPI_INST[11:10] |
|
|
|
保留 |
SPI_INST[13:12] |
R/W |
0x3 |
Address number
|
00:0Byte 01:1Byte
10:2Byte 11:3Byte |
SPI_INST[15:14] |
|
|
|
保留 |
SPI_INST[18:16] |
R/W |
0x0 |
Dummy number |
000:0Byte 001:1Byte 010:2Byte 011:3Byte 100:4Byte 101:5Byte |
[0057]
|
|
|
|
110:6Byte 111:7Byte |
SPI_INST[19] |
|
|
|
保留 |
SPI_INST[22:20] |
R/W |
0x0 |
Wait number |
000:0Byte 001:1Byte 010:2Byte 011:3Byte 100:4Byte 101:5Byte 110:6Byte 111:7Byte |
SPI_INST[23] |
R/W |
0x0 |
Inst number |
0:0Byte 1:1Byte |
SPI_INST[31:24] |
R/W |
0x03 |
|
Inst内容 |
●SPI指令操作控制寄存器(SPI_INST_SET)
名称 |
访问 |
复位值 |
描述 |
SPI_INST_SET[0] |
R/W |
0x0 |
命令发送标志(高有效),发送完指令 后会自动清0 |
SPI_INST_SET[3:1] |
|
|
保留 |
SPI_INST_SET[4] |
R/W |
0x0 |
Spec命令有效标志(高有效),发送完 指令后会自动清0 |
SPI_INST_SET[7:5] |
|
|
保留 |
SPI_INST_SET[8] |
R/W |
0x0 |
控制通路数据传输有效标志(高有效), 发送完指令后需要手动清零 |
SPI_INST_SET[11:9] |
|
|
保留 |
SPI_INST_SET[12] |
R/W |
0x0 |
数据读写加密开关(高为加密),如果 写入时加密开启,读出时也要加密开启 才能读出。 |
SPI_INST_SET[13] |
R/W |
0x0 |
写入操作和读取ID等命令操作时(需 要长拉CS的操作)需要将其置高,发 送完指令后需要手动清零 |
SPI_INST_SET[31:14]
|
|
|
保留 |
●SPI写入参数寄存器(SPI_SPEC)
名称 |
访问 |
复位值 |
描述 |
SPI_INST_SET[23:0] |
R/W |
0x0 |
SPI接口存储器内部配置寄存器(存放需要往 存储器内部写入的值,读取内部寄存器需要从 SPI_DATA_ADDR寄存器读取) 如果是擦除命令,该24位数据为擦除命令的 地址。如果是写内部寄存器命令, SPI_INST_SET[23:16]为寄存器1, SPI_INST_SET[15:8]为寄存器2 发送字节顺序为SPI_INST_SET[23:16], SPI_INST_SET[15:8],SPI_INST_SET[7:0] |
SPI_INST_SET[31:24]
|
|
|
保留 |
[0062] ●SPI时钟配置寄存器(SPI_CLKGEN)
名称 |
访问 |
复位值 |
描述 |
SPI_INST_SET[7:0] |
R/W |
0x0 |
SPI时钟分频数 |
SPI_INST_SET[8] |
R/W |
0x0 |
SPI时钟bypass(低电平为bypass模式) |
SPI_INST_SET[31:9] |
|
|
保留 |
●SPI读出参数据寄存器(SPI_DATA_ADDR)
名称 |
访问 |
复位值 |
描述 |
SPI_INST_SET[7:0] |
R/W |
0x0 |
SPI控制通路数据寄存器,主要读取SPI接口 存储器内部寄存器值以及各种序列号ID等, 每次读取一个字节。如果ID内容有多个字节, 需要连续访问该地址。 |
SPI_INST_SET[31:8] |
|
|
保留 |
6)通过这些寄存器,可以配置出任何现有SPI接口存储器协议的命令。譬如要发送一条存储器块擦除命令时,首先配置SPI_INST寄存器描述该命令的内容和格式,再配置SPI_SPEC的值为擦除的块地址,最后配置SPI_INST_SET来启动该命令。当主控制器接收到启动命令时,会发送出一条支持SPI协议的块擦除命令。
7)除了读写SPI接口存储器数据的命令可以自动完成外,其他命令都需要上面的步骤来完成,这是SPI接口存储器特性所决定。本发明最大的特点是SPI协议命令可配性和数据读写操作自动完成。只要BVCI总线发起一个对SPI接口存储器空间的读写请求,主控制器会自动检测到并且发送SPI协议的命令给存储器,然后完成同存储器的交互并且返回数据到BVCI总线由CPU取回。这极大方便了对存储器的数据操作,用户可以不关心具体底层的SPI协议从而达到对SPI接口存储器空间的访问。
8)寄存器配置不同的SPI传输波特率,通过波特率控制逻辑28可以满足不同的应用。使用最快的SPI时钟可以配到和系统时钟一样快。可以做到在SPI接口存储器运行程序过程中配置时钟。
4、附图4是本发明在一个较佳实施例中,为了提高多通道SPI接口存储器中数据内容的安全性,在数据通路202上接入加/解密模块23。其作用是:使数据通路202上准备写入存储器的数据先经加/解密模块23加密;所有从存储器读出的加密数据在送往数据通路接口21之前,先进行解密。加/解密模块23的开启或关闭,由寄存器组26加以控制。对寄存器组26进行配置后,通过加/解密控制线209可以随时开启或者关闭加/解密模块23。
5、图5是主控制器的内部结构和连接关系。主控制器24内部包括:同步逻辑31、译码逻辑32、指令启动控制模块33、主状态机34、数据接受模块35、指令/数据发送模块36和数据/地址缓冲区37,它与外部的连接是:同步逻辑31与数据控制线204D、指令控制线204C相连;译码逻辑32与寄存器总线205中的控制总线相连;数据/地址缓冲区37与数据通路202、以及寄存器总线205中的数据总线相连,内部工作方式及连接关系是:1、来自寄存器总线205的指令信息,被译码逻辑32译码后,经由控制总线303进入由控制逻辑组成的主状态机34;同步逻辑31用于将来自数据通路接口、或控制通路接口的控制信号同步,经过同步控制总线301送入指令启动控制模块33,致使指令启动控制模块33在适当的时刻,通过启动信号线302向主状态机34发送指令启动信号;2、数据接收模块35分别与主状态机34和数据/地址缓冲区37相连,经由数据接收控制总线304与主状态机进行控制反馈;数据接收模块35通过多通道SPI接口存储器总线208读出SPI存储器中的数据或者存储器作参数,经由数据接收总线306将读出的数据或者存储器操作参数放入数据/地址缓冲区37后,经由数据通路202或者寄存器总线205中的数据总线、控制通路203,发送给CPU总线201;3、指令/数据发送模块36分别与主状态机34和数据/地址缓冲区37相连, 经由指令/数据发送控制总线305与主状态机进行控制反馈,来自数据通路202的写入数据、或者来寄存器总线205中数据总线上的存储器操作参数,经过数据/地址缓冲区37在指令/数据发送模块36的操作下,通过多通道SPI接口存储器总线208向多通道SPI接口存储器写入数据或者存储器操作参数。
主状态机34负责控制串行传输SPI协议指令的工作状态,将SPI命令分成指令阶段(inst),地址阶段(address),空操作阶段(dummy),等待阶段(wait),数据阶段(data)。主状态机控制指令及数据发送模块和数据接收模块通过SPI六根管脚同存储器交互。指令启动控制模块33根据CPU的要求来启动同SPI接口存储器的交互。译码模块32将SPI_INST或者SPI_INST_READ中的值解码告诉主状态机以相应的状态来发送相应的命令。同步逻辑31将BVCI接口的控制信号跨时钟域工作在比系统时钟慢的SPI时钟下。指令及数据发送模块36负责按照SPI协议发送指令、地址和数据。数据接收模块35负责接收来自SPI接口存储器的数据。数据/地址缓冲区37暂时保存接收或者待发送的数据和地址。主状态机34是主控制器24的控制调度中心,其工作机制叙述如下:
1)主状态机34的状态切换参见附图2。本发明根据常用SPI协议指令的特点,将主状态机设计为七个状态,分别是空闲(state_idle)、指令(state_inst)、地址(state_addr)、空操作(satae_dummy)、等待(state_wait)、数据_0(state_data0)、数据_1(state_data1),可以分别控制指令/数据发送模块36和数据接收模块35的工作。当主状态机34检测到由指令启动控制模块33发来的指令启动信号时,主状态机34从idle进入到inst状态开始一次指令的发送。但是如果是数据读写传输,而且地址连续的话,idle状态可以直接跳转到data0或者data1传送数据任何一个状态,结束传输后根据寄存器的配置可以跳往下一个状态或者跳回到idle等待CPU发起下一个SPI指令传输。根据需要发送的不同SPI指令,对寄存器有不同的配置,当指令没有地址部分,状态机会直接从idle跳转到dummy,如果指令不包括dummy,直接跳转到wait甚至data0。引入state_data0和state_data1的目的是为了提高SPI传输效率,数据buffer0和数据buffer1都具有32位,两个buffer的数据轮换发送或者接收作为缓冲,有效地避免了中间的等待时间,可以完全做到不间断数据传输。
2)主状态机34负责各个时刻控制器的工作,控制指令/数据发送模块36发送SPI协议的指令同SPI接口存储器交互,同时控制数据接收模块35接收来自SPI接口存储器的数据,接收或者待发送的数据/地址保存在缓冲区37中。由于总线接口方面时钟一般高于串行接口的波特率时钟,因此需要经过同步逻辑31使BVCI接口的控制信号能够被主控制器采到。指令启动控制模块33主要负责发起一次SPI协议的指令传输,当指令操作控制寄存器SPI_INST_SET发出启动命令或者BVCI数据通路总线上发出读写请求时,指令启动控制模块33会做出响应启动主状态机进入指令发送状态。译码逻辑32主要负责将SPI_INST或者SPI_INST_READ中的值解码告诉主状态机34以相应的状态来发送相应的命令。
3)当总线上对SPI接口存储器空间有访问请求时,能够自动启动SPI指令发送模块将总线上的地址加载到SPI规格的命令中发送,当前32位数据传输结束后会有反馈信号通知总线。总线上就像对RAM进行访问一样方便,软件不需要任何开销,全部由硬件完成。只有数据通路完全达到像RAM一样操作时,才能进行真正的程序在SPI接口存储器上运行,因为程序运行只会不断地访问新的地址空间来获取指令,程序不可能一边运行一边配置满足SPI协议的指令,用户甚至不知道在访问SPI接口存储器,因为他除了发出访问地址之外只要等数据回来即可,根本不用理会对存储器的各种复杂的SPI协议命令。
4)由于BVCI总线有一个特点,就是它的请求和响应分开操作,在一个地址访问的时候, 控制器收到读请求后去和存储器交互准备数据,总线在等待数据的同时总线已经将下一个读请求发送过来了,当控制器准备好数据后会对总线发出一个响应,此时,控制器才会接收下一个请求。在控制器准备数据的时候地址预判断模块就会对当前地址和下一个请求地址比较,如果两个地址相差4(比如地址是000004和000008),则认为是连续的burst访问,主状态机就会在data0和data1之间切换,而不是回到idle重新发送命令地址等,这样充分利用了SPI能够连续传输递增地址的数据的特点,可以只发送一次指令和地址。为了做到不间断的数据传输,本发明还引入了一个数据地址预判断模块。在一个较佳实施例中增加了地址预判断逻辑38。因为SPI协议特点是便于连续地址的访问,只发送一次初始地址,之后全部是数据,这样传输效率可以保持比较高。当通过串行控制器传输数据时,如果我们对总线上的下一个访问地址进行预判断,当地址是上一次地址的4Byte累加时,就认为是连续地址,控制器会做出相应处理使指令发送模块不重新发送指令和地址,而直接发送或者接受数据。这样做的根本目的是使SPI接口存储器传输数据发挥最大效率,不暂停传输,尽量采用burst传输。
6、图6是将本发明所提供的技术方案集成到一款指纹识别SOC芯片的挂接示意图。TPS375是一款指纹识别SOC芯片,里面集成了多通道SPI接口控制逻辑,外挂一款4通道的SPI接口FLASH,型号为W25Q80,是华邦公司新推的一款多通道SPI接口存储器。具体实施步骤如下:
1)首先下载FLASH程序。在ROM中有程序负责从USB口通过多通道SPI接口控制器将指纹采集拼接以及比对算法和USB设备驱动程序等下载到FLASH中。由于FLASH是页操作模式,一次只能写入一页(256Byte),而且每次写操作前需要发送写使能命令,写之前需要将该空间擦除为1,写之后需要发送检测FLASH寄存器是否写完,这些FLASH的固有特性使FLASH下载需要特殊的程序来完成。
2)当FLASH下载完毕,断电,重新启动芯片,然后跳转到串行FLASH空间执行之前下载到里面的程序。首先运行程序按照默认的单通道来“03”指令来取指运行,而且速度保持在20M,因为考虑到需要兼容各个厂家的SPI单、双、四通道FLASH支持情况,当串行FLASH程序执行到配置快速模式时,CPU将控制器配置成320Mbps的4通道模式后,可以由示波器观察到SPI引脚上的时钟和数据明显变快,接下来全部按照4通道320bps的速度运行串行FLASH中的程序。
3)由于FLASH里面有USB设备驱动和指纹处理相关的程序,将USB插上电脑,通过USB接口,就可以执行PC机中的上位机软件,找到指纹识别设备。当PC检测到USB设备后,在FLASH中程序运行采集指纹的程序,该程序负责从一款光学指纹传感器采集图像,并且通过USB口在PC上显示。同时,可以将指纹图像保存到串行FLASH中的数据空间,当指纹仪采集到新的指纹时,可以同FLASH中的指纹数据比对计算。指纹处理需要的特征提取、比对、搜索等算法都在FLASH空间中执行。
4)整个指纹识别程序在串行FLASH上运行效果良好,程序大约100Kbyte左右。此外,TPS375芯片含有8Kcache空间,许多重复循环的程序只需要读取一次,运行效率大大提高,因此在开启cache的情况下在多通道SPI接口FLASH上执行程序的效果接近并行存储器的效果。