加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 20:02:55 所属栏目:百科 来源:网络整理
导读:AM335x NorFlash NonMux boot设计 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?---记录一段曲折的bootloader 1、开始... am335x的启动部分,貌似被不少人吐槽过。因为初次接触这个片子,硬件设计上有些小白处理,导致了一段曲折的boot过程。 2、开发环境

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读