Rom Code: am335x 系列soc在芯片内部的flash中固化了一段代码,称为rom code,在芯片上电或复位后首先执行芯片内部固化的这段代码,这段代码的作用为引导二级bootloader(SPL)的镜像文件到内部sram中运行。 AM335x引导模式: 所谓AM335x的引导模式其实就是二级bootloder(SPL)镜像的读取方式,刚才提到rom code的作用是将二级bootloader加载到内部的sram运行。那么AM335x的引导方式决定了rom code从什么地方以及通过什么样的方式获取SPL的可执行镜像文件。 AM335x支持两大类的引导模式,分别为memory模式及外设模式。memary模式可以从NAND flash、NOR flash及eeprom中读取SPL镜像文件并加载到内部sram中运行。外设模式是指rom_code可以通过芯片的一些通信接口(比如EMAC、Serial、USB)获取SPL镜像文件并加载到内部sram中运行。 am335x的引导模式取决于上电或复位时芯片一组引脚的状态,称作SYSBOOT[15:0]共16位(详见cpu手册4106页)。 rom code的运行流程: 1、 芯片复位后PC指针首先跳转到0x20000地址开始执行rom_code并做芯片的简单初始化 2、 rom_code根据SYSBOOT的配置生成引导设备列表 3、 查看当前的引导类型是memory模式还是外设模式,并通过相应的接口或地址读取SPL 4、 SPL image读取成功,执行SPL镜像,SPL开始运行 5、 SPL image读取失败,尝试启动列表中的下一个外设或接口 6、 若所有外设都没有正确读取到SPL image,则进入死循环(dead loop)等待看门狗复位 SPL(secondary program loader) SPL作用: SPL是紧接着rom_code的第二级bootloader,主要负责板载的部分初始化、加载及运行u-boot SPL执行流程: 内存重映射 保存启动参数(Dowloaded Image区域:用来保存SPL文件) CPU的初始化 设置堆栈区,将会调用C函数来实现CPU的初始化。(6KB Public stack) 执行s_init()函数,实现CPU的初始化 给外设设置好PLL和时钟频率等 使能32-KHz频率的实时时钟 使能UART0 初始化定时器 初始化控制台,通过UART可以查看相关信息 配置DDR 第三级bootlodar: 引导内核加载到DDR。
|