4474|4

54

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

学习总结 友善之臂mini2440 启动方式 地址映射与程序捎写 [复制链接]

  mini2440的开发板有两种启动方式,一是从Nor Flash启动,一是从Nand Flash启动。

  开始学习写关于LED 按键查询 蜂鸣器的汇编程序时,老师叫我们用Nor Flash启动,并选择[d]  Download&Run。到后来学习按键中断时,老师说先从Nor Flash启动,并选择[a]  Abosolute User Application,捎写完程序后,在关机,从Nand Flash启动,程序便可以运行了。

  那么,这到底有什么不同呢?从Nor Flash启动捎写程序并运行程序和从Nand Flash运行程序有什么不同呢? 为什么按键中断程序就一定要从Nand Flash运行程序呢?....太多的疑问,只有搞懂了硬件之间的关系,才能深刻的理解。

  先说从不同的启动模式,地址的映射关系吧:

   从Nor Flash启动时,与nGCS0相连的外部存储器Nor Flash就被映射到nGCS0片选的空间。开机界面程序bios存放在Nor Flash中,开机后,系统将Nor Flash中的bios拷贝到内存(0x3000 0000到0x3400 0000)的从0x33DE 8000开始及以上的空间,并先运行bios程序。

  (1)现在选择[d],系统将.bin的可执行文件下载到内存的从0x3000 0000开始及以上的空间,但是不能超出0x33DE 8000,并在内存中运行该程序。因为是直接将程序下载到内存,所以再次开机启动时,程序就没有了。

  (2)现在选择[a],系统将.bin的可执行文件下载到nand Flash中,nand Flash中原有的东西就被覆盖了。但是,下次开机启动时,程序还再。

下面说说为什么中断程序要捎到Nand Flash中,再从Nand Flash中启动?

  从Nand Flash启动时,内部的4K Bytes BootSram被映射到nGCS0片选的空间。系统启动后,Nand Flash中的东西也是拷贝到内存0x3000 0000处运行的,但是系统会认为是在0x000 0000,这是由硬件完成的。

  中断程序的开始,有以下程序段:

     AREA KEY_INTERRUPT,CODE,READONLY
     CODE32  
     ENTRY             ;INIT THE EXCEPTION VECTORS
     B MAIN            ;ADDRESS 0X0000_0000
     NOP               ;        0X0000_0004
     NOP               ;        0X0000_0008
     NOP               ;        0X0000_000C
     NOP               ;        0X0000_0010
     NOP               ;        0X0000_0014
     B IRQ_KEY         ;        0X0000_0018 ->address for irq exception vector addresses(you can find it in the exception vectors)
     NOP
这里对地址有严格的要求,它需要B MAIN这条指令一定在地址0x0000 0000处,而从Nand Flash启动时,系统就是将从0x0000 0000处的地址映射到Nand Flash中的。也就是ENTRY后面的第一条指令的地址就认为是绝对地址0x0000 0000的。

 为了检测如果从Nor Flash中启动是否也可以运行,我和同学编写了另一个小程序:

     AREA KEY_INTERRUPT,CODE,READONLY
     CODE32  
     ENTRY             ;INIT THE EXCEPTION VECTORS
     MOV PC,#0X00000000
     ;  B 0x00000000            ;ADDRESS 0X0000_0000   用B是编译不了的,用LDR也是编译不了的
     NOP               ;        0X0000_0004
     NOP               ;        0X0000_0008
     NOP               ;        0X0000_000C
     NOP               ;        0X0000_0010
     NOP               ;        0X0000_0014
     NOP               ;        0X0000_0018 ->address for irq exception vector addresses(you can find it in the exception vectors)
     NOP
     END

运行结果:

   将这个程序以第一种方式捎写入内存(即从Nor启动,选择[d]),运行结果是在超级终端上出现bios界面。也就是说 这种方式下,ENTRY后面的第一条指令的地址不是绝对地址0x0000 0000,绝对地址0x0000 0000是映射到内存0x3000 0000到0x3400 0000的某个空间。具体的说,就是

从0x33DE 8000开始存储的开机界面bios。这才符合运行结果。

 

   将这个程序以第二种方式捎写入内存(即从Nor启动,选择[a],再关机,从Nand flash启动) 运行的现象是,选择[a],并用串口捎写了程序后,出现bios界面;再关机,从Nand Flash启动,观察运行结果,什么也没有。也就是说 这种方式下,ENTRY后面的第一条指令的地址就是绝对地址0x0000 0000,而第一条指令 MOV PC,0x0000 0000,则一直就在运行这条指令,死循环,什么现象都没有。

捎写完的结果是:

 再关机,从Nand Flash启动,没有任何现象。
 这时,有人可能会问这不出现了bios吗?注意它不是在运行时出现的,而是捎写完程序出现的。况且捎写到Nand Flash中的程序已经把开机bios程序覆盖了,这里还处于Nor Flash启动方式,出现的bios界面是与这个选择[a]的处理程序有关的,不信的话,可以随便捎写一个LED灯的程序进去,超级终端上还是出现bios界面的。这不是运行结果,运行结果是看关机后,再从Nand Flash启动后,运行的现象。
[ 本帖最后由 Hellovictoria 于 2011-9-28 16:01 编辑 ]

最新回复

  同理 顶  详情 回复 发表于 2011-10-11 13:07
点赞 关注

回复
举报

54

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
自己先顶一下!
 
 

回复

1412

帖子

15

TA的资源

版主

板凳
 
帮你顶一下
 
个人签名https://bbs.eeworld.com.cn/thread-471646-1-1.html
欢迎加入我的团队
 
 

回复

54

帖子

0

TA的资源

一粒金砂(中级)

4
 

不好意思 图没有上传到服务器,现在上传。

第一个图:(地址映射关系)

第二个图:(从Nor启动,选择【d】)

第三个图:(从Nor启动,选择【a】,再从Nand启动)

 
 
 

回复

2751

帖子

0

TA的资源

裸片初长成(初级)

5
 

原帖由 youki12345 于 2011-10-5 16:12 发表 帮你顶一下

 

同理

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表