Chinaunix首页 | 论坛 | 博客
  • 博客访问: 79037
  • 博文数量: 26
  • 博客积分: 46
  • 博客等级: 民兵
  • 技术积分: 170
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-19 23:01
文章分类
文章存档

2012年(26)

我的朋友

分类:

2012-04-05 22:48:08

原文地址:6410硬件启动简单分析 作者:hogskintan

  主要讲一下硬件启动的流程以及DDR是在什么时候初始化的。
      S3C6410支持Nand/Nor/SD/iROM(内部ROM)几种启动方 式,OneNand用的比较少,就不说了。这里比较新的就是iROM启动,当OM[1:4]全部设置为1时就为iRom启动方式(OM[0]脚用于对时钟源的选择控制),此时当板子上电后,会首先执行iRom中的代码,iRom中的代码会根据GPN[15:13]的管脚来判断从哪个存储设备中取4KB的启动代码到 SteppingStone 中运行,这段代码被称为Bootloader1 BL1 ,其实就是异常向量表和_start代码,包含初始化DDR的代码,因为SteppingStone 是SRAM,不需要初始化就可以使用,因此当BL1执行了DDR初试化的代码后,再将GPN[15:13]的管脚指定的存储设备中的所有的 bootload代码拷贝到DDR中,包括之前已经拷贝的BL1,这样就顺利完成了启动。也就说iROM中并没有初始化DDR的代码,这很容易可以想 到:DDR的初始化方式各种各样,iROM没有那么多的代码空间去实现所有型号的DDR的初始化。
假如不是使用iROM启动,也就是使用Nand/Nor/Modem启动,(注意,不支持SD启动),那么启动的流程就会有点小变化了,我们以NandFlash为例:
当 芯片上电后,并不是执行iRom的代码,而是NandFlash控制器会自动使用DMA将自己的bootloader区域的前4KB代码搬运到 iRAM(内部SRAM),注意,这步操作是硬件执行的,并不是由C代码驱动的,当然前提是芯片内部的NandFlash控制器支持NandFlash启 动这个功能,很明显S3C6410的NandFlash控制器是支持NandFlash启动功能的。这里再补充一点:很多做软件的人平时习惯了C代码驱动 外设的方式,就会觉得很奇怪:硬件怎么能自动使用DMAC搬运数据呢,其实这很简单,在现代的SOC设计中,任何控制器均是由Verilog语言编写的, 然后整合到ARM芯片中,再进行综合和布局布线,到最后进行后端处理,比如画版图、流片,那么使用Verilog语言编写一个从NandFlash芯片中 取数据的硬件语言代码应该还是蛮简单的吧。
我们言归正传,如果nandflash中没有bootloader程序,那么此时芯片肯定无法启动,DDR也是没有初始化的。同样使用Nor启动也是一样。执行iRAM中的代码跟执行BL1中的代码是一样的,后面的流程也是一样的了。
这样应该就很清楚DDR是什么时候初始化的了吧。
QT6410开发板,设计板子的人已经将GPN【15;13】焊死,接了GND,所以当IROM启动时候只支持SD/MMC(CH0)

阅读(837) | 评论(0) | 转发(0) |
0

上一篇:6410移植之uboot

下一篇:ARM内核移植

给主人留下些什么吧!~~