在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
芯片精品文章合集(500篇!)    创芯人才网--重磅上线啦!
查看: 8433|回复: 18

MPC8272的上电起动过程解析(一)

[复制链接]
发表于 2009-2-1 14:39:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
最近一段时间,一直在学习MPC8272相关的东西,现在把学到看到的东西记录下来,网上关于powerpc的资料好像很少,讨论的也不多,所以我拿出来分享一下,希望对哪里存有质疑或者疑问的朋友可以把问题提出来,大家一起交流。实际上我用的芯片是8247,但是文档都是通用的。
第一部分:MPC8272处理器上电启动首先,在PowerPC 603e内核中,重置有很多种情况,比如上电重置,看门狗重置,软重置,硬重置,当然越软的重置需要进行初始化的内容就越少,这里从相对最复杂的上电重置进行说明,内核支持硬件重置配置字(HRCW),处理器上电者复位后,拉低#PORESET外部引脚(在引脚名称前面加#表示取反),进入上电重置流程,在外部电压到达至少2/3 Vcc后,#PORESET引脚至少被持续16个输入时钟周期。当#PORESET从低到高发生跳转时,驱动#RSTCONF引脚决定芯片的配置,如果这时候#RSTCONF是高电平,则芯片在配置过程中作为从设备,当它是低电平时则作为一个配置主设备。进行配置主从的选择后,MPC8272开始进行设置。在整个上电重启以及配置过程中,#HRESET和#SRESET都必须是拉低状态。配置过程花费1024个CLOCKIN周期,之后读取MODCK[1:3]用来决定芯片的工作模式,这段时间 MPC8272处理器挂起直到主PLL(锁相环)稳定。PLL的锁定以及分频器的确定都是与时钟模式有关的,在每种时钟模式下,总线,核心,PCI以及CPM的频率都是取决于MODCK,MODCK一共有7位,MODCK[1:3]是三个硬件配置引脚,MODCK[4:7]也就是硬件配置字中的MODCK_H 4位。当主PLL稳定后,向其他设备分配时钟信号。#HRESET继续保持512个时钟周期后释放,#RESET在再经过三个时钟周期后释放。关于重置配置(硬件重置配置字),32位,复位后,首先从CS0空间地址为0x0,0x8,0x10,0x18处,通过数据总线D[0:31]读取4个字节的配置字节,分别取D0--D7位,将他们拼接成一个32位HRCW(如果有多个处理器,它会接着按相同的方式从0x20-0xF8读取其他slave的HRCW,当系统治右一个处理器时,这些字节仅仅保留空间)。硬件重置配置字可以储存在flash或者EEPROM中,如果有需要,可以启动设备的指定地址写入配置字节,以供设备启动加载。在以后的u-boot代码分析中,就会说明写硬件重置配置字的过程。主要配置内容(启动存储器端口宽度,系统时钟配置,cpu内部寄存器地址空间的起始地址等,e.g. BPS=01:启动存储器既EEPROM端口宽度为8位;BMS=0:启动存储器的地址空间为0xFE00 0000—0xFFFF FFFF;这个地址是EEPROM的问题,可以理解成把EEPROM映射到这个地址,这些地址与EEPROM选址相对应。ISB=100:CPU内部寄存器空间起始地址为0xF000 0000;MODCK_H=1010:与MODCK[1:3]=100配合,决定PLL倍频因子为4,即系统时钟为400MHz)随后处理器执行一个系统重启异常,中断向量偏移量对应的地址为0x100,即为向量号,异常向量表所在内存空间的位置根据HRCW可能有0x0000 0000和0xFFF0 0000两个,与向量号相加后,得到中断地址,由于内部CS0片选已经与flash或者EEPROM相连,所以直接从EEPROM或者flash连接的位置偏移0x100开始读指令。但是最后跳转的时候我有些不确定,对于CS0片选,我是把它理解成把flash存储器映射到以CS0所指的位置为基地址的一段存储空间上,分为高地址和低地址两种,即0x0地址和0xfff0 0000地址,但是偏移的0x100是从这个地址跳入flash中呢?还是在flash中需要有0x100的偏移量?
发表于 2009-2-2 10:39:25 | 显示全部楼层
顶!期待下文!

关于偏移地址的问题:如果你的启动存储设备映射到0xFE00 0000,那么boot程序就是从0xFE00 0100开始,就是说CPU从0xFE00 0100处开始取指令;如果映射到0x0000 0000,那么启动程序就是从0x0000 0100开始。映射到什么地址空间取决你硬件配置字中的设置。实际上就是从你flash上便宜0x100开始的地方开始读取指令,而flash中0x0--0xff的地方放置的是配置字和其他的一些信息。
发表于 2009-2-4 14:40:37 | 显示全部楼层
我们公司的板子它的 启动地址为0xfff00000。

在 编译u-boot-1.2.0所 产生的u-boot.bin文件里,它的真正有效数据是从0x100开始的。所以直接将u-boot.bin烧写到 0xfff00000处的 nor flash地址处即可。
发表于 2009-2-10 06:58:02 | 显示全部楼层

呵呵~!~!!~

本帖最后由 looneyxp 于 2010-2-26 23:10 编辑

 楼主| 发表于 2009-2-10 13:08:39 | 显示全部楼层
kingzc1982所说的你们公司的板子是从0xFFF00000启动,这句话我没有理解
高地址启动或者低地址启动应该是跟据硬件配置字而确定的
而硬件配置字应该是在程序中写好的
是不是因为你们公司的板子硬件配置字的那位选择是高地址启动的呢?
发表于 2009-2-10 15:19:25 | 显示全部楼层


原帖由 Sauce 于 2009-2-10 13:08 发表
kingzc1982所说的你们公司的板子是从0xFFF00000启动,这句话我没有理解
高地址启动或者低地址启动应该是跟据硬件配置字而确定的
而硬件配置字应该是在程序中写好的
是不是因为你们公司的板子硬件配置字的那位选择 ...



你理解是对的,CS#0所在的位置是由配置字决定的。
发表于 2010-2-4 09:36:38 | 显示全部楼层
怎么就没有下文了呀??期待呀。。
发表于 2010-2-6 13:08:52 | 显示全部楼层
太强悍了。在下佩服得五投地!
发表于 2010-2-9 11:23:34 | 显示全部楼层
非常好,我正需要这样的。我的一点理解,看对不对:
关于启动地址,0xFFF00000和0xFE000000,这个应该是配置字决定的。
前面说了,配置字的读取地址跟CPU引脚有关系,可以配置为CS0开始读取。楼主应该就是这样的,像832x还可以配置为I2C读取。
读取配置字后就会决定启动地址,这里就应该可以为0xfff或者0xfe0开头了吧。
但是我有点还不明白。因为如果flash接的是0xfe的话,那么上电时CS0应该在0xfff啊,他怎么可能读到正确的配置字呢?
有点晕~~~
发表于 2010-3-26 17:03:47 | 显示全部楼层
版主说了“首先从CS0空间地址为0x0,0x8,0x10,0x18处...”,注意这里的0x0、0x8等就是CS0片选为Low时的绝对地址。即不论你将Flash定义到哪段地址空间,上电取配置字这个过程,CPU将CS0有效,
(1)将Address线置为0x0--->取D[0:7];
(1)将Address线置为0x8--->取D[0:7];
......

以上过程和后面系统启动后再操作Flash的空间是2个独立的过程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-6 20:18 , Processed in 0.034564 second(s), 12 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表