嵌入式系统及其存储器扩展的自动适配方法

文档序号:6340806阅读:161来源:国知局
专利名称:嵌入式系统及其存储器扩展的自动适配方法
技术领域
本发明涉及嵌入式系统的存储器扩展,具体涉及嵌入式系统及其存储器扩展的自 动适配方法。
背景技术
目前,嵌入式系统的应用范围越来越广泛,对于嵌入式系统而言,其兼容性越好, 系统的可行性就越高,市场竞争力也就越大。因此,各组成部件之间的兼容性在嵌入式系统 的开发中具有重要的作用。在目前嵌入式系统的开发过程中,随着上层应用软件功能的不断改进以及新应用 功能的持续开发,需要存储和管理的数据量也越来越大,因此产生了原有系统中的存储器 存储空间不足的问题。为了解决这种问题,嵌入式系统需要通过更换存储器或者增加存储 器的方式,在系统运行过程中进行内存扩展。在嵌入式系统中,最常用的存储部件有SDRAM和Flash两类,由于不同厂家和不同 类型的SDRAM和Flash在设计上可能存在一定的差异,因此会导致不同厂家和不同类型的 SDRAM和Flash的初始化或者读写操作也不同。例如,不同厂商Flash的操作命令字不同, 需要发送不同的命令字才可以对Flash进行读写、擦除等操作;而且,同一个厂家生产的不 同类型的Flash,在设计上也可能会存在一些差异,例如扇区大小不一致。此外,不同厂商或 者不同类型的SDRAM,由于存储容量存在差异,或者刷新周期不同,在初始化的时候,初始化 的参数也不一样。因此,嵌入式系统一般都会对SDRAM和Flash进行通用化设计,以便于存 储容量的扩展。目前的作法是,BSP(Board Support Package,底层的应用程序和硬件平台 的功能模块)开发人员采用一套BSP来维护一种类型的SDRAM或者Flash存储器,然而,这 种作法在系统需要增加或者更换SDRAM或者Flash时,需要根据存储器的类型开发和维护 多套BSP,从而给开发和维护人员带来了大量重复的工作量。

发明内容
本发明所要解决的技术问题是解决嵌入式系统存储器不能实现自动适配扩展问题。为了解决上述技术问题,本发明所采用的技术方案是提供一种嵌入式系统及其存 储器扩展的自动适配方法。本发明提供的嵌入式系统,包括CPU和扩展SDRAM存储器,所述CPU的若干GPIO 引脚分别通过连通或断开上拉电阻或下拉电阻获得不同的状态组合,且每种所述状态组合 分别对应一种用于系统扩展的SDRAM存储器,所述CPU根据所述若干GPIO引脚的当前状态 组合获得所述扩展SDRAM存储器的厂商ID,并调用相应厂商的初始化参数对SDRAM进行初 始化,所述扩展SDRAM存储器为所述用于系统扩展的SDRAM存储器中的一种。在上述系统中,所述若干GPIO引脚通过拨动开关实现与所述上拉电阻或下拉电 阻的通断。
在上述系统中,所述用于系统扩展的SDRAM存储器为一个SDRAM或多个SDRAM存 储器的组合。在上述系统中,所述多个SDRAM存储器的组合为多个相同或不同SDRAM存储器的组合。 在上述系统中,还包括若干扩展Flash存储器,根据系统使用的Flash的属性,定 义多个用于表示系统扩展用的Flash存储器属性的结构体数组,该结构体数组分别包含每 一个Flash存储器的厂商ID、容量大小、扇区大小和系统为该Flash存储器分配的起始地 址,所述CPU依次向所述起始地址发送不同厂商的读命令字分别获得所述若干扩展Flash 存储器的厂商ID及Flash存储器的属性,在系统内存器扩展时,发送相应的读、写命令字使 用相应的扩展Flash存储器。本发明提供的嵌入式系统存储器扩展的自动适配方法,包括以下步骤建立若干GPIO引脚的不同状态组合与用于系统扩展的SDRAM存储器的一一对应 关系;安装扩展SDRAM存储器并根据所述对应关系调整若干GPIO引脚的不同状态;CPU读取当前的若干GPIO引脚的状态组合获得所述扩展SDRAM存储器的厂商ID ;调用相应SDRAM存储器厂商的初始化参数对所述扩展SDRAM存储器进行初始化。在上述方法中,所述用于系统扩展的SDRAM存储器为一个或多个SDRAM存储器的组合。在上述方法中,所述多个SDRAM存储器的组合为多个相同或不同SDRAM存储器的组合。在上述方法中,如果使用Flash存储器扩展,则首先根据系统使用的Flash的属性,定义用于表示系统扩展用的多个Flash存储 器属性的结构体数组,该结构体数组分别包含各Flash存储器的厂商ID、容量大小、扇区大 小和系统为该Flash存储器分配的起始地址;CPU依次向系统为Flash存储器分配的起始地址发送不同厂商的读命令字获得相 应Flash存储器的厂商ID,进而查找所述结构体数组获得扩展Flash存储器器ID及其属 性;根据Flash存储器的厂商ID和设备ID发送相应的读取命令字对所述扩展Flash 存储器进行读写。在上述方法中,当使用位扩展的方法扩展存储容量时,选择相同规格的SDRAM存 储器;当使用字扩展的方法扩展存储容量时,选择SDRAM存储器或Flash存储器或SDRAM存 储器与Flash存储器的组合。本发明,采用软件的方式读取存储器的生产厂家ID和设备ID,用以区分不同类型 的存储器,并进行相应的操作,从而使得一套BSP可以兼容不同厂家、不同类型的存储器, 能够对不同配置的硬件兼容,有效地减少了底层人员对不同配置的BSP进行维护的工作, 增加了系统的可扩展性,减少工程维护的投入。


