【基础】ARM芯片上电取第一条指令流程

转载:ARM上电启动及Uboot代码分析

网上关于ARM的bootloader(以Uboot为例)的启动顺序的资料有好多,但是对于Uboot的地址映射、体系结构级操作介绍很少,都是直接开始Start.s代码的阅读。本文拟详细分析Uboot从上电,到第一条指令的执行,同时分析代码对于cache、TLB等部件的操作过程。

以下内容以u-boot-2012.04.01源码为例,从网上很容易下载该版本。

1 ARM上电取第一条指令流程
1.1 上电后的第一条指令在哪里?
首先明确:对于ARM芯片,启动时pc值由CPU设计者规定,不同的ARM CPU有不同的值,例如S3C2440芯片上电后PC值被硬件设计者规定为0x0;其他ARM芯片不一定是0x0。

第一章讲述的上电取第一条指令过程以S3C2440为例,该芯片是ARMv4T架构,其他芯片在原理上类似。

S3C2440的启动时读取的第一条指令是在内存0x00地址处,不管是从nand flash还是nor flash启动。

但是上电后内存中是没有数据的,那么0x00地址处的指令是如何放进去的?针对不同的flash(nandflash、norflash),操作方式是不同的,下面讲述从nandflash和norflash启动的不同流程。

 

1.1.1  norflash和nandflash的异同
nandflash:价格低,容量大,适合大容量数据存储,地址线和数据线共用I/O线,所有信息都通过一条线传送,类比于PC的硬盘,

norflash:价格贵,容量小,适合小容量的程序或数据存储,类似硬盘,但是能在其中运行程序;有独立地址线、数据线

sdram:主要用于程序执行时的程序存储、执行或计算,类比于PC的内存;

 

综上:norflash比较适合频繁随即读写的场合,通常用于存储代码并直接在其中运行。nandflash用于存储资料。

只要知道以上大概区别就行。以下说明ARM从两种flash启动方式的异同。

 

1.1.1.1  ARM从nandFlash启动
若从nandflash启动,上电后nandflash控制器自动把nandflash存储器中的0——4K内容加载到芯片内的起步石(Steppingstone,起步石这个机制是处理器中集成的功能,对程序员透明),即内部SRAM缓冲器中,同时把内部SRAM的起始地址设置为0x0(不同的CPU上电后的PC值不尽相同,对不同的CPU该值也不尽相同),然后把这段片内SRAM映射到nGCS0片选的空间,进而CPU开始从内部SRAM的0x0处开始取得第一条指令,该过程全部是硬件自动完成,不需要程序代码控制。

或许你有个疑问,为什么不能直接把nandflash映射到0x0地址处?非要经过内部SRAM缓冲?

答案是,nandflash根本没有地址线,没法直接映射,必须使用SRAM做一个载体,通过SRAM把剩余的nandflash代码(即剩余的uboot启动代码)复制到SDRAM中运行。

若想从nandflash启动,那么uboot最核心的代码必须放在前4k完成。这4k代码要完成ARM CPU的核心配置以及将剩余的代码拷贝到SDRAM中(若从norflash启动则没有4k这个大小的限制,但是还会在完成最主要的设置后进入SDRAM中运行)。

 

1.1.1.2 ARM从norflash启动
若从norflash启动,则norflash直接被映射到内存的0x0地址处(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址不变,还是0x40000000),然后cpu从0x00000000开始执行(也就是在Norfalsh中执行)。

      需要说明的是,uboot代码段(.text段)起始位置必须是与上电后PC值一致,即编译uboot时,TEXT_BASE宏必须设置成0x0 ,反汇编uboot文件后,文本段第一条指令的地址也是0.

总结:

1、从norflash还是从nandflash启动,是由ARM的OM1和OM0引脚组合决定

2、不管从norflash还是nandflash启动,S3C2440上电后的pc值为0x0

