VxWorks从Flash BOOT的实现方法

发布者:Serene123最新更新时间:2012-03-27 来源: 61ic关键字:VxWorks  Flash  BOOT 手机看文章 扫描二维码
随时随地手机看文章

  引言

  美国WindRiver公司的实时嵌入式系统VxWorks和美国Motorola 公司MPC860系列处理器已经广泛的应用在通信行业的通信产品中,在用VxWorks系统进行开发时,会生成两个文件,一个是BootRom文件,此文件类似Windows中的BIOS,是引导文件,完成内存初始化,内核初始化,基本硬件的初始化并最终引导VxWorks系统启动,另外一个是 VxWorks文件,此文件中包括VxWorks系统内核及上层应用程序,而这两个文件在MPC860的开发中一般都存储在两片不同的Flash上,及 BootRom存储在BOOT Flash,而VxWorks存储在Flash上。

  产品需要

  实际开发中,生成的没有压缩的BootRom大小一般为512K左右,在VxWorks 5.4中是460K左右,而在VxWorks 5.5中是540K 左右,一般存储BootRom的Flash只需要512K大小,因为即使540K的 BootRom也可以截成512K。

  在硬件开发 Flash选型时,BOOT Flash芯片一般采用SST公司的28VF040、29VF040等,Flash芯片一般会采用Intel、AMD公司的,根据需要可能会采用容量为4M、8M、16M、32M大小不等。从节省成本的角度考虑,是不是可以将BootRom直接装载到Flash中并引导呢,这样不是可以省掉一片BOOT Flash吗?

  VxWorks系统中,加上上层应用程序的生成的VxWorks文件一般为3M左右,所以不管你采用4M、8M或者更大容量的Flash,同时装载BootRom、VxWorks文件也是绰绰有余的。

  实际情况

  我和一个做硬件的朋友曾经做过这样的测试,直接从Flash引导BootRom,并引导VxWorks系统,实际上是可行的。
要解决此问题,实际上只要将Flash的地址稍做处理就可以的。

  我们将Flash地址映射成两个地址段,一段用做BootRom,一段用做VxWorks使用,用做BootRom的地址段为 0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段为0x04080000~0x04800000(假设此Flash大小为8M大小),在0xFFF00000~0xFFF80000地址段写入BootRom,在0x04080000~0x04800000地址段写入 VxWorks,加电后,PC指针会跳到0xFFF00100地址执行第一条指令,引导BootRom起来并最终VxWorks系统引导成功。

  实现过程

  1、 片选

在romInit.s文件中要做如下的片选操作,片选0为BOOT Flash的地址片选,片选1为Flash的地址片选,其中ROM_BASE_ADRS为0xFFF00000
/* ------------------------------------------------------------------------ */
/*  Initialize Chip Select 0 for Bootrom                  */
/* ------------------------------------------------------------------------ */
lis r5, HIADJ( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V) 
addi r5, r5, LO( ROM_BASE_ADRS | BR_PS_8 | BR_WP | BR_V)
stw r5, BR0(0)(r4)

lis r5, HIADJ( 0xFFF80000 | 0x00000100 | 0x00000080)
 addi r5, r5, LO( 0xFFF80000 | 0x00000100 | 0x00000080)   
stw r5, OR0(0)(r4)

/* ------------------------------------------------------------------------ */
/*  Initialize Chip Select 1 for FLASH                   */
/* ------------------------------------------------------------------------ */
 lis r5, HIADJ( 0x04000000 | BR_PS_16 | 0x00000001) 
 addi r5, r5, LO( 0x04000000 | BR_PS_16 | 0x00000001)     
stw r5, BR1(0)(r4)

lis r5, HIADJ(0xff800000 | 0x00000100 | 0x00000080)
 addi r5, r5, LO(0xff800000 | 0x00000100 | 0x00000080)[page]
stw r5, OR1(0)(r4)

  2、 地址映射

  在sysLib.c文件中有一sysPhysMemDesc的地址映射数组的声明,对BOOT Flash和Flash的地址按照如下的地址映射后,VxWorks系统才会让你对此地址进行相应的读写操作。

