CN106528106B - 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 - Google Patents
一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 Download PDFInfo
- Publication number
- CN106528106B CN106528106B CN201610929529.0A CN201610929529A CN106528106B CN 106528106 B CN106528106 B CN 106528106B CN 201610929529 A CN201610929529 A CN 201610929529A CN 106528106 B CN106528106 B CN 106528106B
- Authority
- CN
- China
- Prior art keywords
- flash chip
- flash
- various different
- chip
- embedded system
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/61—Installation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/71—Version control; Configuration management
-
- 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/44505—Configuring for program initiating, e.g. using registry, configuration files
-
- 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/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开一种自适应各种不同Flash芯片类型的嵌入式系统启动方法,所述嵌入式系统的加载程序Bootloader中执行自适应各种不同Flash芯片类型的步骤,所述步骤包括:向所述嵌入式系统中所使用的Flash芯片发送标准的读取芯片ID信息的命令;根据所述Flash芯片返回的厂商ID和设备ID查询预先配置好的Flash芯片参数配置表,获得所述Flash芯片所对应的配置信息;所述加载程序Bootloader根据所述配置信息来继续访问和/或操作所述Flash芯片中的程序和/或数据。本发明提高Uboot的通用性,减少不必要的重复开发和维护工作,提高了代码的效率。
Description
技术领域
本发明涉及一种嵌入式系统的启动方法,具体涉及一种基于NAND Flash自适应的Uboot启动方法,能够自适应不同的NAND Flash芯片类型,本发明适用于通信和计算机领域。
背景技术
在嵌入式开发中,Uboot(也即是Bootloader)引导Linux系统是必不可少的一个重要环节,类似Windows的BIOS设置,这个过程对于系统的上电初始化、引导工作至关重要;同时这个过程也可以完成一些定制类工作,比如自动校验Flash的完整性,以确定启动分区是否损坏;提供密码保护功能,保护Uboot不被误操作修改;提供设备点灯操作,提示用户目前处于启动环境的状态等。
但是现有的启动方式在使用过程中,存在一些问题,例如Uboot本身也是程序,也需要存储在非易失介质上面(比如SD卡,NAND Flash,QSPI Flash等),同时Uboot代码的执行(最重要的是读Flash内容,加载Linux系统,读设备的寄存器空间,设置设备的初始状态等),需要Uboot程序自己确定读写什么类型的硬件Flash芯片,包括Flash的块大小(blocksize),页大小(page size),空闲区域(Spare Area)等参数,因此相应的Uboot代码可能需要有很多读写不同的Flash芯片内容,特别是在项目使用需求多样化的情况下,例如需要使用Micron4GB Flash、Micron 1GB Flash、Spansion 1GB、Toshiba 1GB Flash等不同厂商不同容量的Flash芯片时,由于这些Flash芯片的读写参数都不一样,因此程序开发人员需要手动修改Uboot代码,把对应的Flash芯片参数静态的配置在Uboot的源代码里面,然后编译Uboot源码,再烧写到非易失介质中,以便Uboot启动时候能够知道自己需要读写什么类型的Flash芯片。
上述过程,Uboot代码本身的业务逻辑流程没有任何修改,比如启动,引导系统等关键步骤,但是仅仅因为无法识别Flash芯片的读写参数,就需要进行手动修改代码、编译、烧写、以及后续的测试过程,这个过程相当繁琐,还需要升级系统,同时需要维护多套Uboot代码,而每份源码差别又很小。
发明内容
本发明克服现有技术存在的缺陷,提出了一种自动化识别Flash芯片的方法,提高Uboot的通用性,减少不必要的重复开发和维护工作,提高了代码的效率。
本发明的技术方案是:
一种自适应各种不同Flash芯片类型的嵌入式系统启动方法,所述嵌入式系统的加载程序Bootloader中执行自适应各种不同Flash芯片类型的步骤,所述步骤包括:向所述嵌入式系统中所使用的Flash芯片发送标准的读取芯片ID信息的命令;根据所述Flash芯片返回的厂商ID和设备ID查询预先配置好的Flash芯片参数配置表,获得所述Flash芯片所对应的配置信息;所述加载程序Bootloader根据所述配置信息来继续访问和/或操作所述Flash芯片中的程序和/或数据。
所述Flash芯片所对应的配置信息包括所述Flash芯片所对应的页大小参数信息,所述加载程序Bootloader根据所述Flash芯片的页大小来确定Flash地址所对应的页。
所述Flash芯片所对应的配置信息还包括所述Flash芯片所对应的块大小和空闲大小。
所述加载程序Bootloader根据所述Flash芯片的块大小来对所述Flash芯片写入数据。
所述加载程序Bootloader根据所述Flash芯片的空闲大小来检测所述Flash芯片是否有坏块。
所述加载程序Bootloader存储于所述Flash芯片中,包括一级BOOT和二级BOOT两个可执行程序,所述一级BOOT执行自适应各种不同Flash芯片类型的步骤,并根据所获得的Flash芯片所对应的配置信息来确定二级BOOT可执行程序的访问方式。
所述一级Boot完成CPU I/O硬件初始化和串口配置;所述二级Boot完成引导系统驱动。
所述Flash芯片参数配置表中预先配置有不同厂商不同容量的NAND Flash芯片的配置信息。
本发明具备的优点是:
采用本发明方法,如果系统的硬件因为成本或者其他原因(比如容量扩展,供货,库存等因素),选择不同的Flash芯片(不同厂家或者同一厂家不同型号),不需要像之前一样在庞大的工程中修改Flash配置的参数代码,不需要重新编译工程,不需要维护不同的Uboot版本,也不存在不同版本升级错误问题。本方法提供了自适应不同厂家的NAND Flash芯片或者同一厂家不同容量的NANDFlash芯片,以提高Uboot的通用性和可维护性。
附图说明
图1是本发明NAND Flash分区方法示意图;
图2是本发明Uboot自适应Flash参数流程图;
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及具体实施方式对本发明作进一步的详细描述。
本发明提出了一种基于NAND Flash自适应的Uboot启动方法,主要在开机Bootloader程序中增加一段自适应Flash芯片程序。
步骤1.1:首先将Bootloader源代码程序分解为一级Boot(preloader)和二级Boot(Uboot),自适应Flash芯片程序设置于一级Boot中,一级Boot只负责最基本的CPU I/O硬件初始化和串口配置,涉及一些汇编代码和CPU寄存器空间的访问,以及负责FLASH芯片的自适应;二级Boot则负责引导Linux系统,提供Uboot环境和操作命令,实现基本的驱动功能,比如读写EEPROM,读写Flash,读写FPGA寄存器等。本步骤将Bootloader分为了2个可执行文件,减少了一级Boot和二级Boot的耦合。
步骤1.2:对NAND Flash的使用进行规划分区,请参阅图1,将NAND Flash按照功能划分为很多个区域,其中,分区1存放一级Boot可执行文件preloader和二级Boot可执行文件Uboot(preloader和Uboot统称为Bootloader),一级Boot存放在Flash首地址0x0地址,二级Boot存放在首地址偏移0x40000(256KB)地址,分区2存放Uboot代码需要使用的环境变量。本步骤主要是规划好Bootloader的存放地址,这样一级Boot事先知道从Flash的哪个地址读二级Boot,并完成加载执行。
步骤1.3:一级Boot动态识别Flash参数,并启动二级Boot。图2显示了BootLoader上电到加载Linux系统过程的示意图。
步骤1.3.1:上电后,CPU从Flash首地址执行一级Boot程序(CPU加载一级Boot的过程由CPU内部的BootRom决定,这部分程序都是在芯片出厂的时候,由芯片厂商固化在芯片里面),一级Boot程序在完成了硬件引脚分配初始化和串口初始化后,进入图2步骤101,给Flash芯片发送标准的读取芯片ID信息的命令。对于不同厂家的Flash芯片或者同一厂家不同型号芯片,此命令字都是标准的,即0x90命令字。
步骤1.3.2:Flash芯片收到命令后,进入图2步骤102,返回芯片的生产厂家ID和芯片ID的信息。表1是NAND Flash配置表,一级Boot进入步骤103进行查表。
步骤1.3.3:根据步骤1.3.2返回的芯片生产厂家ID和芯片ID(即设备ID),查表,查看返回的芯片信息是否在表1中,即图2步骤104。
表1
表1中:页大小(pagesize),NAND Flash的读操作的基本/最小的单位,常见为4kB;块大小(eraseblock),NAND Flash的擦除操作的基本/最小单位,常见为256KB;空闲区域(spare area),每一个页,对应还有一块区域,叫做空闲区域(spare area)/冗余区域(redundant area),而Linux系统中,一般叫做OOB(Out Of Band),这个区域,是最初基于NAND Flash的硬件特性:数据在读写时候相对容易错误,所以为了保证数据的正确性,必须要有对应的检测和纠错机制,此机制被叫做EDC(Error Detection Code)/ECC(ErrorCodeCorrection,或者Error Checking and Correcting),所以设计了多余的区域,用于放置数据的校验值。
这里需要注意的是,配置表是存放在一级BOOT中,在CPU内部的BootRom加载了一级BOOT后(这一过程由芯片固化程序决定),一级BOOT程序开始运行后,就可以查表1获取Flash的配置参数。
步骤1.3.4:如果查表失败,没有在表1中查到芯片生产厂家ID和芯片ID,进入图2步骤105,Boot启动失败,系统挂起。
步骤1.3.5:如果查表成功,在表1中查到了芯片生产厂家ID和芯片ID,进入图2步骤106,获取芯片的页大小,块大小,空闲空间大小等信息。
步骤1.4:进入图2步骤107,根据Flash的页大小和空闲空间大小,从Flash地址0x40000读取对应页大小的二级Boot程序,并执行二级Boot程序,实现系统第二级加载。此步骤是自适应的关键,如果不能获取Flash的页大小,空闲大小信息,一级Boot就无法从Flash中读取二级Boot的内容,系统将无法完成引导过程。如果单纯的在代码里面静态配置页大小,则只能支持某一款Flash芯片,不能灵活的支持不同厂家不同芯片系列。例如,二级Boot的程序大小是100KB,页大小是2KB,则需要从Flash读取50页数据,然后执行二级Boot引导系统,如果不知道程序不知道页大小,则没法完成读取这一步。需要说明的是,此处由于只读Flash内容,所以只会用到页大小,同时为了检测Flash是否有坏块,需要用到空闲空间大小;如果需要升级程序写Flash,则需要知道块大小信息。
综上所述,本发明提供了一种Uboot启动过程中动态识别Flash芯片参数的方法,很好地解决了现有技术中不能动态识别Flash芯片参数信息,而需要针对每款产品做Flash读写参数静态配置的问题。
虽然本发明已经详细地示出并描述了相关的特定的实施例参考,但本领域的技术人员应该能够理解,在不背离本发明的精神和范围内可以在形式上和细节上作出各种改变。这些改变都将落入本发明的权利要求所要求的保护范围。
Claims (7)
1.一种自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述嵌入式系统的加载程序Bootloader中执行自适应各种不同Flash芯片类型的步骤,所述加载程序Bootloader存储于所述Flash芯片中,包括一级BOOT和二级BOOT两个可执行程序;所述步骤包括:向所述嵌入式系统中所使用的Flash芯片发送标准的读取芯片ID信息的命令;所述一级BOOT执行自适应各种不同Flash芯片类型的步骤,根据所述Flash芯片返回的厂商ID和设备ID查询预先配置好的Flash芯片参数配置表,获得所述Flash芯片所对应的配置信息;
所述加载程序Bootloader根据所获得的Flash芯片所对应的配置信息来确定二级BOOT可执行程序的访问方式,继续访问和/或操作所述Flash芯片中的程序和/或数据。
2.如权利要求1所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述Flash芯片所对应的配置信息包括所述Flash芯片所对应的页大小参数信息,所述加载程序Bootloader根据所述Flash芯片的页大小来确定Flash地址所对应的页。
3.如权利要求2所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述Flash芯片所对应的配置信息还包括所述Flash芯片所对应的块大小和空闲大小。
4.如权利要求2所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述加载程序Bootloader根据所述Flash芯片的块大小来对所述Flash芯片写入数据。
5.如权利要求2所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述加载程序Bootloader根据所述Flash芯片的空闲大小来检测所述Flash芯片是否有坏块。
6.如权利要求5所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述一级Boot完成CPU I/O硬件初始化和串口配置;所述二级Boot完成引导系统驱动。
7.如权利要求1-6任一项所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述Flash芯片参数配置表中预先配置有不同厂商不同容量的NAND Flash芯片的配置信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610929529.0A CN106528106B (zh) | 2016-10-31 | 2016-10-31 | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610929529.0A CN106528106B (zh) | 2016-10-31 | 2016-10-31 | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106528106A CN106528106A (zh) | 2017-03-22 |
CN106528106B true CN106528106B (zh) | 2019-09-10 |
Family
ID=58291786
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610929529.0A Active CN106528106B (zh) | 2016-10-31 | 2016-10-31 | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106528106B (zh) |
Families Citing this family (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109725939A (zh) * | 2017-10-27 | 2019-05-07 | 深圳市中兴微电子技术有限公司 | 一种芯片启动方法、芯片和计算机可读存储介质 |
CN108182079B (zh) * | 2017-12-21 | 2020-09-01 | 中国船舶重工集团公司第七0七研究所 | 一种基于串口的tms320c6748程序加载方法 |
CN108628641A (zh) * | 2018-04-26 | 2018-10-09 | 珠海亿智电子科技有限公司 | 一种基于嵌入式系统的快速启动方法 |
CN108829465B (zh) * | 2018-06-27 | 2021-01-08 | 北京计算机技术及应用研究所 | 一种基于直接读写flash的本地动态加载系统及方法 |
CN109710320B (zh) * | 2018-12-11 | 2022-03-15 | 中国航空工业集团公司西安航空计算技术研究所 | 一种两级驱动的启动引导BootLoader方法 |
CN109686394B (zh) * | 2018-12-17 | 2020-12-01 | 深圳忆联信息系统有限公司 | Nand Flash Phy参数配置方法和装置 |
CN109955266B (zh) * | 2019-04-01 | 2020-12-15 | 珠海市一微半导体有限公司 | 机器人回座代码的自动生成设备和自动生成系统 |
CN110780931A (zh) * | 2019-09-25 | 2020-02-11 | 芯创智(北京)微电子有限公司 | 一种自适应型固件启动方法及系统 |
CN111651185B (zh) * | 2020-05-30 | 2022-11-11 | 展讯通信(上海)有限公司 | 一种软件升级方法及装置 |
CN113918082B (zh) * | 2020-07-08 | 2024-03-08 | 慧荣科技股份有限公司 | 计算机可读取存储介质、配置可靠命令的方法及装置 |
CN113703853A (zh) * | 2021-08-24 | 2021-11-26 | 新华三智能终端有限公司 | 一种网络设备初始化方法及装置 |
CN114489852B (zh) * | 2022-01-20 | 2024-03-01 | 飞腾信息技术有限公司 | 内存芯片的启动方法、装置、计算机设备及存储介质 |
CN114780153B (zh) * | 2022-03-31 | 2023-08-08 | 深圳曦华科技有限公司 | Boot程序的启动方法及相关装置 |
CN114647461A (zh) * | 2022-05-19 | 2022-06-21 | 深圳比特微电子科技有限公司 | 一种嵌入式系统的启动方法和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101102562A (zh) * | 2007-06-25 | 2008-01-09 | 嘉兴闻泰通讯科技有限公司 | 一种phs手机实现nor flash兼容的方法 |
CN102096589A (zh) * | 2009-12-15 | 2011-06-15 | 上海威乾视频技术有限公司 | 基于dm642的嵌入式通用启动加载系统 |
CN104461638A (zh) * | 2014-12-12 | 2015-03-25 | 四川华拓光通信股份有限公司 | 一种基于Bootloader的XFP光模块升级方法 |
CN105224352A (zh) * | 2014-06-26 | 2016-01-06 | 中兴通讯股份有限公司 | 软件版本升级方法和单板 |
-
2016
- 2016-10-31 CN CN201610929529.0A patent/CN106528106B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101102562A (zh) * | 2007-06-25 | 2008-01-09 | 嘉兴闻泰通讯科技有限公司 | 一种phs手机实现nor flash兼容的方法 |
CN102096589A (zh) * | 2009-12-15 | 2011-06-15 | 上海威乾视频技术有限公司 | 基于dm642的嵌入式通用启动加载系统 |
CN105224352A (zh) * | 2014-06-26 | 2016-01-06 | 中兴通讯股份有限公司 | 软件版本升级方法和单板 |
CN104461638A (zh) * | 2014-12-12 | 2015-03-25 | 四川华拓光通信股份有限公司 | 一种基于Bootloader的XFP光模块升级方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106528106A (zh) | 2017-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106528106B (zh) | 一种自适应各种不同Flash芯片类型的嵌入式系统启动方法 | |
US7277978B2 (en) | Runtime flash device detection and configuration for flash data management software | |
US7321951B2 (en) | Method for testing flash memory power loss recovery | |
US8423991B2 (en) | Embedded network device and firmware upgrading method | |
US9348730B2 (en) | Firmware ROM patch method | |
US9164756B2 (en) | Software updating process for an embedded device | |
US8341337B1 (en) | Data storage device booting from system data loaded by host | |
CN104850762B (zh) | 防止计算机的动作不良的方法、计算机程序以及计算机 | |
US20100058314A1 (en) | Computer System and Related Method of Logging BIOS Update Operation | |
JP6157637B2 (ja) | リードライトメモリデバイスのデータイメージ中の仮想境界コード | |
CN110096300B (zh) | 一种fpga程序文件备份管理系统、运行方法及升级方法 | |
CN102567049A (zh) | 嵌入式操作系统的升级方法 | |
CN108874582A (zh) | 一种系统恢复方法、装置及终端 | |
CN109240729B (zh) | 一种修复固件代码的方法及系统 | |
US9129137B2 (en) | Method, computer program and device for providing security for intermediate programming code for its execution by a virtual machine | |
CN108733517A (zh) | Ssd固件升级保护方法及装置 | |
CN102968089B (zh) | 可编程逻辑控制器及实现方法 | |
CN108170456B (zh) | 电子设备的固件升级方法及装置 | |
CN102479124A (zh) | 一种测试方法 | |
CN113377586A (zh) | 一种服务器自动化检测方法、装置及存储介质 | |
CN110928570A (zh) | 一种固件升级的方法及装置、可读存储介质 | |
CN101667130B (zh) | 具有鉴别功能的嵌入式系统及嵌入式系统的鉴别方法 | |
CN106293531B (zh) | 一种基于flash写保护的防止SD使用过程中flash被意外篡改的方法 | |
CN106611124B (zh) | 计算机装置及其开机方法 | |
CN108052337A (zh) | 一种eMMC量产工具的固件升级方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | 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 |