一种多线SPI flash控制器转让专利

申请号 : CN201911405914.5

文献号 : CN111143259B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 卢鼎雷海燕宋存杰

申请人 : 大唐半导体科技有限公司

摘要 :

本发明公开了一种多线SPI flash控制器,该控制器包括总线接口模块、寄存器文件、数据缓冲模块、状态机、输入输出控制模块、Fill_req接口以及RAM接口。该控制器直接将flash命令、总线模式、输入长度和输出长度组合为命令,去除了译码部件,将多线控制和指令编码完全隔离,结构简单清晰,硬件资源占用少,便于实现;且通过软件编程实现各条传输指令,灵活性高,扩展性好;还软件实现各种控制/读写指令,可实现多个厂商flash芯片的访问,兼容性更高。

权利要求 :

1.一种多线SPI flash控制器,其特征在于,包括:总线接口模块,所述总线接口模块与处理器或总线进行交互;

寄存器文件,所述寄存器文件直接将总线模式、是否包括地址ADDR_INC、输入字节数、输出字节数、操作码以及发送使能组合为单条命令分别进行传输;

数据缓冲模块,所述数据缓冲模块对读写数据进行缓冲;

状态机,所述状态机对数据的收发进行控制,并按照预设的顺序发送代码;

输入输出控制模块,所述输入输出控制模块与外部多线SPI flash芯片进行交互,并根据所述状态机的状态对所述多线SPI flash芯片管脚的三态端口的方向进行控制;

Fill_req接口,所述Fill_req接口与外部的Cache控制器进行Fill_req的握手和响应;

RAM接口,所述RAM接口用于数据缓冲模块与外部的RAM存储器进行数据交换传输;

所述Fill_req接口直接响应Cache控制器的数据交换请求,无需CPU参与;

所述Fill_req接口,由Cache控制器按照定义的时序,发起Fill_req请求命令,所述请求命令包括:

1)搬运源地址Fill_SADDR

2)搬运目的地址FILL_DADDR

3)搬运方向FILL_DIR

所述状态机响应Fill_req请求,实现多线SPI Flash芯片内数据与RAM存储器内数据的交换;

所述状态机通过Fill_req接口的Fill_ack信号,响应Cache控制器的硬件请求,告知其完成数据搬运。

2.根据权利要求1所述的一种多线SPI flash控制器,其特征在于,所述寄存器文件包括命令寄存器和地址寄存器;

所述命令寄存器直接将总线模式、是否包括地址ADDR_INC、输入字节数、输出字节数、操作码以及发送使能组合为单条命令,命令长度小于等于32位,可以通过写单条寄存器操作发起传输;

所述地址寄存器实时保存当前处理器所访问的内存单元的地址信息。

说明书 :

一种多线SPI flash控制器

技术领域

[0001] 本发明涉及SPI flash控制器技术领域,更具体的说是涉及一种多线SPI flash控制器。

背景技术

[0002] 目前,随着物联网和嵌入式芯片外部存储需求的扩大,外接多线SPI flash成为一种低成本、高速率、大容量的实现方案。芯片通过外接专用的多线SPI flash芯片,能够将存
储扩充到4Mbit甚至更多。相对于内置EFlash而言,成本低,而且能够获取足够的存储资源。
多个Flash芯片厂商定义了丰富的接口指令和传输类型,如何确保设计的多线SPI flash控
制器的高性能和兼容性,成为多线SPI flash控制器设计亟待解决的问题。
[0003] 传统的SPI flash控制器,会对若干多线SPI flash的命令进行编码,然后定义译码逻辑,译码逻辑根据当前SPI的模式(单线/双线/四线)和命令编码进行命令传输和读写
操作。传统多线SPI flash控制器的实现架构如图1所示,由图1可以看出,典型的多线SPI 
flash控制器的结构包括如下几个部分:
[0004] 总线接口模块:负责和处理器或者总线进行交互;
[0005] 寄存器文件:定义控制器的编程接口,定义若干寄存器,包括命令寄存器,状态寄存器,地址寄存器,模式寄存器等;
[0006] 数据buffer:负责读写数据的缓冲;
[0007] 译码部件:负责命令的译码;
[0008] 状态机;负责整个控制器的状态控制;
[0009] 输入输出控制与串并转换控制模块:负责和外部多线SPI flash芯片交互。
[0010] 该传统多线SPI控制器的工作流程如下:
[0011] 1.CPU通过总线接口模块向寄存器文件配置命令,设置模式,配置地址,向数据Buffer写入需要写的数据(写命令时),最后使能传输;
[0012] 2.译码部件读取寄存器文件中的命令寄存器,驱动控制状态机,开始按照命令格式组装数据包;
[0013] 3.数据包组装完毕后,送入输入输出控制与串并转换控制模块,转换为外部多线SPI flash支持的格式,实现读写命令;
[0014] 4.状态机判断读写完毕后,向总线接口模块发出中断,最后送至CPU;
[0015] 5.如果是数据读,则可以从数据Buffer中获取读到的数据,如果是数据写,则写完毕。
[0016] 传统的多线SPI flash结构清晰,功能明确,但是,存在几个较大的问题:
[0017] 1、灵活性不足:固定的命令编码决定了该实现只能对固定的多线SPI flash命令进行解析和支持,新增的命令必须修改设计进行扩展,随着指令的增多,硬件负责度增多,
频繁的修改会带来更多的风险;
[0018] 2、兼容性风险:多线SPI flash厂商众多,各个Flash支持的命令各有差异,如果在定义命令时没有考虑全面,容易造成兼容性问题;
[0019] 3、复杂度高:多线SPI flash需要兼容单线、双线和四线多种模式的芯片,串并转换部件需要根据不同的命令做不同的串并转换,负责度高,容易出错。
[0020] 因此,如何提供一种结构简单、更加灵活且兼容性高的SPI flash控制器是本领域技术人员亟需解决的问题。