{
   (void *) 0x04000000,
(void *) 0x04000000,
     0x00800000,                          /* 8 m - Flash window 1 */
     VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE,
     VM_STATE_VALID | VM_STATE_WRITABLE
},

    {
    (void *) ROM_BASE_ADRS,
    (void *) ROM_BASE_ADRS,
    ROM_SIZE,    /* Flash memory */ 
VM_STATE_MASK_VALID | VM_STATE_MASK_WRITABLE | 
VM_STATE_MASK_CACHEABLE ,
    VM_STATE_VALID | VM_STATE_WRITABLE | 
VM_STATE_CACHEABLE_NOT 
    }

  3、 文件烧录

  还存在一个问题,因为BOOT Flash是可以在烧录器上烧录的,而Flash芯片是直接焊接在MPC860的主板上,只能通过相应的Flash驱动才能进行读写的,是不可能通过烧录器烧录,要解决此问题那只能按照如下办法解决。
在主板上要保留有BootRom Flash座,要有一片从BOOT Flash引导的BOOT Flash芯片,此芯片中要有已经烧录好的可以正常运行的 BootRom程序,先将此芯片加到BootRom Flash座上,加电将系统引导起来,然后用事先写好的将BootRom及VxWorks写入 Flash的函数将BootRom及VxWorks文件写入Flash相应的地址段,注意写入地址要正确,即BootRom的第一条指令必须写在 0xFFF00100地址,关电后将BOOT Flash从座中取出来,加电后系统就从Flash中引导起来了。 

关键字:VxWorks  Flash  BOOT 引用地址:VxWorks从Flash BOOT的实现方法

上一篇:基于MCP2030无线激活的低功耗系统设计
下一篇:VxWorks下基于CS4281声卡的VOIP设计与实现

推荐阅读最新更新时间:2024-03-16 12:56

