本文主要介绍VxWorks系统在MPC860系列处理器的开发中怎样去掉BOOT Flash,直接从Flash引导VxWorks的BootRom。
WindRiver的VxWorks和Motorola的MPC860系列微处理器已经广泛应用到通信行业的通信产品中,在用VxWorks系统进行开发时,会生成两个文件,一个是BootRom文件,类似Windows中的BIOS,是引导文件,完成内存初始化,内核初始化,基本硬件的初始化并最终引导VxWorks系统启动,另外一个是VxWorks文件,此文件中包括VxWorks系统内核及上层应用程序,而这两个文件在MPC860的开发中一般存储在两片不同的Flash上,即BootRom存储在BOOT Flash,而VxWorks存储在Flash上。
实际开发中,生成的没有压缩的BootRom大小一般为512K左右,在VxWorks 5.4中有450K左右,而在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使用,用做BootRom的地址端为0xFFF00000~0xFFF80000,另外一段用做VxWorks的地址段为0x4080000~0x4800000(假设此Flash大小为8M大小),在0xFFF00000~0xFFF80000地址段写入BootRom,在0x4080000~0x4800000地址段写入VxWorks,加电后,PC指针会跳到0xFFF001000地址执行第一条指令,引导BootRom起来并最终VxWorks系统引导成功。
1、片选
在romInit.s文件中要做如下片选操作,片选0为BOOT Flash的片选地址,片选1为Flash的片选地址,其中ROM_BASE_ADRS为0xFF00000
/*--------------------------------------------------------------------------------------------------------------------*/
/* 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, BRO(0)(r4)
lis r5, HIADJ(0xFFF80000 | 0x00000100 | 0x00000080)
addi r5, r5, LO(0xFFF800000 | 0x000000100 | 0x000000080)
stw 5, ORO(0)(r4)
/*----------------------------------------------------------------------------------------------------------------*/
/* Initialize Chip Select 1 for FLASH */
/*----------------------------------------------------------------------------------------------------------------*/
lis r5, HIADJ(0x04000000 | BR_PS_16 | 0x000000001)
addi r5, r5, LO(0x04000000 | BR_PS_16 | 0x00000001)
stw r5, BR1(0)(r4)
lis r5, HIADJ(0xFF800000 | 0x000000100 | 0x0000080)
addi r5, r5, LO(0xFF800000 | 0x00000100 | 0x00000080)
stw r5, OR1(0)(r4)
地址映射
在sysLib.c文件中有一sysPhysMemDesc的地址映射数组的声明,对BOOT Flash和Flash的地址按照如下的地址映射后,VxWorks系统才会让你对此地址进行相应的读写操作。
{
(void *)0x4000000,
(void *)0x0400000,
0x0080000, /*8M - 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
}
文件烧录
因为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中引导起来了。