发明内容

[0021] 有鉴于此,本发明提供了一种多线SPI flash控制器,该控制器定义了灵活的编码方案,直接将flash命令、总线模式、输入长度和输出长度组合为命令,去除了译码部件,将
多线控制和指令编码完全隔离,做到了最大的灵活性。同时,还可以通过软件配置,支持各
种多线SPI flash指令,扩展性和兼容性达到了最佳。
[0022] 为了实现上述目的,本发明采用如下技术方案:
[0023] 本发明提供了一种多线SPI flash控制器,包括:
[0024] 总线接口模块,所述总线接口模块与处理器或总线进行交互;
[0025] 寄存器文件,所述寄存器文件直接将总线模式、是否包括地址ADDR_INC、输入字节数、输出字节数、操作码以及发送使能组合为单条命令分别进行传输;
[0026] 数据缓冲模块,所述数据缓冲模块对读写数据进行缓冲;
[0027] 状态机,所述状态机对数据的收发进行控制,并按照预设的顺序发送代码;
[0028] 输入输出控制模块,所述输入输出控制模块与外部多线SPI flash芯片进行交互,并根据所述状态机的状态对多线SPI flash芯片管脚的三态端口的方向进行控制;
[0029] Fill_req接口,所述Fill_req接口与外部的Cache控制器进行Fill_req的握手和响应;
[0030] RAM接口,所述RAM接口用于数据缓冲模块与外部的RAM存储器进行数据交换传输。
[0031] 进一步地,所述寄存器文件包括命令寄存器和地址寄存器;
[0032] 所述命令寄存器直接将总线模式、是否包括地址ADDR_INC、输入字节数、输出字节数、操作码以及发送使能组合为单条命令;
[0033] 所述地址寄存器实时保存当前处理器所访问的内存单元的地址信息。
[0034] 进一步地,所述Fill_req接口直接响应Cache控制器的数据交换请求,无需CPU参与;
[0035] 所述Fill_req接口,由Cache控制器按照定义的时序,发起Fill_req请求命令,所述请求命令包括:
[0036] 4)搬运源地址Fill_SADDR
[0037] 5)搬运目的地址FILL_DADDR
[0038] 6)搬运方向FILL_DIR
[0039] 所述状态机响应Fill_req请求,实现多线SPI Flash芯片内数据与RAM存储器内数据的交换;
[0040] 所述状态机通过Fill_req接口的Fill_ack信号,响应Cache控制器的硬件请求,告知其完成数据搬运。
[0041] 经由上述的技术方案可知,与现有技术相比,本发明公开提供了一种多线SPI flash控制器,该控制器直接将flash命令、总线模式、输入长度和输出长度组合为命令,去
除了译码部件,将多线控制和指令编码完全隔离,结构简单清晰,硬件资源占用少,便于实
现;软件编程实现各条传输指令,灵活性高,扩展性好;软件实现各种控制/读写指令,可实
现多个厂商flash芯片的访问,兼容性更高。

附图说明

[0042] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本
发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据
提供的附图获得其他的附图。
[0043] 图1附图为传统多线SPI flash控制器的结构架构示意图;
[0044] 图2附图为本发明提供的改进后一种多线SPI flash控制器的结构架构示意图;
[0045] 图3附图为本发明实施例中多线SPI Flash控制器在Soc系统中的位置示意图;
[0046] 图4附图为本发明实施例中Fill_req接口的定义状态示意图;
[0047] 图5附图为本发明实施例中多线SPI flash控制器状态机的数据传输控制流程示意图。

