Loading
新闻中心库存中心价格中心PDF中心图片中心
ICGLE 电子技术支持中心,为电气人员和相关企业提供全面的信息(IC技术\IC库存\IC图片\PDF资料等)服务
总线设计PCB设计单片机DSPARM
JAVA驱动设计C/C++汇编J2EE网络协议中间件技术嵌入式系统无线通信通信网络模拟技术接口电路显示光电传感与控制EDA/PLD
气流体控制电子产品电机及工具通信设备仪器仪表电线电缆建筑电气低压电器高压电器电源工控自动化广电设备医疗器械More..
电源设计仪器仪表技术专递电路图片电子专栏储存技术汽车电子测量测试音响技术家用电器
成功方案市场分析行业标准应用前沿芯片应用综合专区
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)
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中引导起来了。 

Upload by 小刘(2007-1-8)
IC
IC
推荐技术文章:
·VxWorks中怎么从Flash B....
·基于嵌入式操作系统VxWorks的S....
·基于VxWorks的bootrom代....
·VxWorks for X86的输入....
·基于LPC2104的VxWorksB....
·嵌入式操作系统VxWorks中TFF....
·基于ARM7核处理器VxWorks系....
·基于VxWorks的产品映象设计..
·VxWorks应用技巧两例..
·基于VxWorks的飞机配电自动化主....
·VxWorks任务编程中常见异常分析..
·VxWorks体系下PowerPC8....
·VxWorks上WindML对多字节....
·vxWorks在线升级技术..
·基于Vxworks实时操作系统的串口....
·VxWorks网络驱动配置及分析..
·VxWorks中以太网通信报文的粘连....
·VxWorks下基于CS4281声卡....
·VxWorks系统下的RTL8139....
·基于VxWorks的视频采集系统的设....
·VxWorks下UDP协议栈效率的研..
·基于MPC860T的嵌入式通信服务器..
·基于VxWorks嵌人式操作系统的C..
·VxWorks操作系统及实时多任务程..
·基于嵌入式操作系统VxWorks的图..
·利用VxWorks作Internet..
·linux下命令行下编译c程序
·移植U-Boot到AT91RM920..
·一种改进嵌入式Linux操作系统实时..
·Linux内核初始化及启动之用户模式..
·Linux在信息家电(IA)上的应用
·嵌入式Linux的动态扩展技术研究
·基于Linux的嵌入式POS的GUI..
·Linux嵌入式系统与硬件平台的关系
·基于嵌入式Linux的打印控制系统的..
·Linux下获得CPU利用率和内存使..
·擂台战:嵌入式Linux面临图形化挑..
·面向多媒体应用的嵌入式Linux实时..
·Linux系统内存磁盘初始化技术详细..
·Linux下的网络HOOK实现以及使..
IC
IC

©2007 版权归ICGLE所有   页面执行时间:62.500毫秒