文件名称:上电后的第一条指令在哪里?-pynq-z2-配置和引导
文件大小:827KB
文件格式:PDF
更新时间:2024-06-28 01:57:42
ARM Uboot 源码分析
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 的异同 nand flash:价格低,容量大,适合大容量数据存储,地址线和数据线共用 I/O 线, 所有信息都通过一条线传送,类比于 PC 的硬盘, nor flash:价格贵,容量小,适合小容量的程序或数据存储,类似硬盘,但是能在 其中运行程序;有独立地址线、数据线 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 缓冲?