嵌入式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,如FreescaleMPC82xx系列
为什么有两种呢?默认是从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