图1为本发明提供的嵌入式系统的一种结构示意图2为本发明提供的嵌入式系统存储器扩展的自动适配方法的流程图;图3为SDRAM存储器扩展的自动适配流程图;图4为Flash存储器扩展的自动适配流程图。
具体实施例方式下面结合附图对本发明作出详细的说明。图1为本发明提供的嵌入式系统结构示意图,如图1所示,嵌入式系统包括CPU、扩 展SDRAM存储器和扩展Flash存储器。CPU的若干GPIO引脚分别通过连通或断开上拉电阻或下拉电阻获得不同的状态 组合(插装电阻或拔出电阻),预先设定各GPIO引脚的状态组合与一种用于系统扩展的 SDRAM存储器的一一对应关系,用于系统扩展的SDRAM存储器为一个SDRAM或多个SDRAM存 储器的组合,多个SDRAM存储器的组合可以是多个相同的SDRAM存储器的组合,也可以是多 个不同SDRAM存储器的组合,不同SDRAM存储器指的是不同厂商的存储器或同一厂商不同 型号的存储器。为了方便地调整GPIO引脚与上拉电阻或下拉电阻的通断,可以通过设置拨 动开关的方式实现。在对嵌入式系统进行存储器扩展时,通过调整上拉电阻或下拉电阻使 得CPU各GPIO引脚的状态组合与所要扩展的SDRAM存储器的类型相对应,CPU根据各GPIO 引脚的当前状态组合状态获得系统的扩展SDRAM存储器的厂商ID,并在引导程序之中调用 相应厂商的初始化参数对SDRAM进行初始化。同一段初始化代码可兼容相同容量的多种 SDRAM。嵌入式开发中,同一个片选CS上可以连接多片相同容量的SDRAM,构成一块内存空 间。如果采用多个片选CS连接,则只需要将GPIO引脚设置为一个特定的值,且该值与单个 片选连接SDRAM时的GPIO值不重叠。在初始化这些SDRAM之前,根据GPIO的值判断系统采 用的是多个片选连接SDRAM,还是单个片选连接SDRAM,然后采用对应的内存初始化函数。如果嵌入式系统还采用若干Flash存储器进行扩展,则首先为这些Flash都分配 存储空间(包括起始地址和存储容量),且为这些Flash分配的存储空间不重叠。当对这 些Flash进行读写操作时,则CPU依次向系统为这些Flash存储器分配的相应起始地址发 送不同厂商的读命令字从而分别获得若干Flash存储器的厂商ID及Flash存储器的属性。 Flash存储器的属性是指Flash存储器的容量大小、扇区大小和系统为该Flash存储器分配 的起始地址。获得扩展Flash存储器的厂商ID及Flash存储器的属性后,在系统内存器扩 展时,发送相应的读、写命令字使用相应的扩展Flash存储器。本发明还提供了一种嵌入式系统存储器扩展的自动适配方法,如图2所示,包括 以下步骤A10、首先根据系统使用的Flash的属性,定义用于表示系统扩展用的多个Flash 存储器属性的结构体数组,该结构体数组分别包含各Flash存储器的厂商ID、容量大小、扇 区大小和系统为该Flash存储器分配的起始地址;A20、建立若干GPIO引脚的不同状态组合与用于系统扩展的SDARM存储器的一一 对应关系,如前所述,用于系统扩展的SDRAM存储器为一个SDRAM或多个SDRAM存储器的组 合,多个SDRAM存储器的组合可以是多个相同的SDRAM存储器的组合,也可以是多个不同 SDRAM存储器的组合,不同SDRAM存储器指的是不同厂商的存储器或同一厂商不同型号的 存储器。具有不同存储器属性的同一厂商的SDRAM存储器也对应不同的若干GPIO引脚的不同状态组合。A30、安装扩展SDRAM存储器并根据所述对应关系调整若干GPIO引脚的不同状 态;A40、CPU读取当前的若干GPIO引脚的状态组合获得当前系统安装的扩展SDRAM存 储器的厂商ID ;并调用相应SDRAM存储器厂商的初始化参数对扩展SDRAM存储器进行初始 化。A60、安装扩展Flash存储器,CPU依次向系统为扩展Flash存储器分配的起始地 址发送不同厂商的读命令字获得相应Flash存储器的厂商ID,进而查找所述结构体数组获 得扩展Flash存储器的设备ID及其属性;A70、根据Flash存储器的厂商ID和设备ID发送相应的读取命令字对所述扩展 Flash存储器进行读写。本发明提供的嵌入式系统存储器扩展的自动适配方法中,当使用位扩展的方法扩 展存储容量时,选择相同规格的SDRAM存储器。位扩展一般适用于存储器的字(单元)数不 满足要求而位数不够的情况下,对每个存储单元的位数进行扩展。该方法通过增加字长而 字数不变来扩大容量,需要选择同种型号大小的芯片,即SDRAM存储器的厂商及容量大小、 扇区大小等存储器属性完全相同。当使用字扩展的方法扩展存储容量时,选择不同类型的存储器,字扩展用于存储 芯片的位数满足要求而字数不够的情况,是对存储单元数量的扩展。该方法通过增加字数 而位数不变来扩大容量,即可以选择SDRAM存储器,也可以选择Flash存储器。在实际工程 应用中,主要是因为存储字数而扩展容量。下面通过几个典型应用对本发明进行进一步的说明。假设嵌入式系统上原有一片SDRAM存储器A,其对应的GPIO引脚的状态组合值为 1,现根据实际应用需要对其进行扩展,以下是多种扩展方式的详细介绍。(1)、增加一片与SDRAM存储器A同一厂商的SDRAM存储器Al或不同厂商的SDRAM 存储器B作为扩展存储器,如图3所示。根据预先定义,与SDRAM存储器Al相对应的GPIO引脚的状态组合值为2,与SDRAM 存储器B相对应的GPIO引脚的状态组合值为3。当使用SDRAM存储器Al进行扩展时,首先在嵌入式系统上安装扩展存储器SDRAM 存储器Al,然后调整拨动开关,使若干GPIO引脚与相应的上拉电阻或下拉电阻接通,从 而改变GPIO引脚的状态组合值,使当前的GPIO引脚的状态组合值为2,与扩展存储器 SDRAM存储器Al相对应。在系统初始化时,CPU读取各GPIO引脚的状态SDRAMType,判断 SDRAMType的类型,从而获得SDRAM存储器Al的厂商类型SDRAM_A,然后调用该厂商的存储 器初始化参数进行初始化,实现了扩展存储器的自动适配。当使用SDRAM存储器B进行扩展时,在嵌入式系统上安装扩展存储器SDRAM存储 器B的同时,调整拨动开关,改变GPIO引脚的状态组合值为3,与SDRAM存储器B相对应,以 下CPU的执行步骤与上述执行步骤相同,不再赘述。当需要增加多片与SDRAM存储器A不同的SDRAM存储器时,其方法与前述方法相 似,只是多片SDRAM存储器的组合对应不同的GPIO状态组合。例如,此时GPIO引脚的状态 组合值为4。
(2)、增加一片与SDRAM存储器A相同的SDRAM存储器Al。增加多片与SDRAM存储器A相同的SDRAM存储器时,GPIO的状态组合值均不相同。 例如,增加两片与SDRAM存储器A相同的SDRAM存储器时,GPIO引脚的状态组合值为5 ;±曾 加三片与SDRAM存储器A相同的SDRAM存储器时,GPIO引脚的状态组合值为6,等等。(3)、增加多片Flash存储器。由于SDRAM和FLASH的初始化和操作的位置不一样,SDRAM只需要一次初始化,在 引导程序中执行;而Flash在系统执行的过程中才会有读写操作。因此,用FLASH进行扩展 时,需采用不同的处理方法。下面以两片Flash存储器FlashA和FlashB为例加以说明,如 图4所示(1)定义用于表示多个Flash的全局数组变量typedef struct flash_dev_s{UINT32 base ;int vendorlD ;int devicelD ;int sectors ;int IgSectorSize ;}flash_dev_t ;上述Flash数组结构中,base用来标识系统为某一 Flash分配的起始地址; vendorlD用来标识该Flash器件的厂商ID,devicelD用来标识该Flash器件的设备ID, sectors用来标识该Flash扇区数目,IgSectorSize标识该Flash扇区的大小。(2)定义一个全局变量VerdorlD,并赋初值为0,该变量用来存放Flash的厂商类型。(3)发送厂商A的Flash读命令字到系统为Flash分配的起始地址base,然后从 Flash中存放厂商ID的地址读取Flash的Verdor ID。(4)判断获得Verdor ID与表示厂商A的数组VendorA_Flash中成员变量 vendorlD是否一致,如果不一致,则跳转到步骤(6)。(5)发送厂商A的Flash读命令字,并从Flash中存放设备ID的地址读取Flash 的Device ID。如果获得的Device ID,与VendorA_Flash中的devicelD不致,并且与 VendorAl_Flash中的devicelD也不一致,程序执行步骤(6);否则,则跳转到步骤(7)。Flash Al和Flash A主要是为了区分同一厂家不同容量的Flash芯片,同一厂家 的不同类型的Flash器件,也存在扇区大小的不一致,定义全局数组的时候,扇区大小是一 个重要的参数。而Flash B则是指其他厂家的Flash,因为不同厂家的读写命令字不一样。 此外,SDRAM是内存,相当于电脑里面的内存条的功能,Flash则扮演硬盘的角色。如果没有 Flash,增加一片Flash ;或者在已经有Flash的基础上采用新片选信号CS增加一片Flash, 都可以看作是Flash扩展。每增加一片或者兼容一片Flash,都只需要增加该Flash的全局 数组,在探测Flash的厂家信息代码中增加根据全局数组探测该Flash ID的代码,在读写 时增加该Flash对应的命令字分支就可以了。(6)发送厂商B的Flash读命令字,并从Flash中存放设备ID的地址读取Flash 的Verdor ID和Device ID。如果获得的Verdor ID和Device ID与表示厂商A的数组VendorB_Flash中的verdorlD和devicelD不一致,则程序执行结束。(7)将获得的Verdor ID和Device ID组合起来,赋值给全局变量VerdorlD。(8)根据全局变量VerdorlD来选择不同的全局Flash数组VendorA_Flash、 VendorAl_Flash和VendorB_Flash,并根据不同的数组发送不同的命令字,对Flash器件进 行读、写和擦除操作。(9)操作结束。本发明不局限于上述最佳实施方式,任何人应该得知在本发明的启示下作出的结 构变化,凡是与本发明具有相同或相近的技术方案,均落入本发明的保护范围之内。
权利要求
1.嵌入式系统,包括CPU和扩展SDRAM存储器,其特征在于所述CPU的若干GPIO引脚 分别通过连通或断开上拉电阻或下拉电阻获得不同的状态组合,且每种所述状态组合分别 对应一种用于系统扩展的SDRAM存储器,所述CPU根据所述若干GPIO引脚的当前状态组合 获得所述扩展SDRAM存储器的厂商ID,并调用相应厂商的初始化参数对SDRAM进行初始化, 所述扩展SDRAM存储器为所述用于系统扩展的SDRAM存储器中的一种。
2.如权利要求1所述的嵌入式系统,其特征在于,所述若干GPIO引脚通过拨动开关实 现与所述上拉电阻或下拉电阻的通断。
3.如权利要求1所述的嵌入式系统,其特征在于,所述用于系统扩展的SDRAM存储器为 一个SDRAM或多个SDRAM存储器的组合。
4.权利要求3所述的嵌入式系统,其特征在于,所述多个SDRAM存储器的组合为多个相 同或不同SDRAM存储器的组合。
5.如权利要求1至4项任一项所述的嵌入式系统,其特征在于,还包括若干扩展Flash 存储器,根据系统使用的Flash的属性,定义多个用于表示系统扩展用的Flash存储器属性 的结构体数组,该结构体数组分别包含每一个Flash存储器的厂商ID、容量大小、扇区大小 和系统为该Flash存储器分配的起始地址,所述CPU依次向所述起始地址发送不同厂商的 读命令字分别获得所述若干扩展Flash存储器的厂商ID及Flash存储器的属性,在系统内 存器扩展时,发送相应的读、写命令字使用相应的扩展Flash存储器。
6.嵌入式系统存储器扩展的自动适配方法,其特征在于包括以下步骤建立若干GPIO引脚的不同状态组合与用于系统扩展的SDRAM存储器的一一对应关系;安装扩展SDRAM存储器并根据所述对应关系调整若干GPIO引脚的不同状态;CPU读取当前的若干GPIO引脚的状态组合获得所述扩展SDRAM存储器的厂商ID ;调用相应SDRAM存储器厂商的初始化参数对所述扩展SDRAM存储器进行初始化。
7.如权利要求6所述的嵌入式系统存储器扩展的自动适配方法,其特征在于,所述用 于系统扩展的SDRAM存储器为一个或多个SDRAM存储器的组合。
8.如权利要求7所述的嵌入式系统存储器扩展的自动适配方法,其特征在于,所述多 个SDRAM存储器的组合为多个相同或不同SDRAM存储器的组合。
9.如权利要求6或7所述的嵌入式系统存储器扩展的自动适配方法,其特征在于,如果 使用Flash存储器扩展,则首先根据系统使用的Flash的属性,定义用于表示系统扩展用的多个Flash存储器属 性的结构体数组,该结构体数组分别包含各Flash存储器的厂商ID、容量大小、扇区大小和 系统为该Flash存储器分配的起始地址;CPU依次向系统为Flash存储器分配的起始地址发送不同厂商的读命令字获得相应 Flash存储器的厂商ID,进而查找所述结构体数组获得扩展Flash存储器器ID及其属性;根据Flash存储器的厂商ID和设备ID发送相应的读取命令字对所述扩展Flash存储 器进行读写。
10.如权利要求9所述的嵌入式系统存储器扩展的自动适配方法,其特征在于,当使用 位扩展的方法扩展存储容量时,选择相同规格的SDRAM存储器;当使用字扩展的方法扩展 存储容量时,选择SDRAM存储器或Flash存储器或SDRAM存储器与Flash存储器的组合。
全文摘要
本发明公开了一种嵌入式系统及其存储器扩展的自动适配方法,该嵌入式系统包括CPU、扩展SDRAM存储器和Flash存储器,CPU的若干GPIO引脚分别通过连通或断开上拉电阻或下拉电阻获得不同的状态组合,且每种所述状态组合分别对应一种用于系统扩展的SDRAM存储器,CPU根据若干GPIO引脚的当前状态组合获得扩展SDRAM存储器的厂商ID,并调用相应厂商的初始化参数对SDRAM进行初始化;通过Flash的命令字获得Flash厂商的ID,并调用相应厂商的命令字对Flash进行读写。本发明,采用软件的方式读取存储器的生产厂家ID和设备ID,来区分不同的类型的存储器,使得一套BSP可以兼容不同厂家、不同类型的存储器,减少了底层人员对不同配置的BSP进行维护的工作,增加了系统的可扩展性,减少工程维护的投入。
文档编号G06F3/06GK102063275SQ20101061638
公开日2011年5月18日 申请日期2010年12月31日 优先权日2010年12月31日
发明者谢威, 邓作, 邱成刚 申请人:武汉烽火网络有限责任公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1