ASM9260T是一款嵌入式微处理器,其启动流程和内存管理是理解其开发工作的重要基础。本文将深入探讨ASM9260T的启动过程、内存布局以及sysloader和bootloader的角色。 当ASM9260T芯片上电或复位后,启动流程从位于0xFFFF0000地址的BootCode开始。BootCode在内部SRAM的[0x40001000,0x40001FFF]区域分配Data段和Stack。BootCode的主要任务是根据GPIO2_[5,6,7]的状态,确定从何种外部存储器(如SPI-Flash、IIC-EEPROM、Nand-Flash、Nor-Flash)加载sysloader到SRAM的[0x40000000,0x40000FFF]区域,并跳转至sysloader的入口执行。sysloader的代码大小需限制在4KB以内。 sysloader接着负责初始化系统PLL,设置CPU和HCLK时钟频率,初始化32MB的片内SDRAM,并从永久存储器读取应用程序镜像到SDRAM的特定地址,通常是0x20008000开始。sysloader运行后,会将64字节的异常向量表复制到0x20000000,并通过MMU将0x20000000开始的1MB空间映射到虚拟地址0x00000000。此外,[0x20004000,0x20007FFF]的16KB内存用于存放MMU的地址转换表,足够存储整个一级页表。 考虑到sysloader的空间限制,通常会在sysloader和应用程序之间添加一个bootloader。bootloader实现更复杂的功能,如以太网ISP、升级、加密和调试等。执行顺序为:BootCode→sysloader→bootloader→application。各部分在SPI-Flash和内存中的地址如下: - BootCode:不在SPI-Flash中,直接加载到0xFFFF0000 - sysloader:0x00000000加载,0x40000000执行 - bootloader:0x00010000加载,0x20008000执行 - application:0x00020000加载,0x20020000执行 sysloader在整个执行过程中保持在SVC模式,不开启中断,禁用MMU、Icache和Dcache。相比之下,bootloader的运行环境更接近应用程序,但在跳转到application之前,bootloader需要返回SVC模式,关闭不再使用的外设时钟和中断,清空Dcache,刷新Icache,确保application的启动状态如同由sysloader直接加载一样,仿佛bootloader从未存在。 了解这些启动流程和内存布局对于ASM9260T的开发至关重要,它们指导了固件的编写、存储器的管理和系统的初始化步骤,确保系统能够正确、高效地运行。在实际开发过程中,开发者需要严格遵循这些规则,以确保软件的稳定性和可靠性。
- 粉丝: 23
- 资源: 319
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0