具体实施方式

[0048] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于
本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
[0049] 参见附图2,本发明实施例公开了一种多线SPI flash控制器,包括:
[0050] 总线接口模块1,总线接口模块1与处理器或总线进行交互;
[0051] 寄存器文件2,寄存器文件2直接将总线模式(BUS_MODE)、是否包括地址ADDR_INC、输入字节数(IN_LEN)、输出字节数(OUT_LEN)、操作码(OPCODE)以及发送使能(ST)组合为单
条命令分别进行传输;
[0052] 数据缓冲模块3,数据缓冲模块3对读写数据进行缓冲;
[0053] 状态机4,状态机4对数据的收发进行控制,收发不受限于操作码(opcode),并按照预设的顺序发送代码;
[0054] 输入输出控制模块5,输入输出控制模块5与外部多线SPI flash芯片进行交互,并根据状态机4的状态对多线SPI flash芯片管脚的三态端口的方向进行控制;
[0055] Fill_req接口6,Fill_req接口6与外部的Cache控制器进行Fill_req的握手和响应;
[0056] RAM接口7,RAM接口7用于数据缓冲模块3与外部的RAM存储器进行数据交换传输。
[0057] 具体地,三态端口是芯片管脚的特征,也就是说,该管脚可以是输入输出方向的。
[0058] 具体地,图3为本实施例公开的多线SPI Flash控制器在Soc系统中的位置。由图3可以看出:
[0059] 多线SPI Flash控制器主要包括四个外部接口,分别为:
[0060] 1)与总线互联的Slave总线接口;
[0061] 2)与外部Flash芯片互联的多线SPI Flash接口;
[0062] 3)与Cache控制器互联的Fill_req接口;
[0063] 4)与RAM存储器互联的RAM接口。
[0064] 其中,Slave总线接口提供常规的多线Flash控制与读写操作,多线SPI Flash接口提供外部flash芯片互联,Fill_req接口是Cache控制器向本实施例中多线SPI控制器请求
数据的专用接口,RAM接口是本控制器搬运数据的目标存储器接口。
[0065] 具体地,在包含Cache的系统中,多线SPI控制器承担着数据换入换出通道的任务。本实施例公开的控制器需要在Fill_req请求情况下,自动发出多线flash读写操作,并按照
格式将数据搬入搬出到RAM存储器中。
[0066] Fill_req接口的定义如图4所示。Fill_req接口的主设备是cache控制器,从设备是多线Flash控制器。当cache控制器需要数据的交换时,通过该接口发起数据交换请求:
[0067] 1.将交换源地址FILL_SADDR,交换目的地址FILL_DADDR,交换方向FILL_DIR(高/低)驱动到该接口,注意:FILL_DIR为低表示将Flash芯片数据搬运到RAM中,为高表示将RAM
数据搬运到Flash芯片中;
[0068] 2.同时将FILL_REQ拉高1个周期,开启多线SPI Flash的数据搬运过程;
[0069] 3.多线SPI Flash将指定的搬运完成后,拉起FILL_ACK,表示本次数据交换完成;
[0070] 在本实施例中,Fill_req接口完全是硬件接口,在这一请求与数据交换过程中,完全不需要CPU参与其中。Cache控制器直接驱动多线SPI Flash控制器进行数据交换。多线
SPI Flash控制器采取的flash读写命令与格式等,在内部由专门的寄存器配置。
[0071] 具体地,Fill_req接口由Cache控制器按照定义的时序,发起Fill_req请求命令,请求命令包括:
[0072] 1)搬运源地址Fill_SADDR
[0073] 2)搬运目的地址FILL_DADDR
[0074] 3)搬运方向FILL_DIR
[0075] 状态机响应Fill_req请求,实现多线SPI Flash芯片内数据与RAM存储器内数据的交换;
[0076] 状态机通过Fill_req接口的Fill_ack信号,响应Cache控制器的硬件请求,告知其完成数据搬运。
[0077] 在一个具体的实施例中,寄存器文件2包括命令寄存器21和地址寄存器22;
[0078] 命令寄存器21直接将总线模式、是否包括地址ADDR_INC、输入字节数、输出字节数、操作码以及发送使能组合为单条命令指令;
[0079] 地址寄存器22实时保存当前处理器所访问的内存单元的地址信息。
[0080] 在本实施例中,命令寄存器21可以直接将总线模式、是否包括地址ADDR_INC、输入字节数、输出字节数、操作码以及发送使能组合为单条命令指令,单命令访问过程具有如下
优势:
[0081] 1、SPI控制器的寄存器组织为单命令(总长度控制在32位以内),单次写寄存器即可触发传输操作,其它的控制器寄存器组织为多个寄存器,往往需要配置若干个寄存器才
开始操作,效率低;
[0082] 2、由于命令简单,便于同时进行软件接口设计(常规模式)和硬件接口设计(Cache场景),而且能够将两种接口内部统一;
[0083] 3、软件应用角度,单命令访问即可触发操作,内部寄存器文件可以组合为FIFO式和链表式,多次操作命令可以累积填充,效率高,而且操作连续。
[0084] 在本实施例中,参见附图5,状态机4发送代码的顺序包括:
[0085] 1)发送操作码(OPCODE);
[0086] 2)如果地址ADDR_INC为1,发送地址,否则跳过;
[0087] 3)如果输出字节数OUT_LEN大于1,则开始发送数据缓存模块里的字节,发送输出字节数减1(OUT_LEN‑1)个字节;
[0088] 4)如果输入字节数IN_LEN大于0,则开始接收输入字节数IN_LEN数量的字节数据到数据缓存模块中;
[0089] 5)执行完毕则恢复到空闲状态。
[0090] 上述实施例公开的多线SPI flash控制器,定义了灵活的编码方案,直接将flash命令、总线模式、输入长度和输出长度组合为指令,去除了译码部件,将多线控制和指令编
码完全隔离,做到了最大的灵活性。可以通过软件配置,支持各种多线SPI flash指令,扩展
性和兼容性达到了最佳。在本实施例中本发明实施例公开的多线SPI flash控制器的数据
传输过程如下:
[0091] 将多线SPI flash控制器分为代码段、地址段、dummy字段、发送数据段和接收数据段,并分别进行数据传输;
[0092] 将操作码字段、地址字段和dummy字段直接当做普通数据进行传输;
[0093] 将发送的字节数和接收的字节数分别通过相应的指令进行控制,收发到指定的字节数后,直接进入下一阶段。
[0094] 本实施例中所说的“下一阶段”可以这样理解:由于本实施例中将flash访问依次分为:发送代码段、地址段、dummy字段、发送数据段和接收数据段共五个阶段。所谓下一阶
段,指的就是编码增加1的下一阶段。如果当前处于接收数据段,则传输结束。
[0095] 下面以常见的多线SPI flash命令为例,描述上述实施例中指令的编码方法,如下:
[0096] 1、单字节命令WRSR(06H):
[0097] 编码:BUS_MODE=0;ADDR_INC=0;IN_LEN=0;OUT_LEN=1;OPCODE=0x06传输命令:
[0098] OPCODE[7:0]
[0099] 2、读状态寄存器命令RDSR(05H):
[0100] BUS_MODE=0;ADDR_INC=0;IN_LEN=1;OUT_LEN=1;OPCODE=0x05
[0101] 传输命令:
[0102]OPCODE[7:0] Data[7:0]
[0103] 3、读数据指令READ(03H):
[0104] BUS_MODE=0;ADDR_INC=1;IN_LEN=N(需要读的字节数);OUT_LEN=4;OPCODE‑0x03
[0105] 传输命令:
[0106] OPCODE[7:0] ADDR[23:0] Data[(8N‑1):0)
[0107] 4、双线读数据指令Fast Read(3BH):
[0108] BUS_MODE=1;ADDR_INC=1;IN_LEN=N(需要读的字节数);OUT_LEN=5;OPCODE‑0x3B
[0109] 传输命令:
[0110]OPCODE[7:0] ADDR[23:0] Dummy[7:0] Data[(8N‑1):0](双线传输)
[0111] 5、四线编程QPP指令(32H):
[0112] BUS_MODE‑2;ADDR_INC=1;IN_LEN=0;OUT_LEN=4+N(需要写的字节数)传输命令:
[0113]OPCODE[7:0] ADDR[23:0] Data[(8N‑1):0](四线传输)
[0114] 综上所述,本发明实施例公开的多线SPI flash控制器,与现有技术相比,具有如下优点:
[0115] 1、该控制器直接将flash命令、总线模式、输入长度和输出长度组合为命令,去除了译码部件,将多线控制和指令编码完全隔离,结构简单清晰,硬件资源占用少,便于实现;
[0116] 2、软件编程实现各条传输指令,灵活性高,扩展性好;
[0117] 3、CPU发送单条命令,启动一次多线SPI flash芯片操作,更加高效;
[0118] 4、软件实现各种控制/读写指令,可实现多个厂商flash芯片的访问,兼容性更高。
[0119] 本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置
而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说
明即可。
[0120] 对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的
一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明
将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一
致的最宽的范围。