3、如果某芯片上电后PC值不是0x0,假如是0x38ff0000,那么从norflash启动时,硬件就要自动将其映射到0x38ff0000地址处;如果从nandflash启动,那么硬件就要自动将nandflash中的前4K内容加载到0x38ff0000地址处。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 步进电机DSP芯片的开发主要涉及硬件设计、固件开发和测试验证三个步骤。 在硬件设计阶段,首先需要根据步进电机的特性和要求选择合适的DSP芯片,并进行原理图设计和布局。在原理图设计中,需要包括DSP芯片及其相关外设电路的连接,如电源电路、时钟电路、驱动电路等。布局设计需要合理布置电路,在电源电路和信号线之间留足足够的距离,避免干扰和干涉。完成后,通过打样、生产、测试等环节,制作出DSP芯片的相关硬件。 固件开发阶段,需要对DSP芯片进行编程。首先,需要根据步进电机的运行特性,编写相应的驱动程序,包括控制电机转动方向、步长、速度等功能。然后,将编写好的程序通过开发工具烧录到DSP芯片中。同时,还需要编写与外设的通信程序,实现DSP芯片与其他设备的数据传输和控制。最后,通过调试和测试,确保固件程序的正确性和稳定性。 在测试验证阶段,需要对开发好的DSP芯片进行功能验证和性能测试。通过连接步进电机、外设和开发工具,验证DSP芯片的控制功能是否符合设计要求,并进行性能测试。测试过程中需要注意测试程序的正确性和稳定性,同时记录测试数据和结果,为后续的改进和优化提供参考。 步进电机DSP芯片的开发是一个复杂而细致的过程,需要有深厚的硬件设计和编程技术,同时也需要充分的测试和验证。只有经过全面的开发过程,才能保证DSP芯片的正常运行和稳定性。 ### 回答2: 步进电机的DSP芯片开发包括以下几个关键步骤: 首先,确定项目需求,包括步进电机的型号、规格和所需控制功能。同时,了解目标市场和应用场景,确定DSP芯片所需的性能和功能。 第二步,选择合适的DSP开发平台或开发板,具备足够的计算能力和接口。例如,可以选择基于ARM架构的DSP芯片,这种架构具有丰富的资源、低功耗和高性能。 第三步,进行DSP程序开发。首先,编写DSP的初始化代码,配置引脚、外设和时钟等。然后,根据步进电机的特性和控制算法,编写步进电机的控制程序。控制程序中需要实现步进电机的加速、减速、速度控制、位置控制等功能。使用DSP的高级指令集(如乘法累加指令)可以提高运算效率。 第四步,测试和调试DSP程序。使用仿真工具进行初步验证,包括输入输出波形的比对和功能测试。然后,将DSP芯片与步进电机连接并进行实际测试,调整控制参数和算法,使其能够满足项目需求。 第五步,性能优化和系统集成。可以通过优化算法、增加缓存、使用并行计算等手段,提高DSP芯片的运行效率和性能。同时,将DSP芯片与其他系统组件进行集成,实现更加完整的步进电机控制系统。 最后,进行验证和生产。设计团队需要对DSP程序和整个系统进行全面验证,确保其稳定性、可靠性和性能。然后,将设计文件转移到生产线,进行批量生产。同时,根据市场需求持续改进和优化设计,提高步进电机的性能和功能。 ### 回答3: 步进电机DSP芯片的开发主要包括如下几个步骤: 1. 硬件设计:首先需要确定DSP芯片的型号和规格,根据步进电机的需求设计相应的电路板。包括选择合适的电源、时钟、通信接口等外围电路,并根据步进电机的特性设计驱动电路、电流控制电路和保护电路等。 2. 软件开发:根据DSP芯片的开发环境和编程语言,进行软件开发。通常会使用C语言或者汇编语言进行编程,通过编写相应的程序控制步进电机的转动。开发过程中需要考虑步进电机的类型、分辨率和速度等参数,编写相应的控制算法和驱动程序。 3. 调试和验证:完成软件开发后,将程序烧录到DSP芯片中,并通过相应的调试工具进行调试和验证。调试过程中需要测试步进电机的各项功能,确保其正常运行并满足设计要求。 4. 优化和性能测试:在完成基本功能的验证后,对DSP芯片进行性能测试和优化。通过调整算法和参数,并对芯片进行功能和负载测试,提高步进电机的控制精度和性能。 总而言之,步进电机DSP芯片的开发包括硬件设计、软件开发、调试验证和性能优化等多个环节,需要熟悉DSP芯片的特性和编程技术,并结合步进电机的需求进行系统设计和控制程序开发。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值