CN107943540B - 一种自适应非易失性存储器时序的程序加载结构和方法 - Google Patents
一种自适应非易失性存储器时序的程序加载结构和方法 Download PDFInfo
- Publication number
- CN107943540B CN107943540B CN201711150979.0A CN201711150979A CN107943540B CN 107943540 B CN107943540 B CN 107943540B CN 201711150979 A CN201711150979 A CN 201711150979A CN 107943540 B CN107943540 B CN 107943540B
- Authority
- CN
- China
- Prior art keywords
- program
- nonvolatile memory
- flash
- soc
- fast
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/10—Program control for peripheral devices
- G06F13/102—Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Read Only Memory (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种适应不同非易失性存储器快速读指令的程序加载方法,包括:一SOC内嵌高速SPI硬件或软件接口,一外部非易失性存储器通用读驱动程序,一外部非易失性存储器快速读驱动程序,一包含自身快速读驱动程序的外部非易失性存储器。本发明利用一SPI接口非易失性存储器,存有系统应用程序和自身快速读驱动程序,在嵌入式系统加载程序期间SOC芯片内的MCU首先执行内部ROM中片外非易失性存储器通用驱动程序,采用普通读时序把片外非易失性存储器内的快速读驱动程序加载到SOC芯片内的SRAM中,然后通过执行此快速读驱动程序实现从外部非易失性存储器中快速加载应用程序到SOC内存的功能,这种程序加载方法能适应各种外部非易失性存储器的快速加载时序。
Description
技术领域
本发明涉及嵌入式系统应用领域,特别是涉及一种实现能适应不同片外SPI(Serial Peripheral Interface串行外设接口)接口非易失性存储器快速读指令的程序加载方法。
背景技术
在各种嵌入式应用系统中都会在内部集成一个或多个MCU(Micro ControllerUnit微控制器)为核心组成SOC(System On Chip片上系统)芯片,再加上一些片外模块搭建硬件电路实现系统功能。由于非易失性存储器(通常包括FLASH即闪存和EEPROM即电可擦除只读存储器和铁电器件等,以下用FLASH为例代替非易失性存储器作为描述)具有数据掉电不丢失和在线可编程的特性,因此通常嵌入式系统都会使用FLASH等非易失性存储器作为应用开发MCU程序的存储器,但是SOC的片上FLASH良率较差,FLASH的生产工艺至少落后数字逻辑电路生产工艺2代的差距,并且与SRAM(Static Random Access Memory静态随机存储器)、ROM(Read Only Memory只读存储器)等存储器相比FLASH读时间较慢、功耗较大成为FLASH在SOC中作为程序执行区的主要瓶颈。针对上述FLASH的优缺点,在实际应用中比较常用的方法是嵌入式系统的硬件设计时在高性能的SOC芯片外另外使用一颗商用的大容量FLASH芯片作为MCU的程序存储器,在SOC芯片上电后MCU执行ROM中的程序通过片上的SPI接口把片外FLASH存储的程序加载到SOC片内的RAM中,然后MCU在RAM中执行程序,为了提高程序加载速度,通常需要用片外FLASH芯片的快速读模式在较高的SPI时钟频率下读出FLASH的数据。在实际应用中SPI接口FLASH的快速读指令由于片外FLASH的生产厂家和型号的不同会有比较大的差异,例如一款ST公司生产的型号为M25P16的串行FLASH存储器的普通读指令为03H,快速读指令为0BH,另一款ATMEL公司生产的型号为AT45DB161D的串行FLASH存储器的普通读指令为03H,快速读指令为E8H,这两款FLASH的普通读指令都是03H,根据多款产品(包括ST、ON、ATMAL、SAPANSION等生产厂家)的技术手册调研,所有厂家生产的SPI接口FLASH的普通读指令都为03H,即普通读模式的时序全部兼容,但是在使用中必须要求硬件平台SOC发出的SPI快速读命令和片外FLASH支持的快速读命令严格匹配,否则就无法完成程序的加载。
发明内容
本发明要解决的技术问题是提供一种适应不同片外SPI接口FLASH快速读指令的程序加载的结构和方法,实现嵌入式系统能适应不同SPI接口FLASH的型号和生产厂家,在加载程序期间都能正确使用FLASH的快速读模式完成程序加载流程。
为解决上述技术问题,本发明包括:
一种能适应各种外部非易失性存储器快速读时序的程序加载的结构,具体包括一内部包含自身快速读驱动程序的FLASH,此FLASH芯片支持SPI接口并支持普通读模式和快速读模式,FLASH内部数据分为FLASH快速读驱动程序和MCU执行的应用程序两部分,低地址区域存放FLASH快速读驱动程序,其余地址存放MCU执行的应用程序,在系统上电加载阶段,MCU首先执行SOC片内ROM中的FLASH通用读驱动程序,通过SPI接口以普通速度读取存放在SOC片外FLASH中的FLASH快速读驱动程序并加载到SOC的内存中执行,随后FLASH快速读驱动程序以FLASH快速读命令以高速的SPI时钟读出MCU执行的应用程序完成整个加载过程;一SOC内嵌高速SPI硬件或软件接口,支持普通速度和高速读取SPI接口FLASH的数据,普通速度和高速的频率根据FLASH生产厂家提供的芯片数据手册上标示的数据在应用中切换;一带有MCU、SRAM和ROM的SOC芯片,SOC芯片通过SPI接口与外部存储器相连,其中外部非易失性存储器内部存有自身的快速读驱动程序和系统应用程序,SOC芯片内部ROM程序中存有外部非易失性存储器通用读驱动程序,SOC片内SRAM具有外部非易失性存储器快速读驱动程序映像区域和应用程序映像区。
一种适应不同外部存储器中程序加载的方法,通过执行外部非易失性存储器中的SPI快速读驱动把应用程序快速加载到SOC芯片的SRAM中,主要包括如下步骤:
1)SOC芯片的MCU首先执行ROM中的外部非易失性存储器通用读驱动程序;
2)以SPI接口普通读速度从片外非易失性存储器内把外部非易失性存储器快速读驱动程序加载到SOC片内SRAM的外部非易失性存储器快速读驱动程序映像区域;
3)MCU程序跳转至SOC片内SRAM的外部非易失性存储器快速读驱动程序映像区域执行FLASH快速读驱动程序;
4)以SPI接口快速读速度把SOC外部非易失性存储器的应用程序加载到SOC片内的应用程序映像区,完成程序加载。
一种计算机可读存储介质,其上存储有计算机程序,具体包括一FLASH通用读驱动程序(MCU对SOC片外FLASH的读程序,这段程序全部以SOC片外FLASH支持的普通读指令读取数据),FLASH通用读驱动程序在SOC内部ROM中,实现从片外FLASH中搬移FLASH快速读驱动程序至SOC片内SRAM的功能,MCU执行FLASH通用读驱动程序读取SOC片外FLASH的起始地址为0,结束地址为某一设定值,此设定值根据实际编译完成后FLASH快速读驱动程序的大小来决定,FLASH通用读驱动程序在SOC片内ROM中的存放位置根据系统程序的实现流程在上电加载程序阶段插入执行这段程序即可,FLASH通用读驱动程序还需要实现将SOC片外SPI接口FLASH以普通读命令读出的数据全部搬运至SOC片内SRAM中的功能,加载到SOC片内SRAM的位置根据嵌入式系统的SRAM统一分配,规划出一块区域用于上电加载时使用,这块区域在完成FLASH快速读驱动程序加载后即可全部释放作为应用使用。经过市场上多种具有SPI接口的FLASH芯片的调研工作后发现,虽然各种FLASH的快速读命令和时序有不兼容的现象,但是普通读模式的命令都是一样的,普通读命令的命令值都是03H;FLASH通用读驱动程序中还包括MCU配置SPI时钟为普通读速度的功能,由于普通读速度的SPI时钟需要满足对于所选用的FLASH都能够正常读出的要求,根据市场产品调研,SPI接口FLASH的普通读速度不超过50MHZ,实际使用时选用根据市场调研的FLASH芯片品种选取一款普通读速度最低值作为MCU配置SPI普通读模式时的时钟;一FLASH快速读驱动程序(MCU对SOC片外FLASH的读程序,这段程序全部以SOC片外FLASH支持的快速读指令读取数据),FLASH快速读驱动程序在片外FLASH的低地址区域,片外FLASH的其余部分全部存放加载MCU执行的应用程序,FLASH快速读驱动程序中读取SOC片外FLASH的起始地址和结束地址为实际存放在FLASH内的MCU执行程序的起始地址和结束地址,FLASH快速读驱动程序还需要将SOC片外SPI接口FLASH以快速读命令读出的数据全部搬运至SOC片内SRAM中,加载到SOC片内SRAM的位置根据嵌入式系统的SRAM统一分配,这块区域在完成上电加载后即作为应用程序,FLASH的快速读命令配置值和快速读时序根据FLASH的型号和生产厂家会有不同,因此根据选用的FLASH厂商提供的芯片数据手册的快速读命令配置值时序编写好FLASH快速读驱动程序在使用前下载到FLASH的FLASH快速读驱动程序区域;另外FLASH快速读驱动程序中还包括MCU配置SPI时钟为快速读速度的功能,根据选用FLASH的芯片数据手册上快速读的参数和系统SPI时钟配置值的选取做匹配,把SOC片内的SPI接口时钟切换快速读模式时钟;
附图说明
下面结合附图与具体实施方式对本发明作进一步详细的说明:
图1是嵌入式系统开发阶段的结构框图;
图2是FLASH的普通读时序图;
图3是FLASH的快速读时序图;
图4是嵌入式系统应用阶段的结构框图;
图5是适应不同片外SPI接口FLASH快速读指令的程序加载方法的框图;
具体实施方式
以一款带有MCU的SOC芯片和一片外FLASH组成的嵌入式系统为例,具体说明如下:
整个嵌入式系统开发阶段的结构如图1所示,一SOC芯片为主控制器,通过SPI接口外接一片外FLASH芯片作为应用程序存储器,SOC芯片内部有一ROM区域,里面有一块区域存放FLASH通用读驱动程序,还有一SRAM区域,SRAM包含一FLASH快速读驱动程序映像区域和一应用程序映像区域;一SPI接口的FLASH,内部存放FLASH的快速读驱动程序和SOC芯片的应用程序;在完成整个系统的开发后,根据选用的FLASH快速读命令配置字和SPI快速读时序编写FLASH快速读驱动程序,可以用上位机通过接口(UART、SPI或者USB)和SOC接口通信,上位机根据FLASH的具体型号选用编程算法把FLASH快速读驱动程序和应用程序写入到FLASH中。
FLASH的普通读时序图如图2所示,CS(片选)信号为低时选中FLASH,在嵌入式系统中CS由SOC芯片的一GPIO(通用输入输出接口)控制,在芯片上电加载程序阶段该GPIO输出0,选中FLASH;SCK(SPI时钟),在这个嵌入式系统的SPI链路中SOC芯片作为主机提供SPI时钟,FLASH作为从机接收SPI时钟;SI(SPI输入数据),由作为SPI主机的SOC芯片发出,FLASH作为SPI从机接收;SO(SPI输出数据),由作为从机的FLASH发出,作为主机的SOC芯片接收;SOC芯片在启动对FLASH的普通读时首先使能FLASH片选信号,CS置为0,然后在SI端口发送普通读指令:03H,普通读命令由一个字节组成,每个bit(位)在SCK的上升沿输入FLASH的SPI接口电路,发送完普通读指令后接着发送需要读取的FLASH地址,发送顺序以MSB(MostSignificant Bit最高有效位)为第一个发送位依次发送,该嵌入式系统选用的FLASH容量为16Mbit,因此有24位地址线,发送完读取数据的首地址后在SCK的下降沿时FLASH从SO信号输出数据,首先输出SOC读取FLASH的首地址数据,发送顺序以MSB为第一个发送位依次发送,发送完第一个字节数据后,自动发送FLASH的首地址数据加一地址的数据,在SCK的驱动下依次输出后续地址的数据,直至CS拉高,停止读FLASH的操作;普通读状态时整个读出过程中SCK始终只能保持较低的时钟频率,该款FLASH普通读模式的SCK的最高频率为33MHZ。
FLASH的快速读时序图如图3所示,SOC芯片在启动对FLASH的快速读时首先使能FLASH片选信号,CS置为0,然后在SI端口发送快速读指令,快速指令配置值和时序根据各个生产厂家的不同会存在很大差异,彼此均不兼容,例如该款FLASH的快速读指令为0BH,快速读命令由一个字节组成,然后发送需要读取的FLASH地址,发送顺序以MSB为第一个发送位依次发送,该嵌入式系统选用的FLASH容量为128M bit在SCK的上升沿输入FLASH的SPI接口电路,发送完快速读指令后接,有24位地址线,发送完读取数据的首地址后还需要发送一个字节的哑字节,即发送数据可以任意数值,但必须是一个字节,发送完哑字节后在SCK的下降沿时FLASH从SO信号输出数据,首先输出SOC读取FLASH的首地址数据,发送顺序以MSB为第一个发送位依次发送,发送完第一个字节数据后,自动发送FLASH的首地址数据加一地址的数据,在SCK的驱动下依次输出后续地址的数据,直至CS拉高,停止读FLASH的操作;快速读状态时整个读出过程中SCK可以使用高速时钟频率,该款FLASH快速读模式的SCK的最高频率为75MHZ。
完成开发后系统脱机运行的结构框图如图4所示,SOC芯片上电加载应用程序时,首先运行ROM中的FLASH通用读驱动程序,FLASH通用读驱动程序执行FLASH的普通读模式下以较慢的SCK频率(33MHZ),按照图2所示的普通读时序将FLASH内的FLASH快速读驱动程序读出存入SOC片内SRAM中的FLASH快速读驱动程序映像区,随后MCU开始执行SRAM中的FLASH快速读驱动程序映像区的程序,FLASH快速读驱动程序会将SPI接口的时钟切换到高速时钟(75MHZ),按照图3所示的快速读时序把FLASH内的应用程序读出写入SOC片内SRAM的应用程序映像区,实现应用程序的快速加载,随后MCU开始执行应用程序,FLASH快速读时序中快速读命令根据芯片的型号和生产厂家的差异在编制FLASH快速读驱动程序时按选用的FLASH芯片技术手册描述正确编写驱动程序,MCU在执行FLASH快速读驱动程序时就可以对任何未知型号的FLASH进行正确的快速读操作。图5是整个应用程序加载的流程图。
综上所述,本发明利用一SOC芯片片外SPI接口非易失性存储器,内部存有系统应用程序和自身的快速读驱动程序,在嵌入式系统的加载程序期间,SOC芯片的MCU首先执行内部ROM中的外部非易失性存储器通用驱动程序,采用各种型号外部非易失性存储器都支持的普通读出时序把片外外部非易失性存储器内的快速读驱动程序加载到SOC芯片内的SRAM中,然后通过执行此加载的外部非易失性存储器快速读驱动程序实现从外部非易失性存储器中快速加载应用程序到SOC内存的功能,由于快速加载需要命令配置值以及快速读的时序信息和SPI的时钟适配功能都包含在外部非易失性存储器的快速读驱动程序里,这种程序加载方法能适应各种FLASH的快速加载时序。
以上通过具体实施方式和实施例对本发明进行了详细的说明,但这些并非构成对本发明的限制。在不脱离本发明原理的情况下,本领域的技术人员还可做出许多变形和改进,这些也应视为本发明的保护范围。
Claims (3)
1.一种适应不同外部存储器中程序加载的结构,主要包括一外部非易失性存储器、一SPI接口、一带有MCU、SRAM和ROM的SOC芯片,其特征在于SOC芯片通过SPI接口与外部存储器相连,其中外部非易失性存储器内部存有自身的快速读驱动程序和系统应用程序;SOC芯片内部ROM程序中存有外部非易失性存储器通用读驱动程序;从片外非易失性存储器内把外部非易失性存储器快速读驱动程序加载到SOC片内SRAM的外部非易失性存储器快速读驱动程序映像区域。
2.一种适应不同外部存储器中程序加载的方法,基于权利要求1所述的结构,其特征在于通过执行外部非易失性存储器中的SPI快速读驱动把应用程序快速加载到SOC芯片的SRAM中,主要包括如下步骤:
1)SOC芯片的MCU首先执行ROM中的外部非易失性存储器通用读驱动程序;
2)以SPI接口普通读速度从片外非易失性存储器内把外部非易失性存储器快速读驱动程序加载到SOC片内SRAM的外部非易失性存储器快速读驱动程序映像区域;
3)MCU程序跳转至SOC片内SRAM的外部非易失性存储器快速读驱动程序映像区域执行FLASH快速读驱动程序;
4)以SPI接口快速读速度把SOC外部非易失性存储器的应用程序加载到SOC片内的应用程序映像区,完成程序加载。
3.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机可读存储介质被处理器执行时实现如权利要求2项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711150979.0A CN107943540B (zh) | 2017-11-18 | 2017-11-18 | 一种自适应非易失性存储器时序的程序加载结构和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711150979.0A CN107943540B (zh) | 2017-11-18 | 2017-11-18 | 一种自适应非易失性存储器时序的程序加载结构和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107943540A CN107943540A (zh) | 2018-04-20 |
CN107943540B true CN107943540B (zh) | 2021-04-13 |
Family
ID=61932963
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711150979.0A Active CN107943540B (zh) | 2017-11-18 | 2017-11-18 | 一种自适应非易失性存储器时序的程序加载结构和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107943540B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109634676B (zh) * | 2018-12-12 | 2021-10-26 | 深圳忆联信息系统有限公司 | 基于主控芯片的nand boot启动方法和装置 |
CN111274186B (zh) * | 2020-01-19 | 2022-06-24 | 北京中微芯成微电子科技有限公司 | 一种提高中央处理器执行效率的单片机 |
CN111766840B (zh) * | 2020-06-09 | 2022-05-31 | 深圳创维-Rgb电子有限公司 | 一种生产母片的制作、实现方法及存储介质 |
CN112905235B (zh) * | 2021-03-12 | 2023-08-01 | 北京集睿致远科技有限公司 | 一种mcu程序执行方法和芯片 |
CN117931702B (zh) * | 2024-03-20 | 2024-06-07 | 中国科学院国家空间科学中心 | 一种系统级芯片的片外系统和应用程序固化方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1598965A (zh) * | 2004-08-09 | 2005-03-23 | 张华龙 | 一种能够快速读写闪存的方法及其专用处理器 |
CN105843700A (zh) * | 2016-03-25 | 2016-08-10 | 中国科学院微电子研究所 | 一种控制器 |
-
2017
- 2017-11-18 CN CN201711150979.0A patent/CN107943540B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1598965A (zh) * | 2004-08-09 | 2005-03-23 | 张华龙 | 一种能够快速读写闪存的方法及其专用处理器 |
CN105843700A (zh) * | 2016-03-25 | 2016-08-10 | 中国科学院微电子研究所 | 一种控制器 |
Non-Patent Citations (1)
Title |
---|
通用SPI_Flash控制器的设计与验证;罗莉;《计算机工程》;20110430;第22-25页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107943540A (zh) | 2018-04-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107943540B (zh) | 一种自适应非易失性存储器时序的程序加载结构和方法 | |
US7793031B2 (en) | Memory architecture with serial peripheral interface | |
US7233541B2 (en) | Storage device | |
US9063849B2 (en) | Different types of memory integrated in one chip by using a novel protocol | |
US7483329B2 (en) | Flash card and controller with integrated voltage converter for attachment to a bus that can operate at either of two power-supply voltages | |
US6792501B2 (en) | Universal serial bus flash memory integrated circuit device | |
CN100456272C (zh) | 利用快闪存储器引导的系统和方法 | |
US7057911B2 (en) | Memory structure, a system, and an electronic device, as well as a method in connection with a memory circuit | |
TWI472923B (zh) | 控制外部介面之裝置及命令處理之方法 | |
KR20080052019A (ko) | 메모리 시스템 및 그것의 데이터 전송 방법 | |
JP4945186B2 (ja) | 記憶装置およびこれを含むメモリシステム | |
US20060174100A1 (en) | System and method of booting an operating system for a computer | |
CN105474319A (zh) | 用于配置混合存储器模块的存储器的i/o的设备及方法 | |
TWI695382B (zh) | 記憶體定址方法及相關聯的控制器 | |
CN111897749A (zh) | 基于Quad-SPI控制器与外扩FLASH通信控制系统及方法 | |
CN109117205B (zh) | 一种基于mcu和fpga的双芯片加载方法 | |
GB2374704A (en) | Serial data input to a non-volatile memory | |
CN112259142A (zh) | 用于自容式仪器的超低功耗的大容量数据存储方法 | |
US7941587B2 (en) | Programmable sequence generator for a flash memory controller | |
US9104401B2 (en) | Flash memory apparatus with serial interface and reset method thereof | |
CN109491959B (zh) | 一种可编程逻辑器件配置器 | |
CN108920197B (zh) | 一种提高fpga串行被动加载速率的加载电路及加载方法 | |
CN112230997A (zh) | 一种芯片启动方法及存储介质 | |
US8166228B2 (en) | Non-volatile memory system and method for reading and storing sub-data during partially overlapping periods | |
JP7006410B2 (ja) | 制御装置、画像形成装置および回路装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Ye Hongwei Inventor after: Wang Jijian Inventor after: Cui Lihua Inventor before: Ye Hongwei Inventor before: Wang Jijian |