AM335x NorFlash NonMux boot设计---记录一段曲折的bootloader

AM335x NorFlash NonMux boot设计

                                             ---记录一段曲折的bootloader

1、开始...

am335x的启动部分,貌似被不少人吐槽过。因为初次接触这个片子,硬件设计上有些小白处理,导致了一段曲折的boot过程。

2、开发环境及硬件连接

硬件平台:AM3354

软件:基于StarterWare_02_00_01_01

NORFlash型号:S29GL01GS-90TFI010-TSOP56

硬件连接:


从上面可以看出,硬件连接上没有采用复用设计。这也为这段曲折的脑筋急转弯埋下了伏笔。。。

3、am335x的boot过程

am335x启动时,分为以下过程

  • ROM---->根据boot config,自动执行rom中的代码,主要是选择启动方式例如nand,uart,等等
  • SPL---->选择启动方式后,加载SPL代码至ram或在xip内运行(例如norflash)
  • uboot---->spl将uboot拷贝到ddr,运行,c代码的入口

4、设计

这么一看第三部分,满简单的。选择从NORflash启动,由于norflash是xip设备,代码可以直接在其内运行。

(但是xip设备也是只能读取(读取无需特别指令),不能写入的。因此,code部分在norflash内(包括const),data等可变的部分在ram内,这些需要在cmd文件中指定。)

那我们就分步进行吧。

1)选择sysboot_config


               这里我们的设置包括

              10b--->25Mhz时钟

              00b

              00b---->non-muxed device

              0    ----->8bit-device     (这里为什么选择8bit呢,因为16位的norflash没有错开最低位,所以只能作为8位用,测试程序也是这么做的,正常接法的可以无视)

              0   ------>CLKOUT1-disableed

              11010b xip(MUX2)----->选择xip启动,MUX2可以参见datasheet.

2)spl设计1

              启动方式选择后,进行spl设计,normux下,只能使用12根地址线....所以spl代码必须在4k以内.感觉到d疼了么.


              图3

      下载starterware,导入bootloader程序,开始删删删,终于删除到了4K以内,得到了boot.bin...

             这里,烧写boot.bin文件时,我应该烧写到0x00000000,也就是norflash的0地址,可是,由于没有将boot和地址线做隔离处理,高位地址A12-A25 并非我们想象的也是0.

             查看am3359的datasheet的PIN RESET STATE可以看到,MMC0_CLK-MMC0_DAT3这6跟地址线是上拉的.还有我们最开始选择的25M时钟选择位也是上拉的。因此

             虽然访问的是0x00000000,但实际访问的地址是0x03F80000.所以烧写boot程序时,不要烧写到0x00000000,而是0x03F80000.不然肯定是启动失败.

3)SPL设计2

            SPL代码内,我们是不是可以pinmux所有管脚,将程序加载到ddr3运行了呢?这里还有一个问题.因为我们把程序烧写到了0x03F80000,高位地址是内部拉高的。我们如果初始化后,arm在访问0x08000000时,管脚已经可以将高位地址下拉了.这是就是真正的0x08000000了.所以,我做了下测试,直接pinmux所有管脚是不可行的.so.我们只初始化以下没有拉高的几个管脚a12-a15.这样就扩大了我们的寻址范围。这时再将另外一段代码拷贝到ddr内运行.这段代码我们叫他spl2。。。在spl2内,我们就可以pinmux所有管脚了.因为代码是在ddr内运行的。跟norflash没有关系了。


5、总结

        如果是硬件常规的接法,boot设计上会简单许多。推荐norflash做启动时使用pinmux方式。另外,高位地址与sysconfig冲突时,采用bus transceiver进行隔离。这部分的说明在下面的链接内有详细的解释。

        另外,烧写norflash的程序在最新的sdk里面的tools里面有。至此结束,其中可能有理解不到位的地方,欢迎拍砖。

http://www.deyisupport.com/question_answer/dsp_arm/sitara_arm/f/25/t/30869.aspx






你可能感兴趣的:(linux)