WinCE S3C2410 nboot 实现

来源:互联网 发布:恋恋有词和红宝书 知乎 编辑:程序博客网 时间:2024/05/17 02:10
Nboot (Nand flash bootloader) 主要的作用就是初始化硬件,把后面的功能比较完善的引导程序像eboot之类的映像拷贝到SDRAM中让后跳到SDRAM中继续跑eboot

 

为什么要有nboot这个东西呢,其实主要是因为现在的soc上考虑到成本的问题,基本是都是自带一个nand flash的控制器并支持开机nand flash引导来取代相对来说昂贵的nor flash

 

一般来说nand flash的控制器都会内置一个SRAM之类的buffer来支持nand flash的开机引导,在nand启动的方式下,板子上电的时候,nand控制器会自动把nand flash最前面的buffer大小的数据自动拷贝到buffer中然后让pc指针可以从buffer中直接读取指令。一般来说这个buffer不会很大,2410的芯片是4k,而像freescaleimx21更是只有2k,所以由于这个局限性,我们只能把bootloader拆分成两部分,前面一部分来完成基本初始化功能,而后面一部分来完成比较完善的功能,让控制器自动拷贝前一部分,然后前一部分再拷贝后一部分到RAM中,这样引导程序就可以做任何它想做的事情了。

 

其实,实现一个nboot并没有多大难度,以下是一个大概流程:

1.       当然是配置时钟了,没这个系统跑不起来啊 o(_)o…

2.       不用说SDRAM的配置也是少不了,不然我们怎么把程序拷贝到SDRAM中。

3.       就是flash控制器的配置了,一般来说就是GPIO和相应的控制器寄存器配一下。

4.       拷贝文件从nandSDRAM中,nand flash读的话一般来说都是先拉片选位,然后发命令,接着是地址,最后就是读数了。

 

上面几步做完,其实整个nboot也就差不多了,不过在WinCE下开发的话有几个点需要特别注意:

1.       因为要用PB来编译,所以为了能生成.nb0文件,所以一定要在 代码里加上:

        pTOC    DCD   -1

        EXPORT pTOC

     这个是让ROMIMG.exeimage时用的.

2.       生成.nb0文件,bib文件也是不能少的。

3.       因为微软编译器的原因,导致了我们按一般方法来编译.nb0时,前面的4K都是空的,所以如果直接把编译出来的.nb0烧进去的话是不能用的,所以的在bib改一下:

把: NBOOT  00000000  00002000  RAMIMAGE 这个定义成8k的大小,然后后面的

ROMSTART=00001000

ROMSIZE=1000

   start地址往后移一下,然后大小改为4k,这样出来的nb0就会  把前面空的4k给截掉了。

 

  以上的都做完的话,基本上应该不会有什么问题了。