一种自适应各种不同FLASH芯片类型的嵌入式系统启动方法.pdf

上传人:e2 文档编号:1292013 上传时间:2018-04-13 格式:PDF 页数:8 大小:441.47KB
返回 下载 相关 举报
摘要
申请专利号:

CN201610929529.0

申请日:

2016.10.31

公开号:

CN106528106A

公开日:

2017.03.22

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):G06F 9/44申请日:20161031|||公开

IPC分类号:

G06F9/44; G06F9/445

主分类号:

G06F9/44

申请人:

武汉光迅科技股份有限公司

发明人:

夏渊; 陈志; 杨智; 余春平; 卜勤练

地址:

430205 湖北省武汉市江夏区藏龙岛开发区潭湖路1号

优先权:

专利代理机构:

北京天奇智新知识产权代理有限公司 11340

代理人:

杨文录

PDF下载: PDF下载
内容摘要

本发明公开一种自适应各种不同Flash芯片类型的嵌入式系统启动方法,所述嵌入式系统的加载程序Bootloader中执行自适应各种不同Flash芯片类型的步骤,所述步骤包括:向所述嵌入式系统中所使用的Flash芯片发送标准的读取芯片ID信息的命令;根据所述Flash芯片返回的厂商ID和设备ID查询预先配置好的Flash芯片参数配置表,获得所述Flash芯片所对应的配置信息;所述加载程序Bootloader根据所述配置信息来继续访问和/或操作所述Flash芯片中的程序和/或数据。本发明提高Uboot的通用性,减少不必要的重复开发和维护工作,提高了代码的效率。

权利要求书

1.一种自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征在于:所述嵌入
式系统的加载程序Bootloader中执行自适应各种不同Flash芯片类型的步骤,所述步骤包
括:向所述嵌入式系统中所使用的Flash芯片发送标准的读取芯片ID信息的命令;
根据所述Flash芯片返回的厂商ID和设备ID查询预先配置好的Flash芯片参数配置表,
获得所述Flash芯片所对应的配置信息;
所述加载程序Bootloader根据所述配置信息来继续访问和/或操作所述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.如权利要求1-5任一项所述的自适应各种不同Flash芯片类型的嵌入式系统启动方
法,其特征在于:所述加载程序Bootloader存储于所述Flash芯片中,包括一级BOOT和二级
BOOT两个可执行程序,所述一级BOOT执行自适应各种不同Flash芯片类型的步骤,并根据所
获得的Flash芯片所对应的配置信息来确定二级BOOT可执行程序的访问方式。
7.如权利要求6所述的自适应各种不同Flash芯片类型的嵌入式系统启动方法,其特征
在于:所述一级Boot完成CPU I/O硬件初始化和串口配置;所述二级Boot完成引导系统驱
动。
8.如权利要求1-7任一项所述的自适应各种不同Flash芯片类型的嵌入式系统启动方
法,其特征在于:所述Flash芯片参数配置表中预先配置有不同厂商不同容量的NAND Flash
芯片的配置信息。

说明书

一种自适应各种不同Flash芯片类型的嵌入式系统启动方法

技术领域

本发明涉及一种嵌入式系统的启动方法,具体涉及一种基于NAND Flash自适应的
Uboot启动方法,能够自适应不同的NAND Flash芯片类型,本发明适用于通信和计算机领
域。

背景技术

在嵌入式开发中,Uboot(也即是Bootloader)引导Linux系统是必不可少的一个重
要环节,类似Windows的BIOS设置,这个过程对于系统的上电初始化、引导工作至关重要;同
时这个过程也可以完成一些定制类工作,比如自动校验Flash的完整性,以确定启动分区是
否损坏;提供密码保护功能,保护Uboot不被误操作修改;提供设备点灯操作,提示用户目前
处于启动环境的状态等。

但是现有的启动方式在使用过程中,存在一些问题,例如Uboot本身也是程序,也
需要存储在非易失介质上面(比如SD卡,NAND Flash,QSPI Flash等),同时Uboot代码的执
行(最重要的是读Flash内容,加载Linux系统,读设备的寄存器空间,设置设备的初始状态
等),需要Uboot程序自己确定读写什么类型的硬件Flash芯片,包括Flash的块大小(block
size),页大小(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(Error
CodeCorrection,或者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
读写参数静态配置的问题。

虽然本发明已经详细地示出并描述了相关的特定的实施例参考,但本领域的技术
人员应该能够理解,在不背离本发明的精神和范围内可以在形式上和细节上作出各种改
变。这些改变都将落入本发明的权利要求所要求的保护范围。

一种自适应各种不同FLASH芯片类型的嵌入式系统启动方法.pdf_第1页
第1页 / 共8页
一种自适应各种不同FLASH芯片类型的嵌入式系统启动方法.pdf_第2页
第2页 / 共8页
一种自适应各种不同FLASH芯片类型的嵌入式系统启动方法.pdf_第3页
第3页 / 共8页
点击查看更多>>
资源描述

《一种自适应各种不同FLASH芯片类型的嵌入式系统启动方法.pdf》由会员分享,可在线阅读,更多相关《一种自适应各种不同FLASH芯片类型的嵌入式系统启动方法.pdf(8页珍藏版)》请在专利查询网上搜索。

本发明公开一种自适应各种不同Flash芯片类型的嵌入式系统启动方法,所述嵌入式系统的加载程序Bootloader中执行自适应各种不同Flash芯片类型的步骤,所述步骤包括:向所述嵌入式系统中所使用的Flash芯片发送标准的读取芯片ID信息的命令;根据所述Flash芯片返回的厂商ID和设备ID查询预先配置好的Flash芯片参数配置表,获得所述Flash芯片所对应的配置信息;所述加载程序Bootloa。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1