Sam9x60启动流程解析

1. 简介

Microchip的Sam9x60芯片开机启动流程分为三部分

① 芯片内嵌的一级引导
② BootStrap二级引导
③ U-boot三级引导

2. at91内嵌一级引导

2.1 一级引导介绍

芯片嵌入了引导ROM代码,启动时,它根据复位时的BMS(引导模式选择)引脚状态启用,ROM代码扫描不同介质的内容,如串行闪存,NAND闪存,标清/ MMC卡和串行EEPROM。

如果里面有有效的引导应用程序可用,则它将该引导应用程序下载到芯片内部SRAM(Cache)中重映射,映射到0x00并运行它。

为了确定是否存在有效的引导应用程序,ROM 代码会检查八个 ARM 异常向量(包含跳转或偏移地址转载等arm指令)。

如果没有可用的有效应用程序,则执行 SAM-BA 监视器。它等待 USB 设备或 DBGU 串行端口上的事务,然后 SAM-BA 工具可用于对电路板上存在的闪存或 EEPROM 进行编程。
在这里插入图片描述
2.2 sam9x60内部存储配置
在这里插入图片描述
在这里插入图片描述

3. BootStrap二级引导

3.1 二级引导介绍

Bootstrap 是第二级引导加载程序,它提供了一组算法来管理硬件初始化。

例如时钟速度配置、PIO 设置、DRAM 初始化,以将主应用程序从指定的引导介质(NAND 闪存、串行闪存(与 DataFlash 的 AT25 兼容)、串行 EEPROM、SD 卡等)下载到主内存并启动它。

① 初始化时钟、PIO等设置
② 初始化PIO、PMC、SDRAM等外设
③ 初始化DataFlash、NandFlash等
④ 从DataFlash、NandFlash中装载U-Boot到SDRAM,并跳转执行

3.2 代码部分

我们可以在BootStrap源码里面找到binaries目录里的.map文件

什么是 MAP 文件?
简单地讲, MAP 文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,它可以在任何地方、任何时候使用,不需要有额外的程序进行支持。而且,这是唯一能找出程序崩溃的地方的救星。

在这里插入图片描述

从map可以了解到程序crt0_gnu.S汇编开始
在这里插入图片描述
再跳转到main.c
在这里插入图片描述
然后初始化相关硬件代码部分
在这里插入图片描述
关闭看门狗、led、使能PLLA、启动外部复位、初始化时钟、DDR等

其中DDR的初始化代码部分,个别参数需要查阅相关DDR手册填写
在这里插入图片描述在这里插入图片描述
最后是加载u-boot代码部分
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
加载完成后,就会跳转执行u-boot

四、U-boot启动

u-boot在作为第三级引导,Uboot 拿到 CPU 使用权就开始做初始化工作,比如关闭看门狗、设置 CPU 运行模式、设置堆栈、初始化内存、网卡、nand flash 等,最后把 Linux 内核加载到内存中。

u-boot这里就不做详细的分析了
在这里插入图片描述
在这里插入图片描述

五、开机log
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值