ARM程序的启动过程主要涉及以下几个方面:
启动方式
直接从NOR FLASH地址0x0开始:一些芯片支持直接从NOR FLASH的0x0地址开始执行程序,因为这样做最直接。
从NAND FLASH中前4K复制到SRAM中前4K再开始:更常见的方法是将NAND FLASH中的前4K字节复制到SRAM的前4K字节(称为“起步石”),然后从SRAM的0x0地址开始执行程序。
硬件映射和初始化
硬件映射:ARM处理器在上电后,默认将ROM(通常位于0x2C000000 - 0x2C006000)映射到地址0x00000000处,这是由硬件自动完成的,软件无需干预。
初始化存储器系统:包括配置存储器类型和时序、地址重映射及中断向量表的转移、堆栈初始化等。
启动代码
启动代码:ARM系统上电复位后,需要编写启动代码来完成系统初始化,包括设置中断向量表、初始化各模式堆栈、设置系统时钟频率等,并跳转到用户C程序。
启动代码的编写:启动代码的编写是一个重要的过程,通常包括向量表定义、地址重映射及中断向量表的转移、堆栈初始化、设置系统时钟频率、中断寄存器的初始化以及进入C应用程序。
加载和执行
加载程序:程序通常存储在FLASH上,ARM上电后从FLASH的0x0地址开始执行。
加载操作系统:如果系统包含操作系统,如Linux,启动过程会加载操作系统内核(如zImage),然后启动完成。
板级启动
板级启动:在没有操作系统的系统中,板级启动完成后直接运行;在有操作系统的系统中,板级启动会加载并启动操作系统。
建议
选择合适的启动方式:根据具体的应用需求和硬件平台选择合适的启动方式,确保程序能够正确加载和执行。
编写完善的启动代码:启动代码是系统正常运行的关键,需要仔细设计和测试,确保所有必要的初始化步骤都被正确执行。
考虑硬件映射和存储器配置:正确配置硬件映射和存储器系统,确保系统能够稳定运行。