Flash为基础的FPGA实现高度安全设计
保密的重要性 对电子系统而言,FPGA的保密性极其重要。图1列出了两个系统设计的示意图,左边为1995年所作的系统设计,在该设计中,以ASIC芯片为核心,FPGA仅起到胶合逻辑的作用;在右边2005年进行的同类型系统设计中,不难发现FPGA已经成为系统设计的核心,它整合了原有ASIC及部分ASSP芯片的功能,因此FPGA作为系统芯片直接取代了ASIC的功能。随着FPGA性能、容量与功能的不断提升,今天的FPGA 已成为系统的心脏、知识产权的集合,所以如果FPGA存在安全性问题的话,与其相关的产品将遭受严重打击。 保密性定义——四个对FPGA最大的安全威胁 a.克隆 克隆是指竞争对手拷贝启动
[嵌入式]
以<font color='red'>Flash</font>为基础的FPGA实现高度安全设计
STM32F103 SPI flash操作注意事项
之前一直使用的W25Q16 spi flash都没问题,换了一款W25Q80后发现工作不正常,经过测试,初步定位到问题在于初始化SPI后是否将CS拉高。于是又去查看了一下原厂代码: 发现原厂的代码初始化SPI接口时是专门拉高CS的。 结论:网上很多代码初始化SPI接口时没有专门拉高CS,对某些型号可能确实是没问题,但兼容性不好,最好是加上。
[单片机]
STM32F103 SPI <font color='red'>flash</font>操作注意事项
TQ2440 学习笔记—— 27、移植U-Boot【Bootloader 作用、工作流程】
一、Bootloader 简介 1、系统上电之后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制寄存器、将更多的代码复制到内存中等。如果它能将操作系统内核复制到内存中运行,无论从本地(比如Flash)还是从远端(比如通过网络),就称这段程序为Bootloader 。 简单的说,Bootloader 就是这么一段小程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用操作系统内核。 2、Bootloader 的启动方式 CPU 上电后,会从某个地址开始执行。比如MIPS 结构的CPU 会从0xBFC00000取第一条指令,而ARM 结构的CPU则从地址 0x0000000
[单片机]
TQ2440 学习笔记—— 27、移植U-<font color='red'>Boot</font>【Bootloader 作用、工作流程】
STM32G0技术详解 _ Flash
这篇文章给大家介绍一下 STM32G0的FLASH 模块。 STM32G0是支持指令缓存的,有16个字节的指令缓存,OTP区有1K字节,支持快速烧录、PCROP+安全存储区域和ECC纠错,安全存储区域目前只在H7和G0两个系列中存在。 STM32G0一个bank就嵌入了高达128KB的FLASH。FLASH接口管理所有访问存储保护,安全和选项字节编程。 运用优势 :高性能低功耗、小的擦除粒度、短的烧录时间、安全和保护。 主要特性 : 单bank高达128K字节; 2K字节的页面粒度; 快速擦除(22ms)和快速烧录时间(85µs双字); 预取指和指令缓存; ECC纠错:每64位双字就有8位纠错码对应 单错误检测和纠错 双错
[单片机]
STM32G0技术详解 _ <font color='red'>Flash</font>
ok6410 u-boot-2012.04.01移植六完善MLC NAND支持
继ok6410 u-boot-2012.04.01移植四、五后,开发板基本已支持MLC NAND,支持DM9000.但是通过NAND命令更新u-boot到NAND,还存在问题,需要根据u-boot的nand命令继续修改,最终实现通过网卡tftp程序到内存,接着通过NAND命令写到NAND。 开发环境: 系统:ubuntu 10.04.4 单板:ok6410 NAND FLASH:K9GAG08U0D 2048MB NOR Flash:EN29LV160AB 2MB DDR:K4X1G163PCX2 256MB NET:DM9000AEP 编译器:arm-linux-gcc-4.3.2 搭建开发环境详见ubuntu 10.04.4开
[单片机]
STM32F103内部FLASH及地址表
在我们应用开发时,经常会有一些程序运行参数需要保存,如一些修正系数。这些数据的特点是:数量少而且不需要经常修改,但又不能定义为常量,因为每台设备可能不一样而且在以后还有修改的可能。将这类数据存在指定的位置,需要修改时直接修改存储位置的数值,需要使用时则直接读取,会是一种方便的做法。考虑到这些数据量比较少,使用专门的存储单元既不经济,也没有必要,而STM32F103内部的Flash容量较大,而且ST的库函数中还提供了基本的Flash操作函数,实现起来也比较方便。 以大容量产品STM32F103VE为例,其Flash容量达到512K,可以将其中一部分用作数据存储。如下是大容量的Flash组织模式: 根据上面的Flash组织模式,我们
[单片机]
STM32F103内部<font color='red'>FLASH</font>及地址表
ARM的两种启动方式 (NAND FLASH. NOR FLASH
为什么会有两种启动方式? 这就是有两种FLASH 的不同特点决定的。 NAND FLASH 容量大,存储的单位比特数据的成本要低很多,但是要按照特定的时序对NAND FLASH 进行读写,因此CPU 无法对NAND FLASH 的数据进行直接寻址,CPU 对NAND FLASH 中数据的读写是通过专门的 nand flash控制器进行的,因此 NAND FLASH 更适合于存储数据。 NOR FLASH 容量小,速度快,对NOR FLASH 进行读写时,输入地址,然后给出读写信号即可从数据总线上得到数据,但是价格要比NAND FLASH 高因此适合做程序存储器。 综上所述,NOR FLASH 可以直接连接到arm
[单片机]
TMS320C6713的FLASH引导装载系统设计
前言 DSP系统的引导装载是指在系统加电时,由DSP将一段存储在外部非易失性存储器中的代码移植到内部高速存储器单元并执行的过程。这种方式即可利用外部存储单元扩展DSP本身有限的ROM资源,又能充分发挥DSP内部资源的高速效能。因此,引导装载系统的性能直接关系到整个DSP系统的可靠性和处理速度,是DSP系统设计中必不可少的重要环节。在装载系统中,外部非易失性存储器和DSP的性能尤为重要。FLASH是一种高密度、非易失性的电可擦写存储器,而且单位存储比特的价格比传统EPROM要低。为此,本文介绍了TMS320C6713浮点DSP芯片和SST公司提供的SST39VF400A FIASH存储器的基本特点,给出了使用该FLASH存储器设计
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved