嵌入式 CPU 的启动方式和启动地址
sailor_forever sailing_9806#163.com
http://blog.csdn.net/sailor_8318/archive/2009/09/20/4573932.aspx
CPU上电后从哪里开始执行第一条指令?
答案可是千差万别 或许这是嵌入式 CPU区别于 X86等桌面处理器的一大特点
具体从哪启动是取决于何种 CPU类别和型号的,总体来说有两个因素:
1、启动方式
有些 CPU有多种启动方式,不同启动方式的启动设备是不一样的
典型的有片内 ROM启动,片外 flash启动 (又分为并口 /SPI等不同的接口形式 ),片外 EEPROM启动甚至是 RAM启动
如 AT91RM9200就有片内 ROM启动和片外并口 flash启动
TI F2812就有并口 flash启动和 IIC EEPROM启动
TI C6416只有 RAM启动,需要主控 CPU将程序下载到 RAM中,再触发复位
TI C6488启动方式更是多达五六种 每种都有不同的适用场合 可见多么强大
PPC440启动方式更是多达 8种
那么这么多种复杂的启动方式是如何选择的呢
通常都是通过硬件管脚控制的 可以设置跳线选择不同的启动方式
CPU上电时会对这些管脚进行采样 选择相应的启动方式
但是大部分 CPU通常都只有一种启动方式 即从并口 flash启动
2、启动地址
选择了某种启动方式后,启动地址通常都是固定的
ARM系统无论从何种设备启动都是从 0地址开始运行的
PowerPC通常是 0x100或者 0xFFF00100,如 Freescale MPC82xx系列
为什么有两种呢?默认是从 0xFFF00100启动,但是里面有程序后,可配置为从 0x100启动
也有从 0xFFFFFFFC启动的,如 E500及 IBM的 PPC405GP和 440,只有 4个字节,通常这里是一个跳转指令
MIPS也有从 0x1fc0 0000启动的
至于 DSP,那就更复杂了
总体来说,嵌入式 CPU为了使用特定场合的应用 启动设备繁多
但是 ARM的启动方式和启动地址是最简单的了
DSP最复杂 PowerPC有单一的也有多种启动方式的
另附一个参考文档
http://blog.mcuol.com/User/emblinux/Article/13496